第 15 章 使用 logging 系统角色
作为系统管理员,您可以使用 logging
系统角色将 Red Hat Enterprise Linux 主机配置为日志服务器,以从多个客户端系统收集日志。
15.1. 使用 logging
RHEL 系统角色过滤本地日志消息
您可以使用 logging
RHEL 系统角色的基于属性的过滤器根据各种条件过滤本地日志消息。例如,您可以实现:
- 日志清晰:在高流量环境中,日志可能会快速增长。专注于特定消息(如错误)有助于更快地识别问题。
- 优化的系统性能:过多的日志通常会因为系统性能降级而连接。仅针对重要事件选择的日志可以防止资源耗尽,这样可让您的系统更有效地运行。
- 增强的安全性:通过安全消息进行高效过滤,如系统错误和失败的登录,有助于仅捕获相关日志。这对于检测漏洞和符合合规性标准非常重要。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo
权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml
:--- - name: Deploy the logging solution hosts: managed-node-01.example.com tasks: - name: Filter logs based on a specific value they contain ansible.builtin.include_role: name: rhel-system-roles.logging vars: logging_inputs: - name: files_input type: basics logging_outputs: - name: files_output0 type: files property: msg property_op: contains property_value: error path: /var/log/errors.log - name: files_output1 type: files property: msg property_op: "!contains" property_value: error path: /var/log/others.log logging_flows: - name: flow0 inputs: [files_input] outputs: [files_output0, files_output1]
示例 playbook 中指定的设置包括以下内容:
logging_inputs
-
定义日志记录输入字典的列表。
type: basics
选项涵盖了systemd
日志或 Unix 套接字的输入。 logging_outputs
-
定义日志输出字典的列表。
type: files
选项支持将日志存储到本地文件,通常存储在/var/log/
目录中。property: msg
;property: contains
; 和property_value:
选项指定包含错误字符串的所有日志都存储在error
/var/log/errors.log
文件中。property: msg
;property: !contains
; 和property_value: error
选项指定所有其他日志都放在/var/log/others.log
文件中。您可以将错误
值替换为您要过滤的字符串。 logging_flows
-
定义日志记录流字典列表,以指定
logging_inputs
和logging_outputs
之间的关系。inputs: [files_input]
选项指定从其处理日志的输入列表。输出: [files_output0, files_output1]
选项指定日志发送到的输出列表。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.logging/README.md
文件。验证 playbook 语法:
$ ansible-playbook --syntax-check ~/playbook.yml
请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
$ ansible-playbook ~/playbook.yml
验证
在受管节点上,测试
/etc/rsyslog.conf
文件的语法:# rsyslogd -N 1 rsyslogd: version 8.1911.0-6.el8, config validation run... rsyslogd: End of config validation run. Bye.
在受管节点上,验证系统是否向日志发送包含
error
字符串的信息:发送测试信息:
# logger error
查看
/var/log/errors.log
日志,例如:# cat /var/log/errors.log Aug 5 13:48:31 hostname root[6778]: error
其中
hostname
是客户端系统的主机名。请注意,该日志包含输入 logger 命令的用户的用户名,本例中为root
。
其他资源
-
/usr/share/ansible/roles/rhel-system-roles.logging/README.md
文件 -
/usr/share/doc/rhel-system-roles/logging/
目录 -
rsyslog.conf (5)
和syslog (3)
手册页