rihi 发表于 2013-4-1 09:02:23

linux系统中的日志系统

   Linux上的日志系统早期的版本有syslog,后来推出了其升级版syslog-ng(即下一代),该版本又可分为开源版和商业版。下面我们主要介绍syslog。那么日志是用来做什么的呢?
    日志可记录如下内容:
1.      记录系统和内核的运行信息;
2.      记录每一次网络连接和它们的源IP地址、长度,有时还包括攻击者的用户名和使用的操作系统;
3.      记录远程用户申请访问哪些文件;
4.      记录用户可以控制哪些进程;
5.      记录具体用户使用的每条命令。
6.      等……

    在Linux系统中,有3个主要的日志子系统:连接时间日志、进程统计日志和错误日志
l      连接时间日志记录在/var/log/wtmp和/var/run/utmp中,用于跟踪谁在何时登录到系统;
l      进程统计日志(pacct或acct)给系统中的基本服务提供命令使用统计(默认不激活,要想激活该服务,可使用该命令激活:# accton /var/account/pacct);
l      错误日志由syslogd后台进程记录,各种系统守护进程、用户程序通过调用函数syslog向文件/var/og/messages记录值得注意的事件。

syslog日志系统:包含syslogd和klogd两个进程                  
Ø      syslogd:系统,记录非内核产生的信息
Ø      klogd:内核,专门负责记录内核产生的信息

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

/sbin/init有3个重要的日志文件:
    /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文件。

常用的日志文件说明如下:
boot.log记录系统在引导过程中发生的事件。
cron记录crontab守护进程crond所派生的子进程的动作。
maillog记录电子邮件的活动。
acct/pacct记录用户命令。
lastlog记录最近几次成功登录的事件和最后一次不成功的登录。
messages从syslog中记录信息(有的链接到syslog文件)。
sulog记录su命令的使用。
syslog从syslog中记录信息(通常链接到messages文件);
utmp记录当前登录用户的信息。
wtmp一个用户每次登录进入和退出时间的永久记录。另外,wtmp和utmp文件都是二进制文件,需要使用who、w、users、last和ac命令查看它们包含的信息。


    我们知道syslog包含两个进程:syslogd和klogd,但syslog自身就是一个服务,想要查看该服务有没有启动,其包含的两个进程运行情况如何,可使用如下命令:
# chkconfig --list syslog:可查看系统有没有启动该服务
# service syslog status:可查看该服务的两个进程运行情况
    syslog的配置文件为/etc/syslog.conf,在配置文件中,对日志系统的格式做出了明确的定义,其格式为:facility.priority      action ,其中syslog.conf 的第一列facility.priority用来指定日志功能和日志级别,中间用.隔开,可以使用*来匹配所有的日志功能和日志级别, "设备" 标识发出消息的子系统,可以把同一类型的消息组合在一起,"优先级" 表示消息的重要性,其范围从debug (最不重要)到emerg (最重要)。第二列action定义消息的分发目标,或收到消息后如何处理。下面具体介绍下facility、priority和action都包含哪些含义。
facility 指定 syslog 功能,可以理解为日志的来源或设备,目前常用的facility有以下几种:

auth               由 pam_pwdb 报告的认证活动
authpriv             包括特权信息如用户名在内的认证活动
cron                与任务计划有关的信息
daemon               与 inetd 守护进程有关的信息
kern                内核信息,首先通过 klogd 传递
lpr                与打印服务有关的信息
mail                与电子邮件有关的信息
mark                syslog 内部功能用于生成时间戳
news                来自新闻服务器的信息
security             安全相关的信息,与auth 类似
syslog            由 syslog 生成的信息
user               由用户程序生成的信息
uucp               由 uucp 生成的信息
local0----local7与自定义程序使用,例如使用 local5 做为 ssh 功能
*                  通配符代表除了 mark 以外的所有功能


priority(log level)日志的级别,决定信息的重要性。 与每个功能对应的优先级是按一定顺序排列的,emerg 是最高级,其次是 alert,依次类推。缺省时,在 /etc/syslog.conf 记录中指定的级别为该级别和更高级别。如果希望使用确定的级别可以使用两个运算符号!(不等)和=。
例如:user.=info表示告知 syslog 接受所有在 info 级别上的 user 功能信息。以下的等级重要性逐次递减:
emerg         该系统不可用
alert         需要立即被修改的条件
crit         阻止某些工具或子系统功能实现的错误条件
err            阻止工具或某些子系统部分功能实现的错误条件
warning          预警信息
notice          具有重要性的普通条件
info         提供信息的消息
debug         不包含函数条件或问题的其他信息
none            没有重要级,通常用于排错
*             所有级别,除了none

注:当我们指定记录某一级别的日志信息时,该级别及比该级别高的日志信息也会被记录下来

action 字段为动作域,所表示的活动具有许多灵活性,特别是,可以使用名称管道的作用是可以使 syslogd 生成后处理信息。syslog 主要支持以下活动:

file                  将消息追加到指定的文件尾
terminal 或 print      完全的串行或并行设备标志符
@host               远程的日志服务器(将日志记录在远程主机上,在某些情况下可加强日志安全)
username          将消息写到指定的用户
named pipe         指定使用 mkfifo 命令来创建的 FIFO 文件的绝对路径。
*            将消息写到登录到系统上的所有用户,一般emerg级别的日志是这样定义的

注:在/etc/sysconfig/syslog文件中做如下修改可实现作为日志服务器使用
# Options to syslogd
# -m 0 disables 'MARK' messages.
# -r enables logging from remote machines

# -x disables DNS lookups on messages recieved with -r

# See syslogd(8) for more details
SYSLOGD_OPTIONS="-r -m 0"    #-r选项默认不启用,然后重启日志服务即可


/etc/syslog.conf配置文件定义格式例子:
mail.info   /var/log/mail.log       :表示将mail相关的,级别为info及info以上级别的信息记录到var/log/mail.log文件中
auth.=info@172.16.0.1             :表示将auth相关的,级别为info的信息记录到172.16.0.1主机上
mark.!=warn                         : 表示记录与mark相关的,除了error级别以外的所有信息
mark.!warn                        :与mark.warn相反,表示只记录与mark有关的比warn级别低的日志信息
*.info                           : 表示记录所有info级别的所有日志信息
auth.*                              :表示记录与auth相关的所有级别的信息
*.*                                 : 表示记录所有功能或设施所有级别的信息
cron.info;mail.info               :表示记录cron和mail有关的,info级别的及以上的信息,多个日志来源可以用";" 隔开
cron,mail.info                      : 意义同上
mail.*;mail.!=info                  :表示记录与mail相关但不包含info级别的所有其他级别的信息

下面一起来看一下syslog配置文件/etc/syslog.conf中的内容,其中#表示注释信息,帮助理解,可忽略,这里只贴出非注释信息:
*.info;mail.none;authpriv.none;cron.none            /var/log/messages
          表示除了邮件、权限、任务计划外的所有inifo及以上级别的信息都记录在/var/log/messages中
authpriv.*                                        /var/log/secure
         表示所有与权限或授权有关的,所有级别的信息都记录在/var/log/secure文件中,该文件权限比较特殊,为600,仅允许管理员读取
mail.*                                              -/var/log/maillog      
         表示与邮件有关的,所有级别的信息都记录在/var/log/maillog文件中,其中-表示异步写入磁盘,不写表示同步写入磁盘
cron.*                                              /var/log/cron
         表示与任务计划有关的所有级别的日志信息都记录在/var/log/cron文件中
*.emerg                                           *            
         表示emerg级别的所有信息通知所有登陆该系统的所有用户
uucp,news.crit                                        /var/log/spooler
         表示uucp和新闻有关的,crit级别及以上的所有信息记录在该文件中
local7.*                                     /var/log/boot.log
         用户自定义的,不管什么级别都记录在该文件中

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

    上边提到日志滚动,那我们来看一下其配置文件吧。/etc/logrotate.conf文件内容(我们还可以自己在这里添加某个日志文件如何滚动;借助于系统定义的任务计划,将某个日志的切割或配置文件放到指定的位置下,就可以实现自动滚动。)

weekly            #按周滚动
rotate 4         #表示保留4个历史版本
create             #创建新的日志,以上几个为全局定义,如果某个日志文件没有定义,就从此处继承,如果定义了就使用自己已定义好的
include /etc/logrotate.d          #包含多个片段
/var/log/wtmp {
    monthly                           #按月滚动
    minsize 1M                           #最小为1M
    create 0664 root utmp                   #创建新的日志文件,权限为0664,用户为root,文件名为utmp
    rotate 1                               #保留1个历史版本
}
/var/log/btmp {
    missingok                           #如果此前没有也没有关系
    monthly
    minsize 1M
    create 0600 root utmp
    rotate 1
}





参考文献:
http://blog.iyunv.com/jeff2007/article/details/5984719
http://book./art/200712/62870.htm
http://ant595.blog./5074217/1080922


懂ni 发表于 2013-4-1 09:24:13

这是什么东东啊

生活如麻 发表于 2013-5-16 00:54:55

741057228我QQ 发表于 2013-5-16 12:43:27

一时的冲动,子孙的危机!

kient88 发表于 2013-5-17 05:40:20

如果有一双眼睛陪我一同哭泣,就值得我为生命受苦。

sm702 发表于 2013-5-17 17:39:06

.其实我是一个天才,可惜天妒英才!

赤色烙印 发表于 2013-5-18 07:14:20

很多女明星不红的原因是因为没有张开腿*^_^*
页: [1]
查看完整版本: linux系统中的日志系统