Linux系统日志

来源:互联网 发布:选择财物软件方案 编辑:程序博客网 时间:2024/06/06 03:29

大多数程序将它们的日志信息输出到syslog服务。传统的syslogd守护进程等待消息的到来,并根据它们的类型将她们输出到文件、屏幕、用户或者其它地方,有的干脆忽略。


一 系统日志

系统日志是系统中最重要的部分之一。如果系统出现用户不清楚的错误,查看系统日志文件是一个好选择。大多数Linux系统使用的是syslogd的一个新版本,名字叫rsyslogd。它的功能不仅仅局限于记录日志信息。比如用户可以让它加载一个将日志信息写到数据库的模块。

日志一般被记录在/var/log目录当中,一般日志文件的内容就显示了它们来自哪里。/var/log目录中的很多文件都不是系统日志来维护的。要知道哪些日志属于rsyslogd,需要查看它们的配置文件。


二 配置文件

rsyslog的基础配置文件是/etc/rsyslog.conf,但是在其他地方(比如/etc/rsyslogd.d)也可能会发现另外的配置文件。其内容包括传统的规则和rsyslogd扩展。任何以$开头的都是扩展。

传统的规则包括一个选择符(selector)和一个操作(action),分别代表从哪里获得日志和将其写到哪里,如下:

*.err;kern.debug;auth.notice /dev/consoledaemon,auth.notice           /var/log/messageslpr.info                     /var/log/lpr.logmail.*                       /var/log/mail.logftp.*                        /var/log/ftp.logauth.*                       @see.xidian.edu.cnauth.*                       root,amroodnetinfo.err                  /var/log/netinfo.loginstall.*                    /var/log/install.log*.emerg                      **.alert                      |program_namemark.*                       /dev/console

左边是选择符,右边是操作。上例大部分操作都是将日志写入文件,也有一些例外(/dev/console)。还有root表示如果root登录的话,将消息发送给他,*代表发送消息给系统中的所有用户。@see.xidian.edu.cn表示将消息发送给网络上名为see.xidian.edu.cn的主机。

设施和优先级

选择符用来匹配日志信息的设施和优先级。设施是指消息的大致分类(在rsyslog.conf(5)帮助手册中查看完整的设施列表)。设施的功能很容易通过它们的名称得知。*是一个通配符,表示在所有设施中获得输出。设施后面的点号(.)表示优先级,由高到低分别是:

优先级说明emerg紧急情况,系统不可用(例如系统崩溃),一般会通知所有用户。alert需要立即修复,例如系统数据库损坏。crit危险情况,例如硬盘错误,可能会阻碍程序的部分功能。err一般错误消息。warning警告。notice不是错误,但是可能需要处理。info通用性消息,一般用来提供有用信息。debug调试程序产生的信息。none没有优先级,不记录任何日志消息。

为选择符设置了优先级之后,rsyslogd将该优先级及其以上优先级的消息发送到指定目的地。

常见的的日志文件:

文件/目录说明/var/log/boot.log开启或重启日志。/var/log/cron计划任务日志/var/log/maillog邮件日志。/var/log/messages该日志文件是许多进程日志文件的汇总,从该文件可以看出任何入侵企图或成功的入侵。/var/log/httpd 目录Apache HTTP 服务日志。/var/log/samba 目录samba 软件日志

三 logger

以下来自:http://c.biancheng.net/cpp/html/2783.html

logger 是Shell命令,可以通过该命令使用 syslog 的系统日志模块,还可以从命令行直接向系统日志文件写入一行信息。

logger命令的语法为:

logger [-i] [-f filename] [-p priority] [-t tag] [message...]
每个选项的含义如下:
选项说明-f filename将 filename 文件的内容作为日志。-i每行都记录 logger 进程的ID。-p priority指定优先级;优先级必须是形如 facility.priority 的完整的选择器,默认优先级为 user.notice。-t tag使用指定的标签标记每一个记录行。message要写入的日志内容,多条日志以空格为分隔;如果没有指定日志内容,并且 -f filename 选项为空,那么会把标准输入作为日志内容。
例如,将ping命令的结果写入日志:
$ ping 192.168.0.1 | logger -it logger_test -p local3.notice&$ tail -f /var/log/userlogOct 6 12:48:43 kevein logger_test[22484]: PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.Oct 6 12:48:43 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=1 ttl=253 time=49.7 msOct 6 12:48:44 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=2 ttl=253 time=68.4 msOct 6 12:48:45 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=3 ttl=253 time=315 msOct 6 12:48:46 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=4 ttl=253 time=279 msOct 6 12:48:47 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=5 ttl=253 time=347 msOct 6 12:48:49 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=6 ttl=253 time=701 msOct 6 12:48:50 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=7 ttl=253 time=591 msOct 6 12:48:51 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=8 ttl=253 time=592 msOct 6 12:48:52 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=9 ttl=253 time=611 msOct 6 12:48:53 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=10 ttl=253 time=931 ms
ping命令的结果成功输出到 /var/log/userlog 文件。

命令 logger -it logger_test -p local3.notice 各选项的含义:
  • -i:在每行都记录进程ID;
  • -t logger_test:每行记录都加上“logger_test”这个标签;
  • -p local3.notice:设置日志类型和优先级。

日志转储

日志转储也叫日志回卷或日志轮转。Linux中的日志通常增长很快,会占用大量硬盘空间,需要在日志文件达到指定大小时分开存储。

syslog 只负责接收日志并保存到相应的文件,但不会对日志文件进行管理,因此经常会造成日志文件过大,尤其是WEB服务器,轻易就能超过1G,给检索带来困难。

大多数Linux发行版使用 logrotate 或 newsyslog 对日志进行管理。logrotate 程序不但可以压缩日志文件,减少存储空间,还可以将日志发送到指定 E-mail,方便管理员及时查看日志。

例如,规定邮件日志 /var/log/maillog 超过1G时转储,每周一次,那么每隔一周 logrotate 进程就会检查 /var/log/maillog 文件的大小:
  • 如果没有超过1G,不进行任何操作。
  • 如果在1G~2G之间,就会创建新文件 /var/log/maillog.1,并将多出的1G日志转移到该文件,以给 /var/log/maillog 文件瘦身。
  • 如果在2G~3G之间,会继续创建新文件 /var/log/maillog.2,并将 /var/log/maillog.1 的内容转移到该文件,将 /var/log/maillog 的内容转移到 /var/log/maillog.1,以保持 /var/log/maillog 文件不超过1G。

可以看到,每次转存都会创建一个新文件(如果不存在),命名格式为日志文件名加一个数字(从1开始自动增长),以保持当前日志文件和转存后的日志文件不超过指定大小。

logrotate 的主要配置文件是 /etc/logrotate.conf,/etc/logrotate.d 目录是对 /etc/logrotate.conf 的补充,或者说为了不使 /etc/logrotate.conf 过大而设置。

可以通过 cat 命令查看它的内容:
$cat /etc/logrotate.conf# see "man logrotate" for details  //可以查看帮助文档# rotate log files weeklyweekly                             //设置每周转储一次# keep 4 weeks worth of backlogsrotate 4                           //最多转储4次# create new (empty) log files after rotating old onescreate                             //当转储后文件不存储时创建它# uncomment this if you want your log files compressed#compress                          //以压缩方式转储# RPM packages drop log rotation information into this directoryinclude /etc/logrotate.d           //其他日志文件的转储方式,包含在该目录下# no packages own wtmp -- we'll rotate them here/var/log/wtmp {                    //设置/var/log/wtmp日志文件的转储参数    monthly                        //每月转储    create 0664 root utmp          //转储后文件不存在时创建它,文件所有者为root,所属组为utmp,对应的权限为0664    rotate 1                       //最多转储一次}

注意:include 允许管理员把多个分散的文件集中到一个,类似于C语言的 #include,将其他文件的内容包含进当前文件。

include 非常有用,一些程序会把转储日志的配置文件放在 /etc/logrotate.d 目录,这些配置文件会覆盖或增加 /etc/logrotate.conf 的配置项,如果没有指定相关配置,那么采用 /etc/logrotate.conf 的默认配置。

所以,建议将 /etc/logrotate.conf 作为默认配置文件,第三方程序在 /etc/logrotate.d 目录下自定义配置文件。

logrotate 也可以作为命令直接运行来修改配置文件。

0 0