16.2. 使用 logging RHEL 系统角色应用一个远程日志解决方案
您可以使用 logging
RHEL 系统角色配置远程日志记录解决方案,其中一个或多个客户端从 systemd-journal
服务获取日志并将其转发到远程服务器。服务器从 remote_rsyslog
和 remote_files
配置接收远程输入,并将日志输出到远程主机名命名的目录中的本地文件。
因此,您可以涵盖您需要的用例:
- 集中式日志管理:从单一存储点收集、访问和管理多台计算机的日志消息,简化了日常监控和故障排除任务。此外,此用例还减少了登录各个计算机来检查日志消息的需要。
- 增强安全性:在一个中央位置存储日志消息可增加他们处于安全且篡改的环境中的几率。这样的环境可以更轻松地检测和响应安全事件,并更方便地满足审计要求。
- 提高了日志分析效率:协调来自多个系统的日志消息对于跨多个机器或服务的复杂问题的快速故障排除非常重要。这样,您可以快速分析和交叉引用来自不同来源的事件。
先决条件
- 您已准备好控制节点和受管节点。
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo
权限。 - 在服务器或客户端系统的 SELinux 策略中定义端口,并打开这些端口的防火墙。默认 SELinux 策略包括端口 601、514、6514、10514 和 20514。要使用其他端口,请参阅 修改客户端和服务器系统 上的 SELinux 策略。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml
:--- - name: Deploy the logging solution hosts: managed-node-01.example.com tasks: - name: Configure the server to receive remote input ansible.builtin.include_role: name: rhel-system-roles.logging vars: logging_inputs: - name: remote_udp_input type: remote udp_ports: [ 601 ] - name: remote_tcp_input type: remote tcp_ports: [ 601 ] logging_outputs: - name: remote_files_output type: remote_files logging_flows: - name: flow_0 inputs: [remote_udp_input, remote_tcp_input] outputs: [remote_files_output] - name: Deploy the logging solution hosts: managed-node-02.example.com tasks: - name: Configure the server to output the logs to local files in directories named by remote host names ansible.builtin.include_role: name: rhel-system-roles.logging vars: logging_inputs: - name: basic_input type: basics logging_outputs: - name: forward_output0 type: forwards severity: info target: <host1.example.com> udp_port: 601 - name: forward_output1 type: forwards facility: mail target: <host1.example.com> tcp_port: 601 logging_flows: - name: flows0 inputs: [basic_input] outputs: [forward_output0, forward_output1] [basic_input] [forward_output0, forward_output1]
示例 playbook 的第一个 play 中指定的设置包括:
logging_inputs
-
定义日志记录输入字典的列表。
type: remote
选项涵盖通过网络的其他日志记录系统的远程输入。udp_ports: [ 601 ]
选项定义要监控的 UDP 端口号的列表。tcp_ports: [ 601 ]
选项定义要监控的 TCP 端口号列表。如果设置了udp_ports
和tcp_ports
,则使用udp_ports
,并丢弃tcp_ports
。 logging_outputs
-
定义日志输出字典的列表。
type: remote_files
选项使输出将日志存储到每个远程主机和程序名称,其源自日志。 logging_flows
-
定义日志记录流字典列表,以指定
logging_inputs
和logging_outputs
之间的关系。inputs: [remote_udp_input, remote_tcp_input]
选项指定从其处理日志的输入列表。outputs: [remote_files_output]
选项指定日志发送到的输出列表。
示例 playbook 的第二个 play 中指定的设置包括:
logging_inputs
-
定义日志记录输入字典的列表。
type: basics
选项涵盖了systemd
日志或 Unix 套接字的输入。 logging_outputs
-
定义日志输出字典的列表。
type: forwards
选项支持通过网络向远程日志服务器发送日志。severity: info
选项指的是有关信息重要性的日志消息。facility: mail
选项指的是正在生成日志消息的系统程序类型。target: <host1.example.com
> 选项指定远程日志记录服务器的主机名。udp_port: 601
/tcp_port: 601
选项定义远程日志记录服务器侦听的 UDP/TCP 端口。 logging_flows
-
定义日志记录流字典列表,以指定
logging_inputs
和logging_outputs
之间的关系。inputs: [basic_input]
选项指定从其处理日志的输入列表。输出: [forward_output0, forward_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 (level 1), master config /etc/rsyslog.conf rsyslogd: End of config validation run. Bye.
验证客户端系统向服务器发送信息:
在客户端系统中发送测试信息:
# logger test
在服务器系统上,查看
/var/log/<host2.example.com>/messages
日志,例如:# cat /var/log/<host2.example.com>/messages Aug 5 13:48:31 <host2.example.com> root[6778]: test
其中
<host2.example.com>
是客户端系统的主机名。请注意,该日志包含输入 logger 命令的用户的用户名,本例中为root
。
其他资源
-
/usr/share/ansible/roles/rhel-system-roles.logging/README.md
文件 -
/usr/share/doc/rhel-system-roles/logging/
目录 -
rsyslog.conf (5)
和syslog (3)
手册页