14.5.配置系统日志
14.5.1. 配置本地日志记录
配置文件 /etc/syslog.conf 控制 syslogd 在接收到日志条目时的处理方式。此文件有多个参数来控制如何处理传入的事件。facility 描述了哪个子系统生成了消息,例如内核或守护进程,level 描述了事件发生的严重性。这使得可以根据日志消息的 facility 和 level 来配置日志消息的记录位置。还可以根据发送消息的应用程序进行操作,并且在远程日志记录的情况下,可以根据生成日志事件的机器的主机名进行操作。
该配置文件包含每个操作一行,每一行的语法由选择器字段和操作字段组成。选择器字段的语法是 facility.level,它会匹配来自 facility 且级别为 level 或更高的日志消息。也可以在级别之前添加一个可选的比较标志,以更精确地指定记录的内容。多个选择器字段可以用于相同的操作,并且它们用分号 (;
) 分隔。使用 *
会匹配所有内容。操作字段指定将日志消息发送到哪里,例如文件或远程日志主机。
以下是 FreeBSD 默认的 /etc/syslog.conf 配置示例:
① 匹配所有级别为
err
或更高的消息,以及kern.warning
、auth.notice
和mail.crit
,并将这些日志消息发送到控制台(/dev/console)。②匹配来自
mail
子系统的所有级别为info
或更高的消息,并将日志记录到 /var/log/maillog。③ 使用比较标志 (
=
) 只匹配级别为debug
的消息,并将其记录到 /var/log/debug.log。
14.5.2. 日志记录设施
设施说明了生成消息的系统部分。设施是将不同消息分开的方式,以便用户更容易查阅日志。
表 2. syslog 设施
auth
authpriv
与 auth 相同,但日志记录到只有 root 可读的文件中。
console
由内核控制台输出驱动程序写入到 /dev/console 的消息。
cron
daemon
ftp
kern
由内核生成的消息。这些不能由任何用户进程生成。
lpr
邮件系统。
mark
此设施每 20 分钟添加一条记录。
news
网络新闻系统。
ntp
网络时间协议系统。
security
syslog
syslogd(8) 内部生成的消息。
user
随机用户进程生成的消息。这是未指定时的默认设施标识符。
uucp
Unix-to-Unix 复制系统。一个古老的协议。看到这个设施的消息很奇怪。
local0 through local7
保留给本地使用。
14.5.3. 日志记录级别
级别意味着消息的严重性,以下是按优先级从高到低的关键词列表:
表 3. syslog 级别
emerg
惊慌条件。通常广播给所有用户。
alert
应立即修正的条件,例如损坏的系统数据库。
crit
严重条件,例如硬件设备错误。
err
错误。
warning
警告消息。
notice
不是错误条件,但可能需要特别处理的条件。
info
信息性消息。
debug
通常只有在调试程序时才有用的消息。
none
此特殊级别禁用特定设施。
14.5.4. 阅读日志消息
日志通常具有以下语法:
以下是 /var/log/cron 文件的输出示例:
启用此功能后,日志中将显示设施和级别,如下所示:
14.5.5. 日志管理与轮换
日志文件可能会迅速增长,占用磁盘空间,并使查找有用信息变得更加困难。
此内置程序会定期轮换并压缩日志文件,并可选择性地创建缺失的日志文件,并在日志文件移动时向程序发送信号。
注意
logfilename
- 要归档的系统日志文件的名称。[owner:group]
- 这个可选字段指定归档文件的所有者和组。mode
- 指定日志文件和归档文件的文件模式。有效的模式位是 0666。(即,可以为归档日志指定所有者、组和其他用户的读写权限。)count
- 指定可存在的最大归档文件数。size
- 当日志文件的大小达到指定的大小(以千字节为单位)时,日志文件将被修剪。如果该字段包含星号(‘*’),则日志文件不会根据大小进行修剪。[/pid_file]
- 这个可选字段指定包含守护进程进程 ID 的文件名,或查找组进程 ID。[sig_num]
- 这个可选字段指定在轮换文件时将发送到守护进程的信号号。
注意
最后两个字段是可选的,指定进程的 PID 文件名以及在轮换文件时发送给该进程的信号号。
14.5.6. 配置远程日志记录
随着系统数量的增加,监控多个主机的日志文件可能变得繁琐。配置集中式日志记录可以减少日志文件管理的部分管理负担。
在 FreeBSD 中,可以使用 syslogd 和 newsyslog 配置集中式日志文件聚合、合并和轮换。
本节展示一个示例配置,其中主机 A
,命名为 logserv.example.com
,将收集本地网络的日志信息。
主机 B
,命名为 logclient.example.com
,将配置为将日志信息传递给日志服务器。
14.5.6.1. 日志服务器配置
日志服务器是已配置为接受来自其他主机日志信息的系统。
在配置日志服务器之前,检查以下内容:
如果日志服务器和任何日志客户端之间有防火墙,请确保防火墙规则集允许客户端和服务器之间的 UDP 端口 514。
日志服务器和所有客户端机器必须在本地 DNS 中具有正向和反向条目。如果网络没有 DNS 服务器,请在每个系统的 /etc/hosts 中创建条目。正确的名称解析是必需的,以确保日志条目不会被日志服务器拒绝。
在日志服务器上,编辑 /etc/syslog.conf 来指定接收日志条目的客户端名称、要使用的日志设施和存储主机日志条目的日志文件名称。此示例添加了 B
的主机名,记录所有设施,并将日志条目存储在 /var/log/logclient.log 中。
示例 1. 日志服务器配置示例
接下来,执行以下命令:
第一个条目在系统启动时启动 syslogd。第二个条目允许来自指定客户端的日志条目。-v -v
增加了日志消息的详细程度,这对于调整设施非常有用,管理员可以查看每个设施下记录了哪些类型的消息。
最后,创建日志文件:
此时,应重新启动 syslogd 并进行验证:
如果返回 PID,则表示服务器已成功重新启动,可以开始客户端配置。如果服务器未能重新启动,请检查 /var/log/messages 以获取错误信息。
14.5.6.2. 日志客户端配置
日志客户端将日志条目发送到网络上的日志服务器。客户端还会保留自己的日志副本。
配置好日志服务器后,在日志客户端上执行以下命令:
第一个条目启用系统启动时启动 syslogd。第二个条目防止此客户端接收来自其他主机的日志(-s
),并增加了日志消息的详细程度。
接下来,在客户端的 /etc/syslog.conf 中定义日志服务器。在此示例中,所有记录的设施都通过 @
符号发送到指定的主机:
保存编辑后,重新启动 syslogd 以使更改生效:
此消息现在应该同时存在于客户端的 /var/log/messages 和日志服务器的 /var/log/logclient.log 中。
14.5.6.3. 调试日志服务器
如果日志服务器没有接收到任何消息,原因最可能是网络连接问题、主机名解析问题或配置文件中的拼写错误。为了排除原因,确保日志服务器和日志客户端能够使用 /etc/rc.conf 中指定的主机名互相 ping
。如果失败,请检查网络布线、防火墙规则集,以及日志服务器和客户端中的 DNS 服务器或 /etc/hosts 中的主机名条目。重复检查,直到 ping
成功为止。
如果两个主机的 ping
都成功,但日志消息仍未接收,可以暂时增加日志详细度,以便缩小配置问题的范围。在以下示例中,日志服务器上的 /var/log/logclient.log 为空,而日志客户端上的 /var/log/messages 没有显示失败的原因。
为了增加调试输出,编辑日志服务器上的 syslogd_flags
条目并执行重启:
重启后,调试数据会立即在控制台上闪现,类似于以下内容:
在此示例中,日志消息因拼写错误导致主机名不匹配而被拒绝。客户端的主机名应为 logclient
,而不是 logclien
。修正拼写错误后,执行重启并验证结果:
输出应类似于以下内容:
此时,消息已正确接收并放置在正确的文件中。
14.5.6.4. 安全考量
最后更新于
这有帮助吗?