linux日志系统

日志系统是用来存放系统在执行任务过程中产生的讯息或者是执行时产生的错误日志信息都存放在日志系统里。由于Linux系统上面会同时开启多个服务或者子系统,因此为了便于查看或者管理它们产生的日志信息,我们一般将不同的子系统或者服务产生的日志信息根据级别不同放在不同的配置文件中或者主机中。

 

在RHEL 5上,使用的日志系统是syslog

而在RHEL 6上,使用的日志系统是syslog-ng这是一款开源系统

要想使用syslog日志系统,必须要确保syslog服务一直在运行。而syslog服务包含两个服务:

syslogd服务:该服务主要记录系统,非内核产生的日志信息

klogd服务:主要记录kernel产生的日志信息

wKioL1Pm7EfRru4ZAABu_m5d1Jk472.jpg

记住要确保这两个服务一直开启哦

 

当系统开机的时候,kernel加载完成后,会检测相关的硬件,所以当kernel加载完成后,在物理终端(/dev/console)上面显示一大屏信息,这些信息都是kernel检测硬件所产生的日志信息;但是有时候我们却发现这些信息没有显示在物理终端上,这是因为在加载kernel的时候,使用了静默模式,因此这段信息我们没有看到,那这段信息消失了吗?当然不是,它保存在/var/log/dmesg这个文件里。

使用dmesg命令就可以查看这段信息或者使用cat  /var/log/dmesg来查看kernel产生的日志信息。

 

 

syslog服务的配置文件/etc/syslog.conf

syslog服务的配置文件主要规范了不同类型的服务,使用不同的日志文件来记录,这样有利于管理。

这个配置文件的结构如下:facility.priority    action

factility:我们可以理解服务类型(有人理解为日志的来源),通常facility有以下几种:

auth(authpriv)                                   #与认证、授权相关的服务

cron                                                        #与任务计划相关的服务

daemon                                                 #守护进程相关的服务

kern                                                        #内核相关的服务

lpr                                                            #打印相关的服务

mail                                                         #邮件相关的服务

mark                                                        #标记相关的服务

news                                                        #新闻相关的

security                                                    #安全相关的,与auth类似

syslog                                                      #syslog自身产生的

user                                                          #跟用户相关的

uucp                                                         #unix  to  unix cp相关的

local0-local7                                            #用户自定义使用

*                                                                #表示所有的facility

 

priority:表示日志的级别,级别越低日志信息越详细,priority通常有以下几种:(从低到高)

debug                            #表示系统或程序的调试信息

info                                 #一般信息

notice                             #不影响正常功能,需要注意的信息

warning/warn                 #可能影响系统功能,提醒用户的重要事件

err/error                          #错误信息

crit                                   #比较严重的信息,比err要严重

alert                                 #有问题的,必须马上处理的

emerg/panic                   #会导致系统不可用的信息

*                                       #表示所有的日志级别

none                                #表示什么也没有,和*刚好相反

 

定义等级时的一些特殊符号

在syslog的配置文件中。服务类型和日志级别经常通过一些特殊符号进行链接,这些特殊符号包括:

.:表示定义比该符号后面还要高的等级,且包含该符号后面的等级。

.=:表示定义该符号后面的等级。其他等级都不要

.!:表示定义除了该符号后面的等级以外的所有等级。

 

例如:定义等级格式的例子

mail.info       /var/log/maillog        #表示将与邮件有关的,级别定义为info及info以上级别

auth.=info    @10.0.0.1                #表示与auth相关的,级别只定义为info,并将信息记录到远端主机上

user.!=error                                   #表示与user相关的,级别定义为除了error以外的所有级别

user.!error                                      #表示与user有关的,级别定义为低于error的级别

*.info                                               #定义所有的日志信息级别为info及info以上级别

mail.*                                              #表示记录与mail相关的所有级别日志

cron.info;mail.info                          #多个日志来源使用";"隔开

cron,mail.info                                 #与cron.info;mail.info是同一个意思

mail.*;mail.!=info                           #表示记录mail所有级别的日志信息,但是不包括info级别的日志信息

 

 

action(动作):表示产生的信息放置何处

文件的绝对路径                               #表示将日志信息存放在某个文件中。如/var/log/XXX

|                                                          #通过管道交给其他命令来处理

@HOST                                            #将信息记录到远处主机上去

用户                                                   #将信息交显示给用户,例如root

*                                                         #表示所有在线用户,通常emerg级别的日志是这样定义的

 

例题: 我的 messages 这个档案需要记录所有的信息,但是就是不想要记录 cron, mail 及 news 的信息,那么该如何设定?

 答: 可以有两种写法,分别是:

*.*;news,cron,mail.none /var/log/messages

*.*;news.none;cron.none;mail.none /var/log/messages

使用逗号','时,等级只需要接在最后一个即可,如果是以分号';'来隔开的话, 那么就需要将服务和等级都写上去啰!这样会设定了吧! 

 

 

常见的日志文件

/log/messages:这个文件非常重要,基本许多常见的错误都可以通过这个日志文件来找到,因此,需要经常看看。存放的信息:有系统标准错误日志信息、非内核产生的引导信息以及各子系统产生的日志信息。

/var/log/maillog:邮件系统产生的信息存放在这个文件中。

/var/log/secure:与安全有关的日志信息。只要涉及到输入密码的操作都会记录到这个文件中。如login操作、ssh操作等等。

/var/log/dmesg:这个文件记录的是系统开机时,内核产生的信息。使用dmesg命令也可以显示出来。

/var/log/cron:主要记录你的crond任务是否在执行,执行过程中是否有错误,/etc/crontab文件中配置是否正确等等信息。

 

 

RHEL5.8上面的syslog配置文件如下:

wKioL1PnGzayDg4PAAJ4IwyFYrU055.jpg

 

日志滚动logrotate

当某个文件过大时,会导致系统读写性能下降,并且文件过大时,占用内存容量较大。因此,为了提高系统性能,且便于管理,我们需要对某些文件进行滚动。

logrotate主要功能是将旧文件移动成旧文件。并且完成文件的重命名,然后在创建一个新的文件来存储后续的信息。

如/var/log/message这个文件,当进行第一次滚动时,其message文件就变成message1文件了,然后在创建message文件用来存储后面的内容。当进行第二次滚动时,则message1就变成了message2,message则变成message1了,然后在创建message文件存储后续的内容。依次类推。

 

logrotate主要用来对日志文件进行滚动的,它记录了何时对日志文件进行滚动。这些设定都是在logrotate程序的配置文件/etc/logrotate.conf进行设定的。

 

logrotate的配置文件

logrotate的配置文件包括:/etc/logrotate.conf和/etc/logrotate.d/目录下的所有文件。

/etc/logrotate.conf的配置文件内容为:

# see "man logrotate" for details
# rotate log files weekly
weekly                               //表示每周都进行一次日志滚动

# keep 4 weeks worth of backlogs

rotate 4                             //保留多少个日志文件

# create new (empty) log files after rotating old ones
create                              //当日志滚动时,创建一个新的文件来存储

# uncomment this if you want your log files compressed
#compress                      //被更改的文件名是否需要压缩

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d        //对这个目录下的所有文件中定义的文件进行logrotate

# no packages own wtmp -- we'll rotate them here
##以下是对单个日志文件进行设定

/var/log/wtmp {
    monthly                                          //每月进行一次滚动
    minsize 1M                                   //日志文件超过1M时开始滚动
   reate 0664 root utmp                  //新建文件的权限和属主属组
    rotate 1                                         //保留多少个日志文件

/var/log/btmp {
    missingok
    monthly
    minsize 1M
    create 0600 root utmp
    rotate 1
}

# system-specific logs may be also be configured here.

 

 

logrotate命令

logrotate  [-vf]  config_ile

-v:显示logrotate的运作过程

-f:强制进行滚动