《构建高可用Linux服务器 第3版》—— 1.4 Linux服务器的日志管理

1.4 Linux服务器的日志管理

从安全的角度来说,Linux服务器的日志非常重要,它记录了系统每天所发生的各种各样的事情,如果服务器受到攻击,就可以根据它来进行分析。同时,它更是很重要的排障依据,可以通过它来检查错误发生的原因,所以我们必须了解和熟悉其运作机制。

1.4.1 系统日志syslog.conf的配置详解

目前,Linux依旧使用syslog作为日志监控进程,对其进行必要的配置能减少很多麻烦,并且可更有效地从系统日志监控到系统的状态。理解并完善一个syslog的配置,对于系统管理员来说尤为重要。/etc/syslog.conf根据如下的格式定义规则:

facility.level action

设备.优先级 处理方案

facility.level字段也称为seletor(选择条件),选择条件和处理方案之间用空格或tab分隔。#开头的是隔,空白行会自动跳过。下面分别介绍。

(1)facility(设备)

facility定义了日志消息的范围,其可以使用的key如下所示。

auth:由pam_pwdb报告的认证活动。

authpriv:包括特权信息,如用户名在内的认证活动。

cron:与cron和at有关的计划任务信息。

daemon:与inetd守护进程有关的后台进程信息。

kern:内核信息,首先通过klogd传递。

lpr:与打印服务有关的信息。

mail:与电子邮件有关的信息。

mark:syslog的内部功能,用于生成时间戳。

news:来自新闻服务器的信息。

syslog:由syslog生成的信息。

user:由用户程序生成的信息。

uucp:由uucp生成的信息。

local0~local7:与自定义程序一起使用。

另外,*通配符代表除了mark以外的所有功能,还有security为一个旧的key定义,等同于auth,已经不建议使用。

(2)level(优先级)

level定义了消息的紧急程度。按严重程度由高到低顺序排列如下:

emerg:该系统不可用,等同于panic。

alert:需要立即被修改的条件。

crit:危急情况。

err:错误消息,等同于error。

warning:预警信息,等同于warn。

notice:具有重要性的普通条件。

info:提供信息的消息。

debug:不包含函数条件或问题的其他信息。

none:没有重要级,通常用于排错。

另外,*代表所有级别,除了none外,panic、error、warn均为旧的标识符,不建议使用。

在定义level级别的时候,需要注意两点:

优先级是由应用程序在编程的时候决定的,除非修改源码再编译,否则不能改变消息的优先级。

低优先级包含高优先级,例如,为某个应用程序定义info的日志导向,则涵盖notice、warning、err、crit、alert、emerg等消息。

(3)selector(选择条件)

通过小数点符号“.”把facility和level连接在一起则称为selector(选择条件)。

可以使用分号“;”同时定义多个选择条件。也支持如下三个修饰符:

:表示所有日志信息。

=:等于,即仅包含本优先级的日志信息。

!:不等于,本优先级日志信息除外。

(4)action(处理方案)

由前面选择条件定义的日志信息,可执行下面的动作:

file:指定日志文件的绝对路径。

terminal或print:发送到串行或并行设备的标志符,例如/dev/ttyS2 @host表示远程的日志服务器。

username:发送信息到本机的指定用户信息窗口中,但该用户必须已经登录系统。

named pipe:发送到预先使用mkfifo命令创建的FIFO文件的绝对路径中。

1.4.2 Linux下的日志维护技巧

1.系统日志

/var/log/messages不仅是服务器的系统日志,很多时候它也是许多服务的日志,所以它被称为“系统杂货铺”,建议重点关注。大家一般都喜欢用以下命令来看最后10条日志:

tail -n10 /var/log/messages

其实还可以将一段日志保存成文件(Xmanager3.0企业版的shell也有日志录像截取功能),或者直接用vim来处理。我以前配置主从复制的bind服务器时,有时会因为权限的原因报错,这时就可以在一台报错的服务器上用命令tail-f /var/log/messages实时查看服务器的日志变化情况,从而查找错误的蛛丝马迹,事实证明,效果很好,而且将此命令用于LVS+Keepalived的排错效果也不错,其他服务器配置排错依此类推,这个做法也推荐大家掌握。

2.系统安全日志

/var/log/secure记录登入系统存取数据的文件,例如POP3、SSH、Telnet、FTP等都会被记录,我们可以利用此文件找出不安全的登录IP。目前比较流行的SSH防暴力破解工具DenyHosts主要也是读此文件。另外,我写了一个类似原理的shell安全脚本,用于线上服务器,在后面的章节跟大家分享。

3.记录登录者的数据

/var/log/wtmp记录登入者的信息数据,由于此文件已经被编码过(为二进制文件),想用cat等命令直接查看是不行的,必须使用last命令来取出文件的内容,如下所示。

last
命令显示结果如下:

root   pts/2    220.249.72.138 Wed Mar 30 08:33  still logged in

root   pts/2    220.249.72.138Tue Mar 29 09:02 - 15:42 (06:39)

root   pts/2    220.249.72.138Tue Mar 29 07:31 - 09:01 (01:30)

root   pts/2    219.139.223.49Tue Mar 29 00:14 - 00:29 (00:15)

root   pts/2    183.94.4.206Mon Mar 28 20:46 - 21:21 (00:34)

root   pts/2    113.57.224.3Mon Mar 28 11:30 - 12:17 (00:46)

root   pts/4    219.139.223.142Sun Mar 27 15:58 - 18:10 (02:11)

root   pts/3    113.57.224.3Sun Mar 27 14:28 - 18:25 (03:57)

root   pts/3    113.57.224.3Sun Mar 27 09:20 - 11:56 (02:35)

root   pts/3    219.140.210.152Sun Mar 27 01:16 - 01:29 (00:12)

root   pts/2    220.249.72.138Sat Mar 26 08:42 - 18:38 (1+09:55)

root   pts/2    220.249.72.138Thu Mar 24 11:19 - 14:44 (1+03:25)

root   pts/2    220.249.72.138Wed Mar 23 10:26 - 09:13 (22:47)

root   pts/2    220.249.72.138Tue Mar 22 07:22 - 13:38 (06:16)

root   pts/2    119.103.112.43Mon Mar 21 18:08 - 18:38 (00:29)

root   pts/2    119.103.112.43Mon Mar 21 16:26 - 18:07 (01:41)

root   pts/3    119.103.82.129Mon Mar 21 12:22 - 12:25 (00:02)

root   pts/2    119.103.121.252Mon Mar 21 11:59 - 14:11 (02:12)

root   pts/2    119.103.121.252Mon Mar 21 11:50 - 11:53 (00:02)

root   pts/2    119.103.30.213Sun Mar 20 10:03 - 12:42 (02:39)

root   pts/3    58.19.17.3Sat Mar 19 12:22 - 12:22 (00:00)

root   pts/2    220.249.72.138Sat Mar 19 07:07 - 16:05 (08:58)

root   pts/2    219.140.213.209Sat Mar 19 01:39 - 01:55 (00:16)

4.记录系统时间

/var/log/lastlog记录每个使用者最近登入系统的时间。因此当使用者登入时,就会显示其上次签入的时间,你应该注意一下这个时间,若此时间不是你上次签入的时间,表示账号可能被人盗用了。此可执行文件可用/usr/bin/lastlog命令读取(FreeBSD8.1下为/usr/sbin/lastlogin)。使用此命令后的记录如下所示:

lastlog
命令结果显示如下:

用户名      端口   来自       最后登录时间

root       pts/2  220.249.72.138  三 3月 30 08:33:33 +0800 2011

bin                    从未登录过

daemon从未登录过

adm从未登录过

lp从未登录过

sync从未登录过

shutdown从未登录过

halt从未登录过

mail从未登录过

news从未登录过

uucp从未登录过

operator从未登录过

games从未登录过

gopher从未登录过

ftp从未登录过

nobody从未登录过

nscd从未登录过

vcsa从未登录过

pcap从未登录过

rpc从未登录过

apache从未登录过

mailnull从未登录过

smmsp从未登录过

ntp从未登录过

hsqldb从未登录过

xfs从未登录过

rpcuser从未登录过

sshd从未登录过

dbus从未登录过

avahi从未登录过

haldaemon从未登录过

avahi-autoipd从未登录过

gdm从未登录过

longfei从未登录过

ldap从未登录过

www从未登录过

mysql从未登录过
5.服务器的邮件日志

服务器的邮件为/var/log/messages,如果要用专业的日志分析工具来分析,推荐使用Awstats;如果公司的开发对邮件的要求比较低,可以配置最简单的Sendmail或Postfix,通过看邮件日志里的status状态来判断邮件是否正确发送。在配置Nagios服务器时,我也习惯用此日志来判断报警邮件是否发送,如果对自己的shell水平足够有自信,也可以写脚本来收集邮件服务器的返回状态等,但专业的事情,建议还是由专业的Awstats工具来做,特别是邮件负载比较大时(比如,每天几百万条日志或上千万条日志),依靠人力完全不可取。

6.输出iptables日志到一个指定文件中

iptables的man参考页中提到:我们可以使用iptables在Linux内核中建立、维护和检查IP包过滤规则表,iptables自身的三个表可能已经创建,每一个表包含了很多内嵌的链,也可能包含用户自定义的链。iptables默认把日志信息输出到/var/log/messages文件中。不过有些情况下(比如你的Linux服务器是用来做防火墙或NAT路由器的),你可能需要修改日志输出的位置,通过修改或使用新的日志文件,可以帮你创建更好的统计信息,或者帮你分析网络攻击信息。下面向大家介绍如何建立一个新的日志文件/var/log/iptables.log。

输出iptables日志信息到一个指定文件的方法如下所示。

首先打开/etc/syslog.conf文件:

vim /etc/syslog.conf
然后在文件末尾加入下面这行信息:

kern.warning /var/log/iptables.log

最后保存和关闭文件,使用下面的命令重新启动syslogd:

service syslog restart

7.日志文件的专业工具

Linux系统的一些常见服务,比如Apache、Nginx、Squid等,都有自己特定的日志文件,不过由于其格式比较复杂,还是推荐使用专业工具(如Awstats、Webalizer)来分析。

8.用dmesg查看启动消息

dmesg提供了一个简单的方法查看系统启动信息。当Linux启动的时候,内核的信息被存入内核ring缓存当中,dmesg可以显示缓存中的内容。默认情况下,dmesg打印内容到屏幕上,当然,你可以重定向输出到一个文件中。如果硬件损坏,会显示在dmesg日志里,可用命令dmesggrep error来查看相关内容,其实看到的也就是/var/log/dmesg中的内容。

9.关于cron的日志

默认情况下,在crontab中执行的日志写在/var/log下,我们可以先看看/etc/syslog.conf里的配置,通过命令grep cron/etc/syslog.conf来查看,命令结果如下所示:

*.info;mail.none;authpriv.none;cron.none /var/log/messages

# Log cron stuff

cron.* ```
接着看/var/log/下的cron日志,命令如下所示:

ls -lsart /var/log/cron*
命令结果显示如下所示:

 80 -rw------- 1 root root 72378 03-20 04:02 /var/log/cron.2

812 -rw------- 1 root root 819861 03-27 04:02 /var/log/cron.1

524 -rw------- 1 root root 525442 03-31 13:59 /var/log/cron
当crond执行任务失败时,crontab的日志会向用户发送一封邮件。如果在服务器上发现一个任务没有正常执行,而crond的邮件发送也失败,那么检查一下mail的日志,看看是否因磁盘空间不够而造成的。

为了方便收集crond的日志信息,也可以将cornd错误输出和标准输出日志都指向自定义的日志文件:

0 6 * * * root /bin/bash /root/test_file.sh >>/data/log/mylog.log 2>&1
10.用Shell脚本分析日志

在维护线上服务器时,并不需要查看每台服务器的日志,可以偏重于我们有需求的服务器,如果不太喜欢用Awstats来分析Nginx负载均衡器的日志,可以编写一段分析日志的Shell脚本,下面分享一下我用Shell编写的分析Nginx日志的脚本,它可以快速得出排名最前的网站和IP等,内容如下所示:

!/bin/bash

if [$# -eq 0 ]; then

  echo "Error: please specify logfile."

  exit 0

else

  LOG=$1

fi

if [! -f$1 ]; then

  echo "Sorry, sir, I can't find this apache log file, pls try again!"

exit 0

fi

echo "Most of the ip:"

echo "-------------------------------------------"

awk '{ print$1 }'$LOG | sort | uniq -c | sort -nr | head -10

echo

echo

echo "Most of the time:"

echo "--------------------------------------------"

awk '{ print$4 }'$LOG | cut -c 14-18 | sort | uniq -c | sort -nr | head -10

echo

echo

echo "Most of the page:"

echo "--------------------------------------------"

awk '{print$11}'$LOG | sed 's/^.\(.cn\)\"/\1/g' | sort | uniq -c | sort -rn | head -10

echo

echo

echo "Most of the time / Most of the ip:"

echo "--------------------------------------------"

awk '{ print$4 }'$LOG | cut -c 14-18 | sort -n | uniq -c | sort -nr | head -10 > timelog

for i in 'awk '{ print$2 }' timelog'

do

  num='grep$i timelog | awk '{ print$1 }''

  echo "$i$num"

  ip='grep$i$LOG | awk '{ print$1}' | sort -n | uniq -c | sort -nr | head -10'

  echo "$ip"

  echo

done

rm -f timelog

可以用此脚本分析文件名为www_tomcat_20110331.log的文件:

sh counter_nginx.sh www_tomcat_20110331.log
大家应该跟我一样比较关注脚本运行后的第一项和第二项结果,即访问我们网站次数最多的IP和哪个时间段IP访问次数比较多,如下所示:

Most of the ip:

-------------------------------------------

  5440 117.34.91.54

   9 119.97.226.226

   4 210.164.156.66

   4 173.19.0.240

   4 109.230.251.35

   2 96.247.52.15

   2 85.91.140.124

   2 74.168.71.253

   2 71.98.41.114

   2 70.61.253.194

Most of the time:

--------------------------------------------

   12 15:31

   11 09:45

   10 23:55

   10 21:45

   10 21:37

   10 20:29

   10 19:54

   10 19:44

   10 19:32

   10 19:13
时间: 2024-08-27 14:21:18

《构建高可用Linux服务器 第3版》—— 1.4 Linux服务器的日志管理的相关文章

《构建高可用VMware vSphere 5.X虚拟化架构》——第2章 构建高可用vCenter Server 2.1vCenter Server版本以及运行环境的选择

第2章 构建高可用vCenter Server Center Server是VMware vSphere虚拟化架构核心的管理平台,从vCenter Server 4.0版本到最新5.5版本,每一次版本的升级,都带来前所未有的体验.从5.1版本开始,VMware官方更重视其管理平台的安全,SSO是一大亮点. 2.1 vCenter Server版本以及运行环境的选择 在进行高可用vCenter Server构建之前,必须先确定vCenter Server所使用的版本以及运行环境. 2.1.1 vC

《构建高可用Linux服务器 第3版》—— 导读

前言 我的系统架构师之路 2004年我初识UNIX开源系统.那会儿我正在一家大型国有企业做系统管理员,负责值守公司的Windows Server 2000服务器.当时"震荡波"和"冲击波"这两种病毒很猖狂,虽然我们在防毒方面投入了大量的精力和金钱(当时购买的都是正版Windows 2000系统和正版瑞星杀毒软件),但新上线的机器,偶尔也有遗漏的时候,没有打补丁的机器无一幸免,所以对这个问题比较头疼.有一次去朋友的公司(某省太平洋寿险下面的一个分支机构)参观,我发现他

《构建高可用Linux服务器 第3版》—— 第3章 生产环境下的Shell脚本

第3章 生产环境下的Shell脚本 虽然Shell脚本只是一个简单的解释型语言,不会受到开发人员的重视,但对于我们系统管理员来说它有着举足轻重的作用,它可以帮助我们简化日常的工作并减少工作量,成为系统管理员的瑞士军刀.我们在系统维护工作中用Shell脚本常常能比用C语言编写的程序更快地解决相同的问题.此外,Shell脚本具有很好的可移植性,有时跨越UNIX与POSIX兼容的系统,仅需略作修改,甚至不必修改即可使用Shell脚本. 在日常工作中Shell脚本能帮助我们做什么呢? 1)配合Cront

《构建高可用VMware vSphere 5.X虚拟化架构》——第1章 构建高可用ESXi主机 1.1 物理服务器的选择

第1章 构建高可用ESXi主机 对于VMware vSphere虚拟化实施人员以及管理人员来说,可以使用HA等高级特性来实现ESXi主机出现故障后迁移到其他ESXi主机.ESXi主机的稳定性.平均无故障时间在生产环境中是相当关键的技术指标.ESXi主机如何可以称为高可用?从生产环境来说,ESXi主机所使用的物理服务器硬件配置是高可用ESXi主机的基础,其次ESXi版本也是高可用ESXi主机的另一个重点. 本章介绍如何选择物理服务器.如何对 ESXi 4.1 主机进行升级.如何使用 VMware

《构建高可用VMware vSphere 5.X虚拟化架构》——导读

前言 虚拟化技术近几年时间得到迅速发展,使用各种虚拟化架构打造企业应用平台越来越多. 作者从2006年开始使用VMware虚拟化架构打造企业应用平台,在多个项目实施过程中,传统高可用企业应用平台需要昂贵的硬件和软件才能实现,而使用虚拟化架构可以轻松实现. 目前市场上关于虚拟化的书籍一般以入门为主,介绍如何使用虚拟化平台,包括作者的<VMware vSphere 5.0虚拟化架构实战指南>一书.市场上没有关于如何使用虚拟化架构打造高可用企业应用平台的书籍,更没有实施过程中问题的处理的相关图书.作

Consul实践之Consul结合nginx构建高可用可扩展的Web服务

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://dgd2010.blog.51cto.com/1539422/1730439 前文<Consul实践之Consul是什么>讲述了consul是什么,这篇文档是一个Consul实际应用的一个例子,用Consul结合nginx构建高可用可扩展的Web服务.Consul还能做许多其他的事情,可以根据实际需要构思和使用. 方案概述 nginx提供的负载均衡服务同样支持高可用.可扩展的W

利用keepalived构建高可用MySQL-HA

介绍利用keepalived构建高可用MySQL-HA,保证两台MySQL数据的一致性,然后用keepalived实现虚拟IP,通过keepalived自带的服务监控功能来实现MySQL故障时自动切换. AD: 关于MySQL-HA,目前有多种解决方案,比如heartbeat.drbd.mmm.共享存储,但是它们各有优缺点.heartbeat.drbd配置较为复杂,需要自己写脚本才能实现MySQL自动切换,对于不会脚本语言的人来说,这无疑是一种脑裂问题:对于mmm,生产环境中很少有人用,且mmm

基于API网关构建高可用、高安全性API

        今天我们来聊聊如何借助API网关构建高可用.高安全性的云API,充分利用API网关给我们带来的便利. 认证         从API定义上我们可以定义多种认证类型的API,除特殊API外建议定义APP认证方式或其有安全认证类型的API,这样一旦发生攻击或者大量非法调用时我们可以知道谁在调用,便于我们通过黑名单等措施及时进行限制 HTTPS 建议对数据传输安全性要求较高的API仅开放HTTPS调用方式,另外在证书选择上,强烈建议大家选购Verisign的安全证书,因为Verisig

《构建高可用VMware vSphere 5.X虚拟化架构》——1.8 本章小结

1.8 本章小结 任何高可用 ESXi 主机的都是以硬件为基础,选择品质可靠.搭配合理的物理服务器是构建高可用ESXi主机的前提.其次是ESXi的版本,在生产环境,不推荐使用最新的版本,目前VMware 官方已经发布 ESXi 5.5 版本,新的版本可能存在一些BUG,不建议直接用于生产环境,推荐使用ESXi 5.0 update1或ESXi 5.1 update1的版本,这两个版本的稳定性已经得到生产环境的认可. 对老版本ESXi 4.0或4.1升级的时候特别需要注意:企业可能使用配置较低的物

如何在阿里云上构建高可用应用

业务高可用是我们每个项目的需求,一个经常故障的项目,会让我们觉得不靠谱而选择放弃,从而导致项目的失败.今天,我们来聊一聊,如何让你自己的业务能够更加稳固的运行! 本次我们从四个不同的角度,来分析,如何让我们的应用更加稳固,平稳运行. 一.        程序架构 优秀的代码 优秀的代码非常重要,即使我们拥有最好的硬件资源和架构,如果我们没有一套健壮的代码,其他资源再好都没有用,所以代码在设计和编写时,应当注意代码的健壮程度.优秀的代码不止开发起来方便,同时维护成本也较低,对于后续的优化来说,健壮