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
这是什么东东啊 一时的冲动,子孙的危机! 如果有一双眼睛陪我一同哭泣,就值得我为生命受苦。 .其实我是一个天才,可惜天妒英才! 很多女明星不红的原因是因为没有张开腿*^_^*
页:
[1]