-
[翻译]Troubleshooting Linux with syslog - [GNU/Linux]2009-07-09
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://opendream.blogbus.com/logs/42093021.html
一: 简介
市面上有成千上万的linux软件,每一个都有独立的配置文件和帮助页。这些给linux添加了活力,当时却让linux系统管理员犯难了。幸运的是,大部门软件都可以使用syslog工具集将他们的错误以及状态信息转化为文件存放在本地的/var/log目录中. 它能为你的系统记录时间以及相关原因的事件。更重要的一点是程序并不总将错误信息输出在屏幕上,但常常会在某些地方记录下他们。知道这些确切的错误信息,查阅产品手册,在线文档,web搜索能帮你解决它.
syslog和日志轮询(logroutate)工具能清理日志文件,这两者都非常容易配置,当时相应的文档却比较少。因此我将在这里把syslog作为一个重要的章节来强调其重要性,通过本书以此丰富你的linux知识以及技巧,帮助你解决linux程序问题.
二: syslog
syslog是一个追踪记录极为重要的系统日志的工具,每条系统信息都有两类标识,更容易进行判断处理
(1) 第一类标识是程序产生的,如mail和cron等程序产生的信息并简单依据其功能命名为mail和cron
(2) 第二类标识是信息的严重性,它们有8个级别,如下所示:
严重性级别 关键字 描述 0 emergencies(紧急) 系统不能使用 1 alerts (警报) 紧急情况 2 critical (严重) 严重情况 3 errors (错误) 错误情况 4 warnings (告警) 告警情况 5 notifications (通知) 正常但重要的情况 6 informational (报告) 报告消息 7 debugging (调试) 调试信息 你可以配置syslog的/etc/rsyslog.conf配置文件依据不同的严重性级别及条件来存放在不同的文件中.配置方法将在随后给出
/etc/rsyslog.conf文件
syslog依据/etc/rsyslog.conf配置文件来写每种类型的信息.在fedora旧的版本中,配置文件为/etc/syslog.conf
这个文件包含两列,第一列包含期望的消息严重性级别,第一列包含存放日志的文件。默认情况下,RedHat/Fedora的/etc/rsyslog.conf配置将大部分消息存放在/var/log/messages.如下:
*.info;mail.none;authpriv.none;cron.none /var/log/messages
在这种情况下,所有的"info"级别及以上但不包含mail,cron及授权的消息都会被记录。你也可以修改该行,将所有的debug及其以上级别以上的信息都记录存放在/var/log/message文件中,下面这个例子将会更适合排错 *.debug /var/log/messages
下面这个例子,在缓存模式下的所有的debug的信息但不包含认证,授权,新闻及邮件等会被记录在/var/log/debug文件中,注意你可以在每行的最后使用"\"将多行信息写在一行中
*.=debug;\
auth,authpriv.none;\
news.none;mail.none -/var/log/debug
下面这个例子我们将看到在缓存模式下只记录info,notice和warning信息但不包含认证,授权和邮件部分. *.=info;*.=notice;*.=warn;\ auth,authpriv.none;\ cron,daemon.none;\ mail,news.none -/var/log/messages
你可能需要将确切消息发送到所有登陆用户的屏幕上,下面这个例子,将会把所有emergency及其以上级别的消息发送到所有登陆用户的屏幕上,关于文件的存放位置使用"*"号
*.emerg *
某些程序将会在syslog.conf文件中指定他们自己的日志存放文件及目录,下面是几个常用的例子:
文件:
/var/log/maillog :
Mail 邮件日志 /var/log/httpd/access_log :
Apache web server page access logs apache访问日志
目录:
/var/log /var/log/samba : Samba messages /var/log/mrtg : MRTG messages /var/log/httpd : Apache webserver messages注意:在一些老的linux版本中/etc/rsyslog.conf文件对空格非常敏感,只能识别Tabs。使用空格将得到无法预料的结果。检查你的/etc/rsyslog.conf是非常必要的三:使更改的syslog配置文件生效修改完/etc/rsyslog.conf将不会立即生效,除非你重启syslog,使用下面的命令将达到目的:
[root@bigboy tmp]# service rsyslog restart 在老的Fedora版本,命令将会是这样:
[root@bigboy tmp]# service syslog restart
Ubuntu/Debian系统将会稍微有些不同:
root@u-bigboy:~# /etc/init.d/sysklogd restart
如何查看触发的新日志条目
如果你想在屏幕上查看触发的新的日志条目,你可以使用这个命令:
[root@bigboy tmp]# tail -f /var/log/messages
类似的命令能应用于所有的日志文件。这是在linux系统中进行troubleshooting的好方法之一.另外一个不错的命令就是使用grep,grep能帮助你搜索一个日志文件中所有匹配的内容的整个事件,你可以使用管道来使用"more"命令来一次只显示一个屏幕,下面就是这个例子
[root@bigboy tmp]# grep string /var/log/messages | more
你也可以使用"more"命令,一次只显示一个屏幕,如下所示:
[root@bigboy tmp]# more /var/log/messages
四:将syslog信息记录在远程的linux服务器上
将日志信息记录在远程的服务器上是一个不错的安全方案。将所有的服务器的日志记录在中心日志服务器,通过公司访问日志变得非常简单。同时也能避免错误或恶意删除日志文件,因为这些删除日志的操作并不会在你的日志服务器上发生,特别是限制用户登录的日志服务器
配置linux syslog日志服务器
默认情况下,syslog并不会接收远程客户端发送的日志信息.下面我们将讲解如何配置你的linux日志服务器以监听这些信息
正如我们前边看到的那样,syslog会检查/etc/rsyslog.conf来决定需要记录的什么级别的信息以及本地日志存放的位置。它也检查/etc/sysconfig/syslog来来决定运行的时候使用的模式。Syglog不会监听远程的日志信息除非在/etc/sysconfig/syslog中将"SYSLOGD_OPTIONS"里边设置有"-r"参数,如下所示:
# Options to syslogd # -m 0 disables 'MARK' messages. # -r enables logging from remote machines # -x disables DNS lookups on messages received with -r # See syslogd(8) for more details SYSLOGD_OPTIONS="-m 0 -r" # Options to klogd # -2 prints all kernel oops messages twice; once for klogd to decode, and # once for processing with 'ksymoops' # -x disables all klogd processing of oops messages entirely # See klogd(8) for more details KLOGD_OPTIONS="-2"
注意:在Debian/Ubuntu系统中,你需要直接修改syslog的启动脚本/etc/init.d/sysklogd,使"SYSLOGD"变量的值为"-r"
# Options for start/restart the daemons # For remote UDP logging use SYSLOGD="-r" # #SYSLOGD="-u syslog" SYSLOGD="-r"
你需要重启syslog服务以使修改生效。服务启动后将监听UDP 514端口,你可以通过下边任意一个netstat命令查询
[root@bigboy tmp]# netstat -a | grep syslog udp 0 0 *:syslog *:* [root@bigboy tmp]# netstat -an | grep 514 udp 0 0 0.0.0.0:514 0.0.0.0:* [root@bigboy tmp]# 配置linux客户端
syslog服务器现在允许接收远程syslog信息了。你需要配置远程的linux客户端来发送日志信息给syslog服务器,下面是在一台名为"smallfry"的linux客户端上编辑/etc/hosts文件的操作,步骤如下:
(1)获得你远程日志服务器的IP地址及完整主机名
(2) 以下面格式添加至/etc/hosts文件中
IP-address fully-qualified-domain-name hostname "loghost" 例子如下:
192.168.1.100 bigboy.my-site.com bigboy loghost现在,你的/etc/hosts文件中指定了"bigboy"服务器的别名为"loghost"
(3)下一步你需要编辑/etc/rsyslog.conf文件使syslog信息发送到你的新的日志服务器上
*.debug @loghost *.debug /var/log/messages
你现在配置所有的debug信息及更高级别的信息记录在"bigboy"("loghost")日志服务器上及本地/var/log/message文件中,记得重启syslog服务以使开启远程日志记录功能
你现在可以进行下简单的测试以便测试syslog服务器是否收到了日志信息,例如重启lpd打印服务,确保远程的日志服务器能记录该信息
Linux客户端
[root@smallfry tmp]# service lpd restart Stopping lpd: [ OK ] Starting lpd: [ OK ] [root@smallfry tmp]# Linux Server
[root@bigboy tmp]# tail /var/log/messages ... ... Apr 11 22:09:35 smallfry lpd: lpd shutdown succeeded Apr 11 22:09:39 smallfry lpd: lpd startup succeeded ... ... [root@bigboy tmp]# 五:日志轮询
Linux日志轮询工具在一定范围内复用系统错误日志文件,这样就可以保证日志文件不会占用大量的硬盘空间
/etc/logrotate.conf文件
你可以指定这个logrotate的常用配置文件中日志文件的复用频率
- 你可以指定是周轮询还是日轮询。下面的例子中,周轮询选项被"#"注释,使用的为日轮询
- 轮询参数指定了会保存多少个日志文件的备份,下面的例子在"4"选项前使用"#"注释,使用的为"7"
- create参数指定在每次轮询时创建一个新的日志文件
因此,我们的配置文件例子中将会将每天所有的日志文件归档并保存7天。这些文件将使用下面的名字,日志文件使用当前的版本
logfile logfile.0 logfile.1 logfile.2 logfile.3 logfile.4 logfile.5 logfile.6 /etc/logrotate.conf例子
# rotate log files weekly #weekly # rotate log files daily daily # keep 4 weeks worth of backlogs #rotate 4 # keep 7 days worth of backlogs rotate 7 # create new (empty) log files after rotating old ones create
/etc/logrotate.d目录
大多数linux应用程序都会在该目录下放置一个配置文件以决定轮询的日志文件名,这是一个非常不错的方法,所有新的应用程序都可以在该目录下有各自的配置文件,其中每个程序都可以决定自己如日志轮询的方式.
这里有个小例子,在 /etc/logrotate.d下放置了一个定制的文件,其目的是轮询/data/backups目录下的以".tgz"为扩展名的文件,对于它来说,文件中的内容将替换默认全局的"/etc/logrotate.conf"中的对应内容。其中,轮询文件将不会被压缩,如果他们不是空的,他们将保存30天,文件的权限属主为root,权限为600
/data/backups/*.tgz { daily rotate 30 nocompress missingok notifempty create 0600 root root }
注意:在Debian/Ubuntu系统中,/etc/cron.daily/sysklogd脚本会读取/etc/rsyslog.conf文件,根据该文件进行日志轮询,这也意味着在/etc/logrotate.d下定制的日志轮询配置文件将会被忽略。sysklogd脚本在/etc/cron.daily目录下,因此它会24小时自动进行轮询。而在Fedora/Redhat系统中,这个脚本文件是/etc/cron.daily/logrotate,它并不使用syslog的配置文件,而是使用/etc/logrotate.conf以及/etc/logrotate.d目录下的配置文件.
日志轮询生效
上面章节提到的logrotate设置并不会生效,除非你使用了下面的命令:
[root@bigboy tmp]# logrotate -f
如果你只想让logrotate加载一个特定的配置文件而不是全部都加载,使用logrotate命令后便跟上文件名参数,就像下面这样:
[root@bigboy tmp]# logrotate -f /etc/logrotate.d/syslog
压缩你的日志文件
一个繁忙的站点,日志往往会变得很大,可以编辑logrotate.conf文件,通过添加"compress"选项开启压缩功能
# # File: /etc/logrotate.conf # # Activate log compression compress
日志文件将会使用gzip压缩工具,每个文件将会有".gz"扩展名
[root@bigboy tmp]# ls /var/log/messages* /var/log/messages /var/log/messages.1.gz /var/log/messages.2.gz /var/log/messages.3.gz /var/log/messages.4.gz /var/log/messages.5.gz /var/log/messages.6.gz /var/log/messages.7.gz [root@bigboy tmp]#
看这些文件中的内容也非常简单,可以使用zcat命令快速的将他们的内容输出到屏幕上,使用命令后后跟上压缩的文件名即可:
[root@bigboy tmp]# zcat /var/log/messages.1.gz ... ... Nov 15 04:08:02 bigboy httpd: httpd shutdown succeeded Nov 15 04:08:04 bigboy httpd: httpd startup succeeded Nov 15 04:08:05 bigboy sendmail[6003]: iACFMLHZ023165: to=<tvaughan@clematis4spiders.info>, delay=2+20:45:44, xdelay=00:00:02, mailer=esmtp, pri=6388168, relay=www.clematis4spiders.info. [222.134.66.34], dsn=4.0.0, stat=Deferred: Connection refused by www.clematis4spiders.info. [root@bigboy tmp]#
收藏到:Del.icio.us







