Red Hat Training

A Red Hat training course is available for RHEL 8

第 37 章 配置远程日志解决方案

要确保环境中不同机器的日志被集中记录在日志记录服务器中,您可以将 Rsyslog 应用程序配置为记录来自客户端系统到服务器的特定条件的日志。

37.1. Rsyslog 日志记录服务

Rsyslog 应用程序与 systemd-journald 服务相结合,在 Red Hat Enterprise Linux 中提供本地和远程日志支持。rsyslogd 守护进程持续读取由 systemd-journald 服务接收的,来自日志的 syslog 信息。rsyslogd 然后过滤和处理这些 syslog 事件,并将其记录到 rsyslog 日志文件,或者根据配置将它们转发到其他服务。

rsyslogd 守护进程还提供扩展过滤、加密对消息进行传输、输入和输出模块以及使用 TCP 和 UDP 协议的支持。

/etc/rsyslog.conf 中( rsyslog 的主要配置文件),您可以指定 rsyslogd 处理消息的规则。通常,您可以根据其源和主题(优先级)和主题来分类信息,然后分配当消息适合这些条件时应执行的操作。

/etc/rsyslog.conf 中,您还可以看到由 rsyslogd 维护的日志文件列表。大多数日志文件都位于 /var/log/ 目录中。有些应用程序,如 httpdsamba,将日志文件存储在 /var/log/ 中的子目录中。

其它资源

37.2. 安装 Rsyslog 文档

Rsyslog 应用程序有广泛的文档,如 https://www.rsyslog.com/doc/ 可用 , 但您也可以按照以下流程在本地安装 rsyslog-doc 文档软件包。

先决条件

  • 您已在系统中激活了 AppStream 软件仓库。
  • 您可以使用 sudo 安装新软件包。

流程

  • 安装 rsyslog-doc 软件包:

    $ sudo yum install rsyslog-doc

验证

  • 在您选择的浏览器中 打开 file:///usr/share/doc/rsyslog/html/index.html 文件,例如:

    $ firefox file:///usr/share/doc/rsyslog/html/index.html

37.3. 配置服务器以使用 TCP 进行远程日志

Rsyslog 应用程序允许您运行日志记录服务器,并配置独立的系统将其日志文件发送到日志记录服务器。要通过 TCP 使用远程日志,请配置服务器和客户端。服务器收集并分析一个或多个客户端系统发送的日志。

使用 Rsyslog 应用程序,您可以维护一个集中式日志系统,它通过网络将日志信息转发到服务器。为了避免服务器不可用时消息丢失,您可以为 forwarding 操作配置操作队列。这样,发送失败的信息会在本地存储,直到服务器可以被再次访问为止。请注意,无法为使用 UDP 协议的连接配置这样的队列。

omfwd 插件通过 UDP 或 TCP 提供转发。默认协议是 UDP。由于插件是内置的,所以不必载入它。

默认情况下, rsyslog 在端口 514 上使用 TCP。

先决条件

  • rsyslog 在服务器系统中安装
  • 以 root 用户身份登录到服务器

流程

  1. 可选: 要将不同的端口用于 rsyslog 流量,请将 syslogd_port_t SELinux 类型添加到端口。例如,启用端口 30514:

    # semanage port -a -t syslogd_port_t -p tcp 30514
  2. 可选: 要将不同的端口用于 rsyslog 流量,请将 firewalld 配置为允许那个端口上的 rsyslog 流量。例如,允许区 30514 中的端口 zone 的 TCP 流量:

    # firewall-cmd --zone=zone --permanent --add-port=30514/tcp
    success
  3. 在名为 remotelog.conf/etc/rsyslog.d/ 目录中创建一个新文件,并插入以下内容:

    # Define templates before the rules that use them
    ### Per-Host Templates for Remote Systems ###
    template(name="TmplAuthpriv" type="list") {
        constant(value="/var/log/remote/auth/")
        property(name="hostname")
        constant(value="/")
        property(name="programname" SecurePath="replace")
        constant(value=".log")
        }
    
    template(name="TmplMsg" type="list") {
        constant(value="/var/log/remote/msg/")
        property(name="hostname")
        constant(value="/")
        property(name="programname" SecurePath="replace")
        constant(value=".log")
        }
    
    # Provides TCP syslog reception
    module(load="imtcp")
    # Adding this ruleset to process remote messages
    ruleset(name="remote1"){
         authpriv.*   action(type="omfile" DynaFile="TmplAuthpriv")
          *.info;mail.none;authpriv.none;cron.none
    action(type="omfile" DynaFile="TmplMsg")
    }
    
    input(type="imtcp" port="30514" ruleset="remote1")
  4. 保存对 /etc/rsyslog.d/remotelog.conf 文件的更改。
  5. 确保 rsyslog 服务已在日志服务器中运行并启用:

    # systemctl status rsyslog
  6. 重启 rsyslog 服务。

    # systemctl restart rsyslog
  7. 可选:如果 rsyslog 没有启用,请确保在重启后自动启动 rsyslog 服务:

    # systemctl enable rsyslog

现在,您的日志服务器被配置为接收和存储环境中其他系统的日志文件。

验证

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

    # rsyslogd -N 1
    rsyslogd: version 8.1911.0-2.el8, config validation run (level 1), master config /etc/rsyslog.conf
    rsyslogd: End of config validation run. Bye.

其它资源

  • rsyslogd(8) man page。
  • rsyslog.conf(5) man page。
  • semanage(8) man page。
  • firewall-cmd(1) man page。
  • 安装 rsyslog-doc 软件包(位于 file:///usr/share/doc/rsyslog/html/ index.html)的 文档

37.4. 通过 TCP 配置远程日志记录到服务器

按照以下步骤通过 TCP 协议配置系统将日志信息转发到服务器。omfwd 插件通过 UDP 或 TCP 提供转发。默认协议是 UDP。由于插件是内置的,所以不必载入它。

先决条件

  • rsyslog 软件包安装在应该向服务器报告的客户端系统中。
  • 您已为服务器配置了远程日志。
  • SELinux 允许使用指定的端口并在防火墙中打开。

流程

  1. 在名为 remotelog.conf/etc/rsyslog.d/ 目录中创建一个新文件,并插入以下内容:

    *.* action(type="omfwd"
          queue.type="linkedlist"
          queue.filename="example_fwd"
          action.resumeRetryCount="-1"
          queue.saveOnShutdown="on"
          target="example.com" port="30514" protocol="tcp"
         )

    其中:

    • queue.type="linkedlist" 在内存队列中启用 LinkedList,
    • queue.filename 定义磁盘存储。备份文件使用前面的全局 workDirectory 指令中指定的工作目录中的 example_fwd 前缀创建,
    • action.resumeRetryCount -1 设置可防止 rsyslog 在服务器没有响应时在重试连接时丢弃信息,
    • 如果 rsyslog 关闭,启用 queue.saveOnShutdown="on" 将保存内存数据,
    • 最后一行将所有接收的信息转发到日志记录服务器,端口规格是可选的。

    使用这个配置, rsyslog 会向服务器发送信息,但如果远程服务器无法访问,则在内存中保存信息。只有在 rsyslog 用尽配置的内存队列空间或需要关闭时,才会在磁盘上创建文件,这会提高系统性能。

  2. 重启 rsyslog 服务。

    # systemctl restart rsyslog

验证

要验证客户端系统向服务器发送信息,请按照以下步骤执行:

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

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

    # cat /var/log/remote/msg/hostname/root.log
    Feb 25 03:53:17 hostname root[6064]: test

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

其它资源

  • rsyslogd(8) man page。
  • rsyslog.conf(5) man page。
  • 安装 rsyslog-doc 软件包(位于 file:///usr/share/doc/rsyslog/html/ index.html)的 文档

37.5. 配置服务器以通过 UDP 接收远程日志信息

Rsyslog 应用程序允许您配置系统来接收来自远程系统的日志信息。要通过 UDP 使用远程日志,请配置服务器和客户端。接收服务器收集并分析一个或多个客户端系统发送的日志。默认情况下, rsyslog 使用端口 514 的 UDP 来接收来自远程系统的日志信息。

按照以下步骤配置服务器以收集和分析一个或多个客户端系统通过 UDP 协议发送的日志。

先决条件

  • 已安装 rsyslog 工具。

流程

  1. 可选:要为 rsyslog 流量使用与默认端口 514 不同的端口:

    1. 在 SELinux 策略配置中添加 syslogd_port_t SELinux 类型,使用您要 rsyslog 的端口号替换 portno:

      # semanage port -a -t syslogd_port_t -p udp portno
    2. firewalld 配置为允许进入 rsyslog 流量,使用您要 rsyslog 使用的区替换 portno 和端口号和 zone:

      # firewall-cmd --zone=zone --permanent --add-port=portno/udp
      success
    3. 重新载入防火墙规则:

      # firewall-cmd --reload
  2. /etc/rsyslog.d/ 目录中创建新 .conf 文件,如 remotelogserv.conf 并插入以下内容:

    # Define templates before the rules that use them
    ### Per-Host Templates for Remote Systems ###
    template(name="TmplAuthpriv" type="list") {
        constant(value="/var/log/remote/auth/")
        property(name="hostname")
        constant(value="/")
        property(name="programname" SecurePath="replace")
        constant(value=".log")
        }
    
    template(name="TmplMsg" type="list") {
        constant(value="/var/log/remote/msg/")
        property(name="hostname")
        constant(value="/")
        property(name="programname" SecurePath="replace")
        constant(value=".log")
        }
    
    # Provides UDP syslog reception
    module(load="imudp")
    
    # This ruleset processes remote messages
    ruleset(name="remote1"){
         authpriv.*   action(type="omfile" DynaFile="TmplAuthpriv")
          *.info;mail.none;authpriv.none;cron.none
    action(type="omfile" DynaFile="TmplMsg")
    }
    
    input(type="imudp" port="514" ruleset="remote1")

    其中 514 是默认使用的端口号 rsyslog。您可以指定不同的端口。

  3. 重启 rsyslog 服务。

    # systemctl restart rsyslog
  4. 可选:如果 rsyslog 没有启用,请确保在重启后自动启动 rsyslog 服务:

    # systemctl enable rsyslog

验证

  1. 验证 /etc/rsyslog.conf 文件以及 /etc/rsyslog.d/ 目录中的所有 .conf 文件的语法:

    # rsyslogd -N 1
    rsyslogd: version 8.1911.0-2.el8, config validation run (level 1), master config /etc/rsyslog.conf
    rsyslogd: End of config validation run. Bye.

其它资源

  • rsyslogd(8) man page。
  • rsyslog.conf(5) man page。
  • semanage(8) man page。
  • firewall-cmd(1) man page。
  • 安装 rsyslog-doc 软件包(位于 file:///usr/share/doc/rsyslog/html/ index.html)的 文档

37.6. 通过 UDP 配置远程日志记录到服务器

按照以下步骤通过 UDP 协议配置系统将日志信息转发到服务器。omfwd 插件通过 UDP 或 TCP 提供转发。默认协议是 UDP。由于插件是内置的,所以不必载入它。

先决条件

流程

  1. /etc/rsyslog.d/ 目录中创建新 .conf 文件,如 remotelogcli.conf 并插入以下内容:

    *.* action(type="omfwd"
          queue.type="linkedlist"
          queue.filename="example_fwd"
          action.resumeRetryCount="-1"
          queue.saveOnShutdown="on"
          target="example.com" port="portno" protocol="udp"
         )

    其中:

    • queue.type="linkedlist" 在内存队列中启用 LinkedList。
    • queue.filename 定义磁盘存储。备份文件使用前面的全局 workDirectory 指令中指定的工作目录中的 example_fwd 前缀创建。
    • 如果服务器没有响应, action.resumeRetryCount -1 设置可防止 rsyslog 在重试连接时丢弃信息。
    • enabled queue.saveOnShutdown="on" 如果 rsyslog 关闭,则会保存内存数据。
    • portno 您要 rsyslog 的端口号。默认值为 514
    • 最后一行将所有接收的信息转发到日志记录服务器,端口规格是可选的。

      使用这个配置, rsyslog 会向服务器发送信息,但如果远程服务器无法访问,则在内存中保存信息。只有在 rsyslog 用尽配置的内存队列空间或需要关闭时,才会在磁盘上创建文件,这会提高系统性能。

  2. 重启 rsyslog 服务。

    # systemctl restart rsyslog
  3. 可选:如果 rsyslog 没有启用,请确保在重启后自动启动 rsyslog 服务:

    # systemctl enable rsyslog

验证

要验证客户端系统向服务器发送信息,请按照以下步骤执行:

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

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

    # cat /var/log/remote/msg/hostname/root.log
    Feb 25 03:53:17 hostname root[6064]: test

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

其它资源

  • rsyslogd(8) man page。
  • rsyslog.conf(5) man page。
  • 安装 rsyslog-doc 软件包(位于 file:///usr/share/doc/rsyslog/html/ index.html)的 文档

37.7. 配置可靠的远程日志

使用可靠的事件日志记录协议(RELP),您可以使用 TCP 发送和接收 syslog 信息,并降低消息丢失的风险。RELP 提供可靠的事件消息交付,这在无法接受消息丢失的环境中很有用。要使用 RELP,请配置 imrelp 输入模块,该模块在服务器上运行并接收日志 ; 在客户端中运行的 omrelp 输出模块将日志发送到日志记录服务器。

先决条件

  • 您已在服务器和客户端系统中安装了 rsysloglibrelprsyslog-relp 软件包。
  • SELinux 允许使用指定的端口并在防火墙中打开。

流程

  1. 配置客户端系统以进行可靠的远程日志:

    1. 在客户端系统中,在 /etc/rsyslog.d/ 目录中创建一个新的 .conf 文件,例如 relpcli.conf,并插入以下内容:

      module(load="omrelp")
      *.* action(type="omrelp" target="target_IP" port="target_port")

      其中:

      • target_IP 是日志记录服务器的 IP 地址。
      • target_port 是日志记录服务器的端口。
    2. 保存对 /etc/rsyslog.d/relpserv.conf 文件的更改。
    3. 重启 rsyslog 服务。

      # systemctl restart rsyslog
    4. 可选:如果 rsyslog 没有启用,请确保在重启后自动启动 rsyslog 服务:

      # systemctl enable rsyslog
  2. 为可靠远程日志记录配置服务器系统:

    1. 在服务器系统中,在 /etc/rsyslog.d/ 目录中创建一个新的 .conf 文件,例如 relpserv.conf,并插入以下内容:

      ruleset(name="relp"){
      *.* action(type="omfile" file="log_path")
      }
      
      
      module(load="imrelp")
      input(type="imrelp" port="target_port" ruleset="relp")

      其中:

      • log_path 指定存储消息的路径。
      • target_port 是日志记录服务器的端口。使用与客户端配置文件相同的值。
    2. 保存对 /etc/rsyslog.d/relpserv.conf 文件的更改。
    3. 重启 rsyslog 服务。

      # systemctl restart rsyslog
    4. 可选:如果 rsyslog 没有启用,请确保在重启后自动启动 rsyslog 服务:

      # systemctl enable rsyslog

验证

要验证客户端系统向服务器发送信息,请按照以下步骤执行:

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

    # logger test
  2. 在服务器系统中,使用指定的 log_path 查看日志,例如:

    # cat /var/log/remote/msg/hostname/root.log
    Feb 25 03:53:17 hostname root[6064]: test

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

其它资源

  • rsyslogd(8) man page。
  • rsyslog.conf(5) man page。
  • 安装 rsyslog-doc 软件包(位于 file:///usr/share/doc/rsyslog/html/ index.html)的 文档

37.8. 支持的 Rsyslog 模块

要扩展 Rsyslog 工具程序的功能,您可以使用特定的附加模块。模块提供额外的输入(输入模块)、输出(输出模块)和其他特定功能。模块也可以提供额外的配置指令,这些指令会在您载入该模块后可用。

您可以使用以下命令列出系统中安装的输入和输出模块:

# ls /usr/lib64/rsyslog/{i,o}m*

您可以在从 rsyslog-doc 软件包安装的文档中的以下页面查看所有可用 rsyslog 模块列表: file:///usr/share/doc/rsyslog/html/configuration/modules/idx_output.html

37.9. 其它资源