Unix / Linux - 系统日志记录
在本章中,我们将详细讨论 Unix 中的系统日志记录。
Unix 系统有一个非常灵活和强大的日志系统,它使你能够记录几乎任何你能想到的东西,然后操纵日志来检索你需要的信息。
许多版本的 Unix 提供了一个通用的日志工具,称为 syslog。 需要记录信息的各个程序将信息发送到系统日志。
Unix syslog 是主机可配置的统一系统日志记录工具。 该系统使用运行程序 /etc/syslogd 或 /etc/syslog 的集中式系统日志进程。
系统记录器的操作非常简单。 程序将它们的日志条目发送到 syslogd,它查询配置文件 /etc/syslogd.conf 或 /etc/syslog,并且当匹配时 找到后,将日志消息写入所需的日志文件。
您应该了解四个基本的系统日志术语 −
序号 | 术语 & 描述 |
---|---|
1 |
Facility 用于描述提交日志消息的应用程序或进程的标识符。 例如,邮件、内核和 ftp。 |
2 |
Priority 消息重要性的指示符。 级别在 syslog 中定义为指南,从调试信息到关键事件。 |
3 |
Selector 一个或多个设施和级别的组合。 当传入事件与选择器匹配时,将执行操作。 |
4 |
Action 与选择器匹配的传入消息会发生什么——动作可以将消息写入日志文件,将消息回显到控制台或其他设备,将消息写入登录用户,或将消息发送给另一个 系统日志服务器。 |
系统日志设施
我们现在将了解系统日志功能。 以下是选择器的可用工具。 并非所有功能都存在于所有版本的 Unix 上。
设施 | 说明 |
---|---|
1 |
auth 与请求名称和密码相关的活动(getty、su、login) |
2 |
authpriv 与 auth 相同,但记录到只能由选定用户读取的文件 |
3 |
console 用于捕获通常指向系统控制台的消息 |
4 |
cron 来自 cron 系统调度程序的消息 |
5 |
daemon 系统守护进程 catch-all |
6 |
ftp 与 ftp 守护进程相关的消息 |
7 |
kern 内核消息 |
8 |
local0.local7 每个站点定义的本地设施 |
9 |
lpr 来自行打印系统的消息 |
10 |
与邮件系统相关的消息 |
11 |
mark 用于在日志文件中生成时间戳的伪事件 |
12 |
news 与网络新闻协议(nntp)相关的消息 |
13 |
NTP 与网络时间协议相关的消息 |
14 |
user 常规用户进程 |
15 |
uucp UUCP子系统 |
系统日志优先级
下表总结了 syslog 优先级 −
序号 | 优先级 & 描述 |
---|---|
1 |
emerg 紧急情况,例如即将发生的系统崩溃,通常向所有用户广播 |
2 |
alert 应立即纠正的情况,例如系统数据库损坏 |
3 |
crit 严重情况,例如硬件错误 |
4 |
err 普通错误 |
5 |
Warning 警告 |
6 |
notice 不是错误,但可能应该以特殊方式处理的情况 |
7 |
info 信息性消息 |
8 |
debug 调试程序时使用的消息 |
9 |
none 用于指定不记录消息的伪级别 |
设施和级别的组合使您能够辨别记录的内容以及信息的去向。
当每个程序尽职尽责地将其消息发送到系统记录器时,记录器会根据选择器中定义的级别来决定要跟踪什么以及丢弃什么。
当您指定一个级别时,系统将跟踪该级别及更高级别的所有内容。
/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
文件的每一行包含两部分 −
消息选择器(message selector),指定要记录的消息类型。 例如,来自内核的所有错误消息或所有调试消息。
一个 action 字段,说明应该对消息做什么。 例如,将其放入文件或将消息发送到用户终端。
以下是上述配置的注意点 −
消息选择器有两部分:facility(设施)和priority(优先级)。 例如,kern.debug 选择内核(工具)生成的所有调试消息(优先级)。
消息选择器kern.debug 选择所有优先级大于调试的。
用星号代替设施或优先级表示"全部"。 例如,*.debug 表示所有调试信息,而kern.* 表示所有由内核生成的信息。
您还可以使用逗号来指定多个设施。 可以使用分号将两个或多个选择器组合在一起。
记录操作
action 字段指定五个动作之一 −
将消息记录到文件或设备。 例如,/var/log/lpr.log 或 /dev/console。
向用户发送消息。 您可以指定多个用户名,用逗号分隔; 例如,root, amrood。
向所有用户发送消息。 在这种情况下,操作字段由星号组成; 例如, *。
将消息通过管道传递给程序。 在这种情况下,程序在 Unix 管道符号 (|) 之后指定。
将消息发送到另一台主机上的系统日志。 在这种情况下,操作字段包含一个主机名,前面有一个 at 符号; 例如,@tutorialspoint.com。
logger 日志命令
Unix 提供了logger 命令,这是一个非常有用的处理系统日志记录的命令。 logger 命令将日志消息发送到 syslogd 守护程序,并因此引发系统日志记录。
这意味着我们可以随时从命令行检查 syslogd 守护程序及其配置。 logger 命令提供了一种从命令行向系统日志文件添加单行条目的方法。
命令格式为 −
logger [-i] [-f file] [-p priority] [-t tag] [message]...
这里是参数的详细信息 −
序号 | 选项 & 描述 |
---|---|
1 |
-f filename 使用文件 filename 的内容作为要记录的消息。 |
2 |
-i 记录每行记录器进程的进程 ID。 |
3 |
-p priority 输入具有指定优先级的消息(指定的选择器条目); 消息优先级可以用数字指定,或作为 facility.priority 对指定。 默认优先级是 user.notice。 |
4 |
-t tag 用指定的标签标记添加到日志中的每一行。 |
5 |
message 内容按指定顺序连接在一起的字符串参数,由空格分隔。 |
您可以使用Manpage Help(联机帮助)来检查此命令的完整语法。
日志轮换
日志文件往往会增长得非常快并占用大量磁盘空间。 为了启用日志轮转,大多数发行版都使用诸如 newsyslog 或 logrotate 之类的工具。
应使用 cron 守护程序 在频繁的时间间隔内调用这些工具。 查看 newsyslog 或 logrotate 的手册页以获取更多详细信息。
重要日志位置
所有系统应用程序都在 /var/log 及其子目录中创建日志文件。 下面是几个重要的应用程序及其对应的日志目录 −
应用 | 目录 |
---|---|
httpd | /var/log/httpd |
samba | /var/log/samba |
cron | /var/log/ |
/var/log/ | |
mysql | /var/log/ |