11.4. 过滤本地日志记录系统角色中的 logging

您可以部署一个日志解决方案,该方案基于 rsyslog 属性的过滤器过滤日志。

先决条件

  • 对一个或多个 受管节点 的访问和权限,这些节点是您要使用 logging 系统角色配置的系统。
  • 控制节点 的访问和权限,这是 Red Hat Ansible Core 配置其他系统的系统。

    在控制节点上:

    • 安装了 Red Hat Ansible Core
    • rhel-system-roles 软件包已安装
    • 列出受管节点的清单文件。
注意

您不必安装 rsyslog 软件包,因为系统管理员在部署时会安装 rsyslog

流程

  1. 使用以下内容创建一个新的 playbook.yml 文件:

    ---
    - name: Deploying files input and configured files output
      hosts: all
      roles:
        - linux-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]

    使用这个配置,包含 error 字符串的所有消息都会记录在 /var/log/errors.log 中,所有其他消息都记录在 /var/log/others.log 中。

    您可以将 error 属性值替换为您要过滤的字符串。

    您可以根据您的偏好修改变量。

  2. 可选:验证 playbook 语法。

    # ansible-playbook --syntax-check playbook.yml
  3. 在清单文件上运行 playbook:

    # ansible-playbook -i inventory_file /path/to/file/playbook.yml

验证

  1. 测试 /etc/rsyslog.conf 文件的语法:

    # rsyslogd -N 1
    rsyslogd: version 8.1911.0-6.el8, config validation run...
    rsyslogd: End of config validation run. Bye.
  2. 验证系统是否向日志发送包含 error 字符串的信息:

    1. 发送测试信息:

      # logger error
    2. 查看 /var/log/errors.log 日志,例如:

      # cat /var/log/errors.log
      Aug  5 13:48:31 hostname root[6778]: error

      其中 hostname 是客户端系统的主机名。请注意,该日志包含输入 logger 命令的用户的用户名,本例中为 root

其他资源

  • rhel-system-roles 软件包一起安装的文档在 /usr/share/ansible/roles/rhel-system-roles.logging/README.html