Linux上的日志系统早期的版本有syslog,后来推出了其升级版syslog-ng(即下一代),该版本又可分为开源版和商业版。下面我们主要介绍syslog。那么日志是用来做什么的呢?

    日志可记录如下内容:

1.        记录系统和内核的运行信息;

2.        记录每一次网络连接和它们的源IP地址、长度,有时还包括攻击者的用户名和使用的操作系统;

3.        记录远程用户申请访问哪些文件;

4.        记录用户可以控制哪些进程;

5.        记录具体用户使用的每条命令。

6.        ……

 
    在Linux系统中,有3个主要的日志子系统:连接时间日志、进程统计日志和错误日志

l        连接时间日志记录在/var/log/wtmp/var/run/utmp中,用于跟踪谁在何时登录到系统;

l        进程统计日志(pacctacct)给系统中的基本服务提供命令使用统计(默认不激活,要想激活该服务,可使用该命令激活:# accton /var/account/pacct)

l        错误日志由syslogd后台进程记录,各种系统守护进程、用户程序通过调用函数syslog向文件/var/og/messages记录值得注意的事件。

 
syslog日志系统:包含syslogdklogd两个进程                    

Ø        syslogd:系统,记录非内核产生的信息

Ø        klogd:内核,专门负责记录内核产生的信息

 

    kernel初始化时的所有日志信息都将由klogd负责,一旦控制权由内核转交给/sbin/init后,日志信息都将由syslogd来负责,除非是与内核相关的信息。kernel初始化时因还没有虚拟终端,所有信息都显示在物理终端(/dev/console)上,系统初始化完成后内核产生的所有日志信息都将被记录在/var/log/dmesg文件中,可使用如下命令查看内核信息:# dmesg     # cat /var/log/dmesg 

 
/sbin/init3个重要的日志文件:
    /var/log/messages:系统标准错误日志信息;非内核产生的引导信息,各子系统产生的信息,该文件记录信息最多,在系统运行时间长了以后该文件会非常大,会定时滚动
    /var/log/maillog:邮件系统产生的日志信息
       /var/log/secure:记录有所有登录或尝试登录信息,该日志文件不允许其他用户查看

    上边提到了日志滚动,什么是日志滚动呢?日志需要滚动(日志切割):日志应经常滚动,以免日志文件过大分析起来不便。比方说,系统运行一段时间后,messages因记录信息会比较大,我们知道单个日志文件过大当系统出现问题时,分析起来不方便,所以就需要对日志文件进行分割。对日志文件进行分割时,会产生一个以.X(1,2,3)结尾的与原日志文件同名的文件,如:当messages文件第一次滚动时,原文件会变成messages.1,同时会产生一个新的messages文件;当messages文件第二次滚动时,原来的messages.1文件变成messages.2,而messages变成messages.1,同时产生新的messages文件。

 
  1. 常用的日志文件说明如下: 
  2. boot.log  记录系统在引导过程中发生的事件。 
  3. cron  记录crontab守护进程crond所派生的子进程的动作。 
  4. maillog  记录电子邮件的活动。 
  5. acct/pacct  记录用户命令。 
  6. lastlog  记录最近几次成功登录的事件和最后一次不成功的登录。 
  7. messages  从syslog中记录信息(有的链接到syslog文件)。 
  8. sulog  记录su命令的使用。 
  9. syslog  从syslog中记录信息(通常链接到messages文件); 
  10. utmp  记录当前登录用户的信息。 
  11. wtmp  一个用户每次登录进入和退出时间的永久记录。另外,wtmp和utmp文件都是二进制文件,需要使用who、w、users、last和ac命令查看它们包含的信息。 
 
 
    我们知道syslog包含两个进程:syslogdklogd,但syslog自身就是一个服务,想要查看该服务有没有启动,其包含的两个进程运行情况如何,可使用如下命令:
  1. # chkconfig --list syslog  :可查看系统有没有启动该服务 
  2. # service syslog status  :可查看该服务的两个进程运行情况 

    syslog的配置文件为/etc/syslog.conf,在配置文件中,对日志系统的格式做出了明确的定义,其格式为:facility.priority        action ,其中syslog.conf 的第一列facility.priority用来指定日志功能和日志级别,中间用.隔开,可以使用*来匹配所有的日志功能和日志级别, "设备" 标识发出消息的子系统,可以把同一类型的消息组合在一起,"优先级" 表示消息的重要性,其范围从debug (最不重要)到emerg (最重要)。第二列action定义消息的分发目标,或收到消息后如何处理。下面具体介绍下facilitypriorityaction都包含哪些含义。

  1. facility 指定 syslog 功能,可以理解为日志的来源或设备,目前常用的facility有以下几种: 
  2.  
  3. auth                 由 pam_pwdb 报告的认证活动 
  4. authpriv             包括特权信息如用户名在内的认证活动 
  5. cron                与任务计划有关的信息 
  6. daemon               与 inetd 守护进程有关的信息 
  7. kern                内核信息,首先通过 klogd 传递 
  8. lpr                与打印服务有关的信息  
  9. mail                与电子邮件有关的信息  
  10. mark                syslog 内部功能用于生成时间戳 
  11. news                来自新闻服务器的信息  
  12. security             安全相关的信息,与auth 类似 
  13. syslog              由 syslog 生成的信息  
  14. user               由用户程序生成的信息 
  15. uucp               由 uucp 生成的信息  
  16. local0----local7  与自定义程序使用,例如使用 local5 做为 ssh 功能 
  17. *                  通配符代表除了 mark 以外的所有功能
  18.  
  19.  
  20. priority(log level)日志的级别,决定信息的重要性。 与每个功能对应的优先级是按一定顺序排列的,emerg 是最高级,其次是 alert,依次类推。缺省时,在 /etc/syslog.conf 记录中指定的级别为该级别和更高级别。如果希望使用确定的级别可以使用两个运算符号!(不等)和=。 
  21. 例如:user.=info  表示告知 syslog 接受所有在 info 级别上的 user 功能信息。以下的等级重要性逐次递减: 
  22. emerg           该系统不可用 
  23. alert           需要立即被修改的条件
  24. crit           阻止某些工具或子系统功能实现的错误条件
  25. err            阻止工具或某些子系统部分功能实现的错误条件 
  26. warning          预警信息  
  27. notice          具有重要性的普通条件 
  28. info           提供信息的消息 
  29. debug           不包含函数条件或问题的其他信息  
  30. none            没有重要级,通常用于排错  
  31. *             所有级别,除了none 
  32.  
  33. 注:当我们指定记录某一级别的日志信息时,该级别及比该级别高的日志信息也会被记录下来 
  34.  
  35. action 字段为动作域,所表示的活动具有许多灵活性,特别是,可以使用名称管道的作用是可以使 syslogd 生成后处理信息。syslog 主要支持以下活动: 
  36.  
  37. file             将消息追加到指定的文件尾  
  38. terminal 或 print      完全的串行或并行设备标志符 
  39. @host                 远程的日志服务器(将日志记录在远程主机上,在某些情况下可加强日志安全)  
  40. username          将消息写到指定的用户  
  41. named pipe         指定使用 mkfifo 命令来创建的 FIFO 文件的绝对路径。 
  42. *              将消息写到登录到系统上的所有用户,一般emerg级别的日志是这样定义的 
  43.  
  44. 注:在/etc/sysconfig/syslog文件中做如下修改可实现作为日志服务器使用 
  45. # Options to syslogd 
  46. # -m 0 disables 'MARK' messages. 
  47. # -r enables logging from remote machines 
  48.  
  49. # -x disables DNS lookups on messages recieved with -r 
  50.  
  51. # See syslogd(8) for more details 
  52. SYSLOGD_OPTIONS="-r -m 0"    #  -r选项默认不启用,然后重启日志服务即可 
  53.  
  54.   
  55. /etc/syslog.conf配置文件定义格式例子: 
  56. mail.info   /var/log/mail.log  :表示将mail相关的,级别为info及info以上级别的信息记录到var/log/mail.log文件中 
  57. auth.=info  @172.16.0.1       :表示将auth相关的,级别为info的信息记录到172.16.0.1主机上 
  58. mark.!=warn         : 表示记录与mark相关的,除了error级别以外的所有信息 
  59. mark.!warn           :与mark.warn相反,表示只记录与mark有关的比warn级别低的日志信息 
  60.  *.info              : 表示记录所有info级别的所有日志信息 
  61. auth.*               :表示记录与auth相关的所有级别的信息 
  62. *.*                           : 表示记录所有功能或设施所有级别的信息 
  63. cron.info;mail.info            :表示记录cron和mail有关的,info级别的及以上的信息,多个日志来源可以用";" 隔开 
  64. cron,mail.info                : 意义同上 
  65. mail.*;mail.!=info             :表示记录与mail相关但不包含info级别的所有其他级别的信息 
  66.   
  67. 下面一起来看一下syslog配置文件/etc/syslog.conf中的内容,其中#表示注释信息,帮助理解,可忽略,这里只贴出非注释信息: 
  68. *.info;mail.none;authpriv.none;cron.none            /var/log/messages 
  69.      表示除了邮件、权限、任务计划外的所有inifo及以上级别的信息都记录在/var/log/messages中  
  70. authpriv.*                                        /var/log/secure 
  71.      表示所有与权限或授权有关的,所有级别的信息都记录在/var/log/secure文件中,该文件权限比较特殊,为600,仅允许管理员读取 
  72. mail.*                                              -/var/log/maillog      
  73. 表示与邮件有关的,所有级别的信息都记录在/var/log/maillog文件中,其中-表示异步写入磁盘,不写表示同步写入磁盘 
  74. cron.*                                              /var/log/cron 
  75.      表示与任务计划有关的所有级别的日志信息都记录在/var/log/cron文件中 
  76. *.emerg                                           *  
  77. 表示emerg级别的所有信息通知所有登陆该系统的所有用户 
  78. uucp,news.crit                                        /var/log/spooler 
  79.      表示uucp和新闻有关的,crit级别及以上的所有信息记录在该文件中 
  80. local7.*                                     /var/log/boot.log 
  81.      用户自定义的,不管什么级别都记录在该文件中 
 

    如果自己想要修改日志中定义的格式,可在该文件/etc/syslog.conf中修改,但不会立即生效,要想立即生效,需重新载入该服务,即使用如下命令重新装载日志服务:# service syslog reload ,该命令可实现不用重启服务就可以使其读取配置文件,即向系统发送1号信号;如果选择如下命令# service syslog restart 重启日志服务,可能会导致在重启时正好有其它日志系统正在向syslog发送信息,但因重启日志服务syslog将收不到信息的情况,因此一般不建议重启日志服务

 
    上边提到日志滚动,那我们来看一下其配置文件吧。/etc/logrotate.conf文件内容(我们还可以自己在这里添加某个日志文件如何滚动;借助于系统定义的任务计划,将某个日志的切割或配置文件放到指定的位置下,就可以实现自动滚动。)
 
  1. weekly            #按周滚动 
  2. rotate 4           #表示保留4个历史版本 
  3. create             #创建新的日志,以上几个为全局定义,如果某个日志文件没有定义,就从此处继承,如果定义了就使用自己已定义好的 
  4. include /etc/logrotate.d          #包含多个片段 
  5. /var/log/wtmp { 
  6.     monthly                             #按月滚动 
  7.     minsize 1M                           #最小为1M 
  8.     create 0664 root utmp                   #创建新的日志文件,权限为0664,用户为root,文件名为utmp 
  9.     rotate 1                               #保留1个历史版本 
  10. /var/log/btmp { 
  11.     missingok                           #如果此前没有也没有关系 
  12.     monthly 
  13.     minsize 1M 
  14.     create 0600 root utmp 
  15.     rotate 1 
  16.   
 
 
 
 
参考文献:
http://ant595.blog.51cto.com/5074217/1080922