UNIX 系统日志
系统日志
UNIX 系统有一个非常灵活和强大的日志系统,它让你能够记录几乎任何你能想象的东西,然后你可以操作日志来获取你需要的信息。
许多版本的 UNIX 提供了一个名为 syslog 的通用日志工具,有信息需要记录的单独程序要将信息发送到 syslog。
Unix syslog 是一个主机可配置的,统一的系统日志工具。该系统采用集中式的系统日志进程,其运行程序 /etc/syslogd
或者 /etc/syslog
。
系统记录器的操作是相当简单的。程序发送日志条目到 syslogd,其将会在配置文件 /etc/syslogd.conf
或 /etc/syslog
中查找,当找到一个匹配后,将日志消息写入到期望的日志文件中。
现有你应该了解的四种基本日志术语:
术语 | 描述 |
---|---|
Facility | 此标识符用来描述提交的日志信息的应用程序或进程。例如邮件,内核和 FTP。 |
Priority | 一个显示消息重要性的指示器。syslog 作为准则定义了消息的级别,从调试信息到关键事件。 |
Selector | 一个或更多的 facility 和 level 的结合体 。当一个输入事件匹配一个 selector 时,一个 action 会被执行。 |
Action | 传入的消息匹配 selector 时会发生的事情。Action 可以将消息写入日志文件,将消息回传到控制台或其他设备,将消息写入到一个登录用户,或将消息发送到另一个日志服务器。 |
Syslog Facilities
下面是 selector 可用的 facility。不是所有的 facility 都存在于所有版本的 UNIX。
Facility | 描述 |
---|---|
auth | 需要用户名和密码的相关活动(getty,su,login) |
authpriv | 类似于 auth 的认证,但是记录的文件只能被授权的用户读取。 |
console | 用于捕获信息,这些信息一般会传向系统控制台。 |
cron | 与 cron 系统有关的计划任务信息。 |
daemon | 所捕获的所有系统守护进程信息。 |
ftp | ftp 守护进程相关的信息。 |
kern | 内核信息。 |
local0.local7 | 用户自定义使用的本地信息。 |
lpr | 与打印服务系统有关的信息。 |
与邮件系统相关的信息。 | |
mark | 用于生产日志文件中时间戳的伪事件。 |
news | 与网络新闻传输协议( nntp )有关的信息。 |
ntp | 与网络时间协议有关的信息。 |
user | 普通用户进程产生的信息。 |
uucp | UUCP 子系统生成的信息。 |
Syslog 优先级
syslog 的优先级( Priority )如下表:
Priority | 描述 |
---|---|
emerg | 紧急情况,如即将发生的系统崩溃,通常会广播到所有用户。 |
alert | 需要立即修改的情况,如系统数据库的损坏。 |
crit | 关键的情况,如一个硬件的错误。 |
err | 普通错误。 |
warning | 警告 |
notice | 不是一个错误的情况,但是可能需要用特定方式的处理一下。 |
info | 报告性的消息。 |
debug | 用于调试程序的消息。 |
none | 没有重要级别,通常用于指定非日志的消息。 |
facility 和 level 的组合能够让你辨别记录了什么和这些日志信息去哪儿了。
每个程序尽职尽责地向系统记录器发送消息,记录器基于 selector 定义的 level 决定跟踪什么和舍弃什么信息。
当你指定了一个 level,系统会记录这一 level 及更高 level 的一切信息。
文件 /etc/syslog.conf
文件 /etc/syslog.conf 用于配置记录消息的位置。一个典型的 syslog.conf 文件看起来应该像这样:
*.err;kern.debug;auth.notice /dev/console
daemon,auth.notice /var/log/messages
lpr.info /var/log/lpr.log
mail.* /var/log/mail.log
ftp.* /var/log/ftp.log
auth.* @prep.ai.mit.edu
auth.* root,amrood
netinfo.err /var/log/netinfo.log
install.* /var/log/install.log
*.emerg *
*.alert |program_name
mark.* /dev/console
文件中的每一行包含两部分:
- 一个消息 selector,其指定了哪种消息用来记录。例如,内核的所有错误信息或所有调试信息。
- 一个 action,其指明了对接收的消息该怎么处理。例如,写入一个文件中或者将消息发送到用户的终端。
下面是上述配置的注意事项:
- 消息 selector 有两部分:facility 和 priority。例如, kern.debug 选择了所有由内核( facility )产生的的调试信息( priority )。
- 消息 selectetor kern.debug 选择了所有 priority 大于 debug 的信息。
- 在任何 facility 和 priority 位置上的星号,表示“所有”的意思。例如, *.debug 表示所有 facility 的调试信息,而 kern.* 表示内核所产生的所有信息。
- 你也可以用逗号来指定多个 facility。两个或两个以上的 selectetor 可以用分号组合在一起。
日志记录 Action
action 部分指定了下面五个 action 中的其中一个:
- 将信息记录到一个文件或设备。例如,
/var/log/lpr.log
或者/dev/console
。 - 发送一个消息给一个用户。你可以用逗号分开指定多个用户名(例如,root,amrood)。
- 发送一个消息给所有用户。在这种情况下,action 部分包含了一个星号(例如,*)。
- 用管道发送消息到程序。在这种情况下,程序是在 UNIX 管道符号(|)后指定。
- 将消息发送到另一台主机上的 syslog。在这种情况下,action 部分包含了一个前面有 at 符号的主机名(例如,@w3cschool.cn)。
logger 命令
UNIX 提供了 logger 命令,这是处理系统日志记录的一个非常有用的命令。logger 命令发送日志消息到 syslogd 守护进程,从而驱使系统记录日志。
这意味着我们可以随时用命令行检查 syslogd 守护进程及其配置。logger 命令提供了一种在命令行上添加一行条目到系统日志文件中的方法。
该命令的格式是:
logger [-i] [-f file] [-p priority] [-t tag] [message]...
下面是具体的参数细节:
选项 | 描述 |
---|---|
-f filename | 使用文件 filename 的内容作为消息来记录。 |
-i | 日志的每一行都记录进程的 id。 |
-p priority | 指定输入消息的优先级 priority(指定的 selector),优先级 priority 可以是数字或者指定为 facility.level 对的格式。默认参数是 user.notice。 |
-t tag | 用指定 tag 标记记录到日志中的每一行。 |
message | 字符串参数,它的内容以特定顺序连接在一起,由空格分开。 |
日志轮换
日志文件有快速增长的特点,并消耗大量的磁盘空间。大多数 UNIX 发行版系统使用了工具(如 newsyslog 或 logrotate)启用日志轮换功能。
这些工具由 cron 守护进程在一个频繁的时间间隔里调用。你可以在 newsyslog 或 logrotate 的手册页中获取更多的细节内容。
重要日志文件的位置
所有的系统应用程序创建自己的日志文件在 /var/log
和它的子目录里。下面这里有几个重要的应用,其相应的日志目录:
应用 | 目录 |
---|---|
httpd | /var/log/httpd |
samba | /var/log/samba |
cron | /var/log/ |
/var/log/ | |
mysql | /var/log/ |