syslog已被许多日志函数采纳,它用在许多保护措施中,任何程序都可以通过syslog记录事件。syslog可以记录系统事件,可以写到一个文件或设备中,或给用户发送一个信息。它能记录本地事件或通过网络记录另一个主机上的事件。
1、syslog简介
syslog是一种工业标准的协议,可用来记录设备的日志。在UNIX系统,路由器、交换机等网络设备中,系统日志(System Log)记录系统中任何时间发生的大小事件。管理者可以通过查看系统记录,随时掌握系统状况。UNIX的系统日志是通过syslogd这个进程记录系统有关事件记录,也可以记录应用程序运作事件。通过适当的配置,我们还可以实现运行syslog协议的机器间通信,通过分析这些网络行为日志,藉以追踪掌握与设备和网络有关的状况。
2、syslog配置文件
syslog设备依据两个重要的文件:/etc/syslogd守护进程和/etc/syslog.conf配置文件。通常情况下,多数syslog信息被写到/var/adm或/var/log目录下的信息文件中(messages.*)。一个典型的syslog记录包括生成程序的名字和一个文本信息。它还包括一个设备和一个优先级范围。
通过使用syslog.conf文件,可以对生成的日志的位置及其相关信息进行灵活的配置。该配置文件指明了syslogd守护程序记录日志的行为,该程序在启动时查询配置文件。该文件由不同程序或消息分类的单个条目组成,每个占一行。对每类消息提供一个选择域和一个动作域。这些域由tab隔开:
选择域指明消息的类型和优先级;
动作域指明syslogd接收到一个与选择标准相匹配的消息时所执行的动作。
syslog.conf行的基本语法是:
消息类型.优先级 动作域
其中,每个选择域是由消息类型和优先级组成。当指明一个优先级时,syslogd将记录一个拥有相同或更高优先级的消息。Linux中一些主要的消息类型如表2所示,表3列出了一些优先级信息:
表2 syslog消息类型
消息类型 | 消息来源 |
kern | 内核 |
User | 用户程序 |
Damon | 系统守护进程 |
电子邮件系统 | |
Auth | 与安全权限相关的命令 |
Lpr | 打印机 |
News | 新闻组信息 |
Uucp | Uucp程序 |
Cron | 记录当前登录的每个用户信息 |
wtmp | 一个用户每次登录进入和退出时间的永久记录 |
Authpriv | 授权信息 |
表3 syslog常用优先级
优先级 | 描述 |
emerg | 最高的紧急程度状态 |
alert | 紧急状态 |
Cirt | 重要信息 |
warning | 警告 |
err | 临界状态 |
notice | 出现不寻常的事情 |
info | 一般性消息 |
Debug | 调试级信息 |
None | 不记录任何日志信息 |
不同的服务类型有不同的优先级,数值较大的优先级涵盖数值较小的优先级。如果某个选择条件只给出了一个优先级而没有使用任何优先级限定符,对应于这个优先级的消息以及所有更紧急的消息类型都将包括在内。比如说,如果某个选择条件里的优先级是“warning”,它实际上将把“warning”、“err”、“crit”、“alert“和“emerg”都包括在内。
syslog允许人们使用三种限定符对优先级进行修饰:星号(*)、等号(=)和叹号(!):
星号(*)的含义是把本项服务生成的所有日志消息都发送到操作动作指定的地点。就像它在规则表达式里的作用一样,星号代表“任何东西”。在前面给出的例子里,“mail.*”将把所有优先级的消息都发送到操作动作指定的/var/log/mail文件里。使用“*”限定符与使用“debug”优先级的效果完全一样,后者也将把所有类型的消息发送到指定地点。
等号(=)的含义是只把本项服务生成的本优先级的日志消息都发送到操作动作指定的地点。比如说,可以用“=”限定符只发送调试消息而不发送其他更紧急的消息(这将为应用程序减轻很多负担)。当你只需要发送特定优先级别的消息时,就要使用等号限定符。
叹号(!)的含义是把本项服务生成的所有日志消息都发送到操作动作指定的地点,但本优先级的消息不包括在内。
所以,根据上面介绍的相关知识,我们给出如下例子作为示范:
(1)如果指明\"crit\",那所有标为crit、alert和emerg的消息将被记录。每行的行动域指明当选择域选择了一个给定消息后应该把他发送到哪儿。例如,如果想把所有邮件消息记录到一个文件中,如下所示:
#Log all the mail messages in one place
mail.* /var/log/maillog(2)其他设备也有自己的日志。UUCP和news设备能产生许多外部消息。它把这些消息存到自己的日志(/var/log/spooler)中并把级别限为\"err\"或更高。例如:
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler(3)当一个紧急消息到来时,可能想让所有的用户都得到。也可能想让自己的日志接收并保存。
#Everybody gets emergency messages, plus log them on anther machine
*.emerg *
*.emerg @linuxaid.com.cn(4)有时syslogd将产生大量的消息。例如内核(\"kern\"设备)可能很冗长,用户很难看得清楚明了,那么用户可能想把内核消息记录到/dev/console中。下面的例子表明内核日志记录被注释掉了:
#Log all kernel messages to the console
#Logging much else clutters up the screen
#kern.* /dev/console(5)用户可以在一行中指明所有的设备。下面的例子把info或更高级别的消息送到/var/log/messages,除了mail以外。级别\"none\"禁止一个设备:
#Log anything(except mail)of level info or higher
#Don\'t log private authentication messages!
*.info:mail.none;autHPriv.none /var/log/messages
3、syslog进程
syslogd守护程序是由/etc/rc.d/init.d/syslog脚本在运行级2下被调用的,缺省不使用选项。但有两个选项-r和-h很有用:
如果将要使用一个日志服务器,必须调用syslogd -r。缺省情况下syslogd不接受来自远程系统的信息。当指定-r选项,syslogd将会监听从514端口上进来的UDP包。
如果还希望日志服务器能传送日志信息,可以使用-h标志。缺省时,syslogd将忽略使其从一个远程系统传送日志信息到另一个系统的syslogd。
另外,如果需要重新启动syslog守护进程(/etc/syslog.conf的修改只有在syslog守护进程重新启动后才会生效),并且只想重新启动syslog守护进程而不是整个系统,在Red Hat Linux机器上,执行以下两条命令之一即可:
/etc/rc.d/init.d/syslogstop;/etc/rc.d/init.d/syslogstart
/etc/rc.d/init.d/syslogrestart
实验示例(日志服务器搭建):
本文出自 “贾新亮的技术Blog” 博客,谢绝转载!