日志相当于日记,记录每天发生的大事,而对于计算机来说,操作系统中会产生很多信息,这些信息即是我们观察系统运行当中正常状况的一种途径,同时也为我们提供了当系统发生故障的时候定位问题所在的必要信息, 实际上任何操作系统都提供了强大的日志系统用于记录各子系统运行当中所产生的各种信息。对于在线上运行的服务器而言应该合理的处理及管理。下面就来了解一下在linux系统中用来管理日志的两种日志服务器:syslog、syslog-ng。
一、深入syslog
1、 syslog简介
在红帽5上使用的是syslog,syslog是一个服务专门提供负责记录日志功能的系统日志,其配置文件是/etc/syslog.conf;
syslog包含两个进程:syslogd,klogd;
syslogd进程专门负责记录非内核产生的日志信息;
klogd进程是专门负责记录内核产生的日志信息;
这两个进程共用一个配置文件:/etc/syslog.conf;
为什么会把syslog分为两个进程呢?由于klogd记录的日志详细程度与syslogd有着巨大不同,这两个进程所产生的日志格式太大,因此把这两个各自为独立的日志进程; 
在init.d程序中最后才会启动终端,在这些终端启动之前信息记录在物理终端(/dev/console),通过我们的虚拟终端可以查看到这些信息, kernel在初始化之前会探测各种硬件,比如cpu类型、主板类型都会显示出来,如果想要看看硬件类型、二级缓存、三级缓存都存放在什么地方,当系统启动完成之后就会由klogd进程记录控制并把这些内容记录在/var/log/dmesg中,可以使用下面两个命令查看/var/log/dmesg中的内容;
#dmesg (里面记录的是启动init.d程序之前的内容)
#cat /var/log/dmesg
上面是由klogd记录并把信息放到/var/log/dmesg中,一旦控制权由内核转交给/sbin/init后所产生的日志就会由syslogd记录,记录的信息存放到下面三个常用的文件中;
     /var/log/messages:属于系统标准错误日志信息,大多数子系统产生的错误信息都放在这个文件中。同时还会记录非内核产生引导信息,随着日积月累这个文件会变的越来越大,为了避免文件系统变得过大导致系统读取日志不稳定,在系统中设置了日志信息滚动(也被称为日志切割) 即logrotate程序,配置文件为/etc/logrotate.conf;
     /var/log/maillog:存放由邮件系统产生的日志信息;
     /var/log/secure:存放与安全有关的日志信息,里面记录了用户正确或错误登录系统的详细的私密信息,只有管理员才能查看;

2、 分析syslog配置文件定义格式

 
  
  1. --------------------------------------------------------  
  2. 配置文件定义格式为: facility.priority  action   
  3. facility,可以理解为日志的来源或设备目前常用的facility有以下几种:   
  4.     auth                # 认证相关的   
  5.     authpriv            # 权限,授权相关的   
  6.     cron                # 任务计划相关的   
  7.     daemon              # 守护进程相关的 比如:httpd 工作在后台的  
  8.     kern                # 内核相关的   
  9.     lpr                  # 打印相关的   
  10.     mail                 # 邮件相关的   
  11.     mark                 # 标记相关的   
  12.     news                 # 新闻相关的   
  13.     security            # 安全相关的,与auth 类似    
  14.     syslog               # syslog自己的   
  15.     user                 # 用户相关的   
  16.     uucp                 # unix to unix cp 相关的   
  17.     local0 到 local7     # 用户自定义使用   
  18.     *                   # *表示所有的facility   
  19. 因此syslog支持的facility就是上面几个,这几个几乎包含了所有子系统的日志来源  
  20. -------------------------------------------------------  
  21. ---------------------------------------------------------  
  22. priority(log level)日志的级别,一般有以下几种级别(从低到高)   
  23.     debug           # 程序或系统的调试信息【级别越低,记录的日志越详细,同时会导致硬盘工作超负荷】  
  24.     info            # 一般信息  
  25.     notice          # 不影响正常功能,需要注意的消息   
  26.     warning/warn    # 可能影响系统功能,需要提醒用户的重要事件   
  27.     err/error       # 错误信息   
  28.     crit            # 比较严重的 【相当于发出蓝色警报】  
  29.     alert           # 必须马上处理的 【相当于发出橙色警报】  
  30.     emerg/panic     # 会导致系统不可用的 【相当于发出红色警报】  
  31.     *               # 表示所有的日志级别   
  32.     none            # 跟* 相反,表示什么也不记录   
  33. --------------------------------------------------------  
  34. ------------------------------------------------------     
  35. action(动作)日志记录的位置   
  36.     系统上的绝对路径    # 普通文件 如: /var/log/xxx   
  37.     |                   # 管道  通过管道送给其他的命令处理   
  38.     终端              # 终端   如:/dev/console   
  39.     @HOST               # 远程主机 如: @10.0.0.1        
  40.     用户              # 系统用户 如: root   
  41.     *                   # 登录到系统上的所有用户,一般emerg级别的日志是这样定义的   
  42. --------------------------------------------------------  
  43. ---------------------------------------------------------  
  44. 定义格式例子:   
  45. mail.info /var/log/mail.log # 表示将mail相关的,级别为info及info以上的级别记录到/var/log/mail.log文件中   
  46.                               # info以上级别的信息记录到/var/log/mail.log文件中   
  47. auth.=info  @172.16.0.1       # 表示将auth相关的,只把info的信息记录到172.16.0.1主机上  
  48.                               # 前提是172.16.0.1要能接收其他主机发来的日志信息   
  49. user.!=error                  # 表示记录与用户相关的,除了error级别的之外的日志信息   
  50. user.!error                   # 表示记录与用户相关的,比error级别低的日志信息  
  51. *.info                        # 表示记录所有的日志信息的info和info以上级别的日志信息   
  52. mail.*                        # 表示记录邮件相关的所有级别的日志信息   
  53. *.*                           # 表示记录所有的日志信息的所有级别的日志信息   
  54. cron.info;mail.info           # 表示记录cron和mail相关的info级别的日志信息,多个日志来源可以用";" 隔开   
  55. cron,mail.info                # 与cron.info;mail.info 是一个意思   
  56. mail.*;mail.!=info            # 表示记录mail相关的所有级别的信息,但是不包括info级别的  
  57. --------------------------------------------------------- 
3、 分析/etc/logrotate.conf配置文件
 
 
  
  1. ---------------------------------------------------------  
  2. # see "man logrotate" for details  
  3. # rotate log files weekly  
  4. weekly       ---定义每周更新一次日志文件  
  5.  
  6. # keep 4 weeks worth of backlogs  
  7. rotate 4     ---定义保留4个版本,超出这个版本数就会被清除  
  8.              ---比如:messages messages.1 messages.2 messages.3 messages.4  
  9. create new (empty) log files after rotating old ones  
  10. create       ---滚动完成之后,生成新的一个空的日志文件  
  11.  
  12. # uncomment this if you want your log files compressed  
  13. #compress  
  14.  
  15. # RPM packages drop log rotation information into this directory  
  16. include /etc/logrotate.d     ---日志文件同时还依赖于这个文件,在/etc/logrotate.d中每个文件定义一个子系统的日志滚动机制  
  17. no packages own wtmp -- we'll rotate them here  
  18. /var/log/wtmp {              ---指定一个日志文件  
  19.     monthly                   --按月滚动,如果全局定义了滚动时间,这个日志文件也定义了滚动时间,就以这个日志文件为主,如果全局定义了滚动时间,日志文件没定义滚动时间,就以全局为主  
  20.     minsize 1M               ---最小为1M  
  21.     create 0664 root utmp    ---创建一个新的文件,权限为0664,属主为root,日志文件名为utmp  
  22.     rotate 1                 ---保留1个历史版本  
  23. }  
  24. /var/log/btmp {  
  25.     missingok  
  26.     monthly  
  27.     minsize 1M  
  28.     create 0600 root utmp  
  29.     rotate 1  
  30. }  
  31. # system-specific logs may be also be configured here.  
  32. --------------------------------------------------------- 

4、 分析/etc/syslog.conf配置文件

 
  
  1. -------------------------------------------------------  
  2. # Log all kernel messages to the console.  
  3. # Logging much else clutters up the screen.  
  4. #kern.*                                                 /dev/console  
  5.  
  6. # Log anything (except mail) of level info or higher.  
  7. # Don't log private authentication messages!  
  8. *.info;mail.none;authpriv.none;cron.none                /var/log/messages  
  9. ---除了mail,authpriv,cron之外所有facility产生的info以及info以上的级别都放在/var/llog/messages  
  10. # The authpriv file has restricted access.  
  11. authpriv.*                                              /var/log/secure  
  12. ---跟用户授权相关的所有级别都记录在/var/log/secure文件中  
  13. # Log all the mail messages in one place.  
  14. mail.*                                                  -/var/log/maillog  
  15. ---跟邮件相关的所有级别都记录在/var/log/maillog文件中,此处的“-”表示异步写入,不会同时写入到磁盘上去  
  16.  
  17. # Log cron stuff  
  18. cron.*                                                  /var/log/cron  
  19. ---跟cron相关的所有级别都记录在/var/log/cron文件中  
  20. # Everybody gets emergency messages  
  21. *.emerg                                                 *  
  22. ---表示记录所有的日志信息的emerg以上的级别通知在线的每一个用户赶紧保存文件,电脑要挂了(相当于向每一个用户发出红色警报)  
  23. # Save news errors of level crit and higher in a special file.  
  24. uucp,news.crit                                          /var/log/spooler  
  25. ---表示与uucp和news相关的crit和crit以上级别记录在/var/log/spooler文件中  
  26. # Save boot messages also to boot.log  
  27. local7.*                                                /var/log/boot.log  
  28. ---用户自定义的跟引导相关的所有级别都记录在/var/log/boot.log文件中  
  29.  
  30. 同时我们也可以在/etc/syslog.conf中定义,定义后不会立即生效  
  31. service syslog restart【使用restart时,会影响其他日志系统正在向syslog发送信息,一般不建议重启】  
  32. service syslog reload【使用reload时,不用让服务重启就能读取配置文件并同时生效,相当于1信号】  
  33. --------------------------------------------------------- 

如果想让自己的主机作为日志服务器,只需要在/etc/sysconfig/syslog配置文件中SYSLOGD.OPTIONS一项有-r选项并重启服务即可;在另外一台主机上,通过修 改/etc/syslog.conf配置文件中mail.*后的日志位置为你所定义的日志服务器ip地址上,就可以实现远程日志,这个操作很简单,大家可以去尝试一下。
二、syslog-ng
syslog-ng(syslog next generation)顾名思义是syslog的升级版,也可称为syslog的下一代;syslog-ng有两个版本:一个是开源的(免费的),另一个是收费的。在红帽6上使用的是syslog-ng日志系统;由于我们平时只是在红帽5上进行日志系统操作,我把重点放在了syslog日志系统的分析上,对于syslog-ng就不做详细分析了。请大家见谅!