第 6 章 使用日志记录系统角色

作为系统管理员,您可以使用日志记录系统角色将 RHEL 主机配置为日志服务器,从很多客户端系统收集日志。

6.1. 日志系统角色

使用日志记录系统角色,您可以在本地和远程主机上部署日志配置。

要在一个或多个系统中应用日志记录系统角色,您可以在 playbook 中定义日志配置。playbook 是一个或多个 play 的列表。playbook 是人类可读的,它们采用 YAML 格式编写。如需有关 playbook 的更多信息,请参阅 Ansible 文档中的 使用 playbook

您希望 Ansible 根据 playbook 配置的系统集合已在 清单文件中定义。如需有关创建和使用清单的更多信息,请参阅 Ansible 文档中的如何构建您的清单

日志记录解决方案提供多种读取日志和多个日志记录输出的方法。

例如,日志记录系统可接受以下输入:

  • 本地文件、
  • systemd/journal,
  • 网络中的另一个日志记录系统。

另外,日志记录系统还可有以下输出:

  • 日志存储在 /var/log 目录中的本地文件中,
  • 日志发送到 Elasticsearch,
  • 日志转发到另一个日志系统。

使用日志记录系统角色,您可以组合输入和输出来满足您的需要。例如,您可以配置日志解决方案,它存储来自本地文件 journal 中的输入,而从文件读取的输入都会转发到另一个日志记录系统,并存储在本地日志文件中。

6.2. 日志记录系统角色参数

在日志记录系统角色 playbook 中,您可以在 logging_inputs 参数中定义输入、logging_outputs 参数中的输出以及 logging_flows 参数中输入和输出之间的关系。Logging 系统角色使用附加选项处理这些变量来配置日志记录系统。您还可以启用加密。

注意

目前,日志记录系统角色中唯一可用的日志记录系统是 Rsyslog

  • logging_inputs - 日志记录解决方案的输入列表。

    • name - 输入的唯一名称。在 logging_flows 输入列表和生成 config 文件名称的一部分中使用。
    • type - 输入元素的类型。这个类型指定与目录名称对应的任务类型 roles/rsyslog/{tasks,vars}/inputs/

      • basics - 输入配置从 systemd 日志或 unix 套接字输入。

        • kernel_message - 如果设置为 true,则会加载imklog 。默认为 false
        • use_imuxsock - 使用 imuxsock 替代 imjournal。默认为 false
        • ratelimit_burst - 可在其中发送的最大信息数 ratelimit_interval。默认 20000 use_imuxsock 为 false。默认 200 use_imuxsock 为 true。
        • ratelimit_interval - 评估 ratelimit_burst 的时间间隔。如果 use_imuxsock 为 false,则默认为 600 秒。如果 use_imuxsock 为 true, 则默认为 0。0 表示关闭速率限制。
        • persist_state_interval - Journal 状态会保留每个 value 信息。默认为 10。仅在 use_imuxsock 为 false 时有效。
      • files - 输入配置本地文件输入。
      • remote - 输入通过网络配置其他日志记录系统的输入。
    • state - 配置文件的状态。present 或者 absent。默认为 present
  • logging_outputs - 日志解决方案的输出列表。

    • files - 输出配置输出到本地文件。
    • forwards - 输出配置输出到另一个日志记录系统。
    • remote_files - 输出将输出配置为另一个日志记录系统到本地文件。
  • logging_flows - 定义 logging_inputslogging_outputs 之间关系的流程列表 。logging_flows 变量有以下键:

    • name - 流的唯一名称
    • inputs - logging_inputs 名称值列表
    • outputs - logging_outputs 名称值列表。

其它资源

  • 安装 rhel-system-roles 软件包,文档位于 /usr/share/ansible/roles/rhel-system-roles.logging/README.html

6.3. 应用本地日志记录系统角色

按照以下步骤准备和应用 Red Hat Ansible Engine playbook,在一组单独机器上配置日志记录解决方案。每台机器都会在本地记录日志。

先决条件

  • 您已在要运行 playbook 的系统中安装了 Red Hat Ansible Engine。

    注意

    您不必在要部署日志记录解决方案的系统中安装 Red Hat Ansible Engine。

  • 您在要从中运行 playbook 的系统中具有 rhel-system-roles 软件包。

    注意

    您不必安装 rsyslog,因为在部署后系统角色会安装 rsyslog

  • 您有一个清单文件,它列出要配置日志记录解决方案的系统。

流程

  1. 创建定义所需角色的 playbook:

    1. 创建新 YAML 文件,并在文本编辑器中打开,例如:

      # vi logging-playbook.yml
    2. 插入以下内容:

      ---
      - name: Deploying basics input and implicit files output
        hosts: all
        roles:
          - linux-system-roles.logging
        vars:
          logging_inputs:
            - name: system_input
              type: basics
          logging_outputs:
            - name: files_output
              type: files
          logging_flows:
            - name: flow1
              inputs: [system_input]
              outputs: [files_output]
  2. 在特定清单上执行 playbook:

    # ansible-playbook -i inventory-file /path/to/file/logging-playbook.yml

    其中:

    • inventory-file 是清单文件。
    • logging-playbook.yml 是您使用的 playbook。

验证

  1. 测试 /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.
  2. 验证系统是否向日志发送信息:

    1. 发送测试信息:

      # logger test
    2. 查看 /var/log/messages 日志,例如:

      # cat /var/log/messages
      Aug  5 13:48:31 hostname root[6778]: test

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

6.4. 使用日志记录系统角色应用远程日志解决方案

按照以下步骤准备和应用 Red Hat Ansible Engine playbook 来配置远程日志记录解决方案。在这个 playbook 中,一个或多个客户端从 systemd-journal 中提取日志,并将其转发到远程服务器。服务器从 remote_rsyslogremote_files 接收远程输入,并输出日志到由远程主机名命名的目录的的本地文件中。

先决条件

  • 您已在要运行 playbook 的系统中安装了 Red Hat Ansible Engine。

    注意

    您不必在要部署日志记录解决方案的系统中安装 Red Hat Ansible Engine。

  • 您在要从中运行 playbook 的系统中具有 rhel-system-roles 软件包。

    注意

    您不必安装 rsyslog,因为在部署后系统角色会安装 rsyslog

  • 您至少有两个系统:

    • 至少一个是日志服务器。
    • 至少一个是日志记录客户端。

流程

  1. 创建定义所需角色的 playbook:

    1. 创建新 YAML 文件,并在文本编辑器中打开,例如:

      # vi logging-playbook.yml
    2. 将以下内容插入到文件中:

      ---
      - name: Deploying remote input and remote_files output
        hosts: server
        roles:
          - linux-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: Deploying basics input and forwards output
        hosts: clients
        roles:
          - linux-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]

      其中 host1.example.com 是日志服务器。

      注意

      您可以修改 playbook 中的参数以符合您的需要。

      警告

      日志解决方案只适用于在服务器或者客户端系统的 SELinux 策略中定义的端口并在防火墙中打开。默认 SELinux 策略包括端口 601、514、6514、10514 和 20514。要使用不同的端口,请 在客户端系统和服务器系统中修改 SELinux 策略。目前还不支持通过系统角色配置防火墙。

  2. 创建列出您的服务器和客户端的清单文件:

    1. 创建新文件并在文本编辑器中打开该文件,例如:

      # vi inventory.ini
    2. 将以下内容插入到清单文件中:

      [servers]
      server ansible_host=host1.example.com
      [clients]
      client ansible_host=host2.example.com

      其中:* host1.example.com 是日志服务器。* host2.example.com 是日志记录客户端。

  3. 在清单上执行 playbook。

    # ansible-playbook -i /path/to/file/inventory.ini /path/to/file/_logging-playbook.yml

    其中:

    • inventory.ini 是清单文件。
    • logging-playbook.yml 是您创建的 playbook。

验证步骤

  1. 在客户端和服务器系统中测试 /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.
  2. 验证客户端系统向服务器发送信息:

    1. 在客户端系统中发送测试信息:

      # logger test
    2. 在服务器系统中查看 /var/log/messages 日志,例如:

      # cat /var/log/messages
      Aug  5 13:48:31 host2.example.com root[6778]: test

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

其它资源

6.5. 其它资源


为了尽快向用户提供最新的信息,本文档可能会包括由机器自动从英文原文翻译的内容。如需更多信息,请参阅此说明。