9.5. syslog 系统事件
9.5.1. 原则与机制
此 rsyslogd
后台进程负责搜集来自应用程序与核心的服务消息,然后送至日志档内 (通常保存在 /var/log/
文件夹内)。遵守 /etc/rsyslog.conf
配置文件的要求。
每个日志信息都和应用子系统相关联(文档中称为“facility”):
auth
和authpriv
:用于授权;cron
:源于任务调度服务,cron
和atd
;daemon
:影响未分类的守护进程(DNS, NTP,等);ftp
:涉及FTP 服务器;kern
:源于内核的消息lpr
:源于打印子系统;mail
:源于电子邮件子系统;news
:Usenet 子系统消息(主要源自NNTP -网络消息传输协议-管理新闻组的服务器);syslog
:源于syslogd
服务自身的消息;user
:用户消息;uucp
:源于UUCP(Unix to Unix Copy Program,一种老式的分发电子邮件消息的协议)服务的消息;local0
到local7
:保留本地使用。
每种消息都有其优先级。下面按降序列出:
emerg
:“救命!” 紧急状态,系统可能已挂了。alert
赶快,任何推迟都是危险的,必须马上采取行动;crit
:情况很严苛;err
:错误;warn
:警告(潜在的错误);notice
:正常情况,但是该消息很重要;info
:提供信息;debug
:调试消息。
9.5.2. 配置文件
/etc/rsyslog.conf
文件的详细语法在 rsyslog.conf(5) 手册中,在 rsyslog-doc 软件包中也有一份 HTML 文档(/usr/share/doc/rsyslog-doc/html/index.html
)。总的原则是要写“选择器(selector)”和“行为(action)”配对。选择器定义所有相关消息,行为描述如何处理。
9.5.2.1. 选择器语法
选择器是由分号分隔的 *子系统*清单。*优先级*
配对(例如: auth.notice;mail.info
)。星号代表所有的子系统和优先级(例如: *.alert
或者 mail.*
)。几个子系统可以通过逗号合并成组(例如: auth,mail.info
)。优先级指明相同或更高优先级的消息;因此 auth.alert
指具有 alert
和 emerg
优先级的auth
子系统消息。惊叹号(!)前缀表示求反,换句话说指低等级的优先级;因此 auth.!notice
指有 auth
产生的具有 info
或 debug
优先级的消息。等号(=)前缀表示精确指定某种优先级(auth.=notice
只关心具有 notice
优先级的 auth
消息)。优先级依次为:debug, info, notice, warning/warn, err/error , crit, alert, emerg/panic。
列在选择器中的元素会覆盖先前的元素。因此可以限定一个集合或者排除一些元素。例如, kern.info;kern.!err
表示源于内核优先级在 info
和 warn
之间的消息。 none
优先级指示空集(无优先级),可用于从集合中排除一个子系统消息。于是, *.crit;kern.none
指所有优先级等于或高于 crit
但不是来自内核的消息。
9.5.2.2. 行为的语法
回到基础 命名管道,持续管道
命名管道是一种特殊类型的文件,可以像传统管道一样操作(通过在命令行中使用“|”符号),但是命名管道通过文件。这种机制的优点是可以关联两个不相干的进程。任何对命名管道的写操作会阻塞该进程直到另一个进程试图读数据。第二个进程读出第一个进程写的数据,第一个进程恢复执行。
这种文件由 mkfifo
命令创建。
各种可能的行为包括:
添加信息到文件(例如:
/var/log/messages
);将消息发送到
syslog
远程服务器(例如:@log.falcot.com
);将消息发送至已有的命名管道(例如:
|/dev/xconsole
);将消息发给一个或多个已经登录的用户(如:
root,rhertzog
);将消息发给所有登录用户(如:
*
);将消息写入文本控制台(如:
/dev/tty8
)。
安全 转发日志
将一些重要日志保存在单独的机器(可能是日志专用)是很好的主意,这样可以防止侵入者移除他们的入侵痕迹(除非,他们也入侵了该日志服务器)。另外,碰到一些重要问题(像内核崩溃),日志变量都在另外的机器上,就更有机会确定导致崩溃的事件顺序。
要接受其他机器发来的消息,必须配置 rsyslog:实际上,只要激活 /etc/rsyslog.conf
中已有的选项就足够了($ModLoad imudp
and $UDPServerRun 514
)。