远程记录
标准系统日志管理配置每周轮换日志文件,并将它们保留四轮。
通常希望日志的维护时间长于默认的 4 周,尤其是在建立与任务相关的系统性能趋势时,例如每月仅执行一次的月末财务结算。
通过将日志消息发送到具有专用海量存储的远程日志主机,管理员可以为其系统维护大量系统日志存档,而无需更改默认日志轮换配置,这是为了防止日志过度消耗磁盘存储。
系统日志消息的集中收集对于监控系统状态和快速识别问题也非常有用。
它还为日志消息提供备份位置,以防系统遭受灾难性的硬盘驱动器故障或者其他问题,从而导致本地日志不再可用。
在这些情况下,驻留在中央日志主机上的日志消息副本可用于帮助诊断导致问题的问题。
标准化系统日志记录由 rsyslog 服务在 Red Hat Enterprise Linux 7 中实现。
系统程序可以将 syslog 消息发送到本地 rsyslogd 服务,然后该服务将根据其配置文件 /etc/rsyslog.conf 中的设置将这些消息重定向到 /var/log 、远程日志服务器或者其他数据库中的文件。
日志消息有两个用于对它们进行分类的特征。
日志消息的功能表明它是消息的类型。
另一方面,优先级表示消息中记录的事件的重要性。
系统日志优先级
优先级 | 含义 |
---|---|
emerg | 系统无法使用 |
alert | 需要立即采取行动 |
crit | 危急情况 |
err | 错误条件 |
warning | 警告条件 |
notice | 正常但重要的情况 |
info | 信息性消息 |
debug | 调试消息 |
将日志重定向到中央日志主机
一旦将中央日志主机配置为接受远程日志记录,就可以在远程系统上配置 rsyslog 服务以将日志发送到中央日志主机。
要将机器配置为将日志发送到远程 rsyslog 服务器,请在 /etc/rsyslog.conf 文件的规则部分添加一行。
使用远程 rsyslog 服务器的 IP 地址代替文件名。
要使用 UDP,请使用单个 @ 符号作为 IP 地址的前缀。
要使用 TCP,请在它前面加上两个 @ 符号 (@@)。
例如,要将所有具有 info 或者更高优先级的消息通过 UDP 发送到 loghost.example.com,请使用以下行:
*.info @loghost.example.com
要通过 TCP 将所有消息发送到 loghost.example.com,请使用以下行:
*.* @@loghost.example.com
或者,日志主机名可以添加 :PORT ,其中 PORT 是远程 rsyslog 服务器正在使用的端口。
如果没有给出端口,它假定默认端口 514 。
添加规则后,重新启动 rsyslog 服务并使用 logger 命令发送测试消息:
[root@logclient ~]# logger "Test from logclient"
检查远程服务器上的日志以确保收到消息。
配置中央日志主机
中央日志主机的实现需要在两种类型的系统上配置 rsyslog 服务:日志消息源自的远程系统和接收消息的中央日志主机。
在中央日志主机上,需要配置 rsyslog 服务,以便接受来自远程主机的日志消息。
要将中央日志主机上的 rsyslog 服务配置为接受远程日志,请在 /etc/rsyslog.conf 文件的模块部分中取消对 TCP 或者 UDP 接收行的注释。
对于 UDP 接收:
# Provides UDP syslog reception $ModLoad imudp.so $UDPServerRun 514
TCP接收:
# Provides TCP syslog reception $ModLoad imtcp.so $InputTCPServerRun 514
TCP 提供更可靠的远程日志消息传送,但 UDP 受更多操作系统和网络设备的支持。
注意:系统日志消息的普通 TCP 传输已被广泛实施,但尚未标准化。
大多数实现当前使用端口 514/TCP,这是传统的 rshd 端口。
如果系统安装了 rsh-server 包并且正在使用旧的不安全的 rshd 服务,它将与使用端口 514/TCP 进行普通 TCP syslog 接收冲突。
通过更改 $InputTCPServerRun 的设置,将日志服务器配置为使用不同的端口。
/etc/rsyslog.conf 中包含的规则默认配置为在单个主机上记录消息。
因此,它按设施对消息进行分类和捆绑。
例如,邮件消息被汇集到 /var/log/maillog 中,而由
crond 守护进程被合并到 /var/log/cron 中以方便定位每种类型的消息。
虽然在单个主机上按设施对消息进行排序是理想的,但它会在中央日志主机上产生不良结果,因为它会导致来自不同远程主机的消息相互混合。
在中央日志主机上,将来自远程系统的日志消息彼此分开通常是更理想的做法。
这种分离可以通过使用 rsyslog 的模板函数定义动态日志文件名来实现。
模板在 /etc/rsyslog.conf 中定义,可用于生成具有动态日志文件名的规则。
模板定义由 $template 指令、模板名称和表示模板文本的字符串组成。
通过使用从日志消息的属性替换的值,可以使模板文本变得动态。
例如,要将来自不同系统的 cron syslog 消息定向到中央日志主机上的不同文件,请使用以下模板根据每条消息的 HOSTNAME 属性生成动态日志文件名:
$template DynamicFile,"/var/log/loghost/%HOSTNAME%/cron.log"
然后可以通过规则中的模板名称引用使用模板定义创建的动态文件名,如下所示:
cron.* ?DynamicFile
在执行极其详细的日志记录的系统上,可能需要在每次写入操作后关闭日志文件的同步以提高性能。
通过在日志规则中为日志文件名加上减号 (-) 前缀,可以省略每次日志记录后日志文件的同步。
但是,如果系统在尝试写入后立即崩溃,则性能提高的权衡确实会造成日志数据丢失的可能性。
以下是使用模板生成动态日志文件名的另一个示例。
在此示例中,远程日志消息将通过引用 HOSTNAME 和 syslogfacility-test 属性按其主机名和设施值排序。
日志消息将写入动态生成的日志文件名,写入操作后不会执行同步。
$template DynamicFile,"/var/log/loghost/%HOSTNAME%/%syslogfacility-text%.log" *.* -?DynamicFile
注意:可以找到 rsyslog 提供的 syslog 消息属性的完整列表
在 rsyslog.conf(5) 手册页的可用属性部分。
一旦 syslog 接收被激活并创建了所需的主机日志分离规则,重新启动 rsyslog 服务以使配置更改生效。
此外,添加必要的 UDP 和/或者 TCP 防火墙规则以允许传入的 syslog 流量,然后重新加载 firewalld。
# systemctl restart rsyslog # firewall-cmd --add-port=514/udp --permanent # firewall-cmd --add-port=514/tcp --permanent # firewall-cmd --reload
当创建新的日志文件时,它们可能不包含在日志主机的现有日志轮换计划中。
应该对此进行补救,以确保新日志文件不会增长到无法管理的大小。
例如,要将前面示例中的新日志文件包含在日志轮换中,请将以下条目添加到 /etc/logrotate.d/syslog 配置文件中的日志文件列表中。
/var/log/loghost/*/*.log