Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

23.6. 使用 Rsyslog 模块

由于其模块化设计,r syslog 提供了各种 模块,提供额外的功能。请注意,模块可以由第三方编写。大多数模块提供额外的输入(请参阅下面的 输入模块 )或 输出(请参见下面的输出模块 )。其他模块提供特定于各个模块的特殊功能。模块可能会在加载模块后提供额外的配置指令。要载入模块,请使用以下语法:

module(load=”MODULE”)

其中 MODULE 代表您所需的模块。例如:如果要加载可让 rsyslog 将任何标准文本文件转换为 syslog 信息的文本文件输入模块(imfile),请在 /etc/rsyslog.conf 配置文件中指定以下行:

module(load=”imfile”)

rsyslog 提供了多个模块,它们被分为以下主要类别:

  • 输入模块 - 输入模块从各种来源收集消息。输入模块的名称始终以 im 前缀开头,如 imfileimjournal
  • 输出模块 - 输出模块提供相应的功能,可以发出消息到各种目标,如通过网络发送、存储在数据库或加密等目标。输出模块的名称始终以 om 前缀(如 omsnmpomrelp 等)开头。
  • 解析器模块 - 这些模块可用于创建自定义解析规则或解析错误的消息。熟悉 C 编程语言,您可以创建自己的消息解析器。parser 模块的名称始终以 pm 前缀开头,如 pmrfc5424pmrfc3164 等。
  • Message Modification Modules - 消息修改模块更改 syslog 消息的内容。这些模块的名称以 mm 前缀开头。消息修改模块(如 mmanonMMnormalizemmjsonparse )用于消息的匿名化或规范化。
  • string Generator Modules - String 生成器模块基于消息内容生成字符串,并与 rsyslog 提供的模板功能高度协作。有关模板的更多信息,请参阅 第 23.2.3 节 “模板”。字符串生成器模块的名称始终以 sm 前缀开头,如 smfile 或 smtradfile
  • Library 模块 - Library 模块提供其他可加载模块的功能。在需要时,rsyslog 会自动加载这些模块,用户无法配置这些模块。

有关所有可用模块及其详细描述的完整列表,请访问

警告

请注意,当 rsyslog 加载任何模块时,它为它们提供了对其部分功能和数据的访问权限。这会带来潜在的安全威胁。要最大程度降低安全风险,仅使用值得信赖的模块。

23.6.1. 导入文本文件

Text File Input Module(简写为 imfile )使 rsyslog 可以将任何文本文件转换为 syslog 消息流。您可以使用 imfile 从创建自己的文本文件日志的应用导入日志消息。要加载 imfile,请在 /etc/rsyslog.conf 中添加以下内容:

    module(load=”imfile”
    				PollingInterval=”int”)

即使导入多个文件,也足以加载一次性的 imfilePollingInterval 模块参数指定 rsyslog 检查连接文本文件中更改的频率。要更改它,默认间隔为 10 秒,以秒为单位指定的时间间隔替换 int

要识别要导入的文本文件,在 /etc/rsyslog.conf 中使用以下语法:

# File 1
input(type="imfile"
   File="path_to_file"
   Tag="tag:"
   Severity="severity"
   Facility="facility")

# File 2
input(type="imfile"
   File="path_to_file2")
...

指定输入文本文件所需的设置:

  • 使用到文本文件的路径替换 path_to_file
  • tag: 替换为此消息的标签名称。

除了所需的指令外,还有一些其他设置可用于文本输入。通过将严重性替换为适当的关键字来设置导入消息的严重性。使用关键字替换 facility,以定义生成消息的子系统。严重性和设备的关键词与基于设备/优先级过滤器中使用的关键字相同,请参阅 第 23.2.1 节 “过滤器”

例 23.15. 导入文本文件

Apache HTTP 服务器以文本格式创建日志文件。要将 rsyslog 的处理功能应用到 apache 错误消息,请先使用 imfile 模块导入消息。在 /etc/rsyslog.conf 中添加以下内容:

module(load=”imfile”)
input(type="imfile"
   File="/var/log/httpd/error_log"
   Tag="apache-error:")

23.6.2. 将消息导出到数据库

在数据库中执行日志数据时,可以更快、方便地处理日志数据,而不是使用文本文件。根据所用的 DBMS 类型,从各种输出模块(如 ommysqlompgsqlomoracleommongodb)中进行选择。另外,还可使用依赖于 lib dbi 库的 genericomlib dbi 输出模块。The omlibdbi 模块支持数据库系统 Firebird/Interbase、MS SQL、Sybase、SQLite、Ingres、Oracle、mSQL、MySQL 和 PostgreSQL。

例 23.16. 将 Rsyslog 消息导出到数据库

要将 rsyslog 消息存储在 MySQL 数据库中,请在 /etc/rsyslog.conf 中添加以下内容:

module(load=”ommysql”)

. action(type”ommysql”
server=”database-server”
db=”database-name”
uid=”database-userid”
pwd=”database-password”
serverport=”1234”)

首先,加载 输出模块,然后指定通信端口。在上例的最后一行中指定了其他信息,如服务器名称和数据库以及身份验证数据。

23.6.3. 启用加密传输

网络传输中的机密性和完整性可以由 TLSGSSAPI 加密协议提供。

传输层安全性(TLS )是一种加密协议,旨在通过网络提供通信安全性。使用 TLS 时,rsyslog 消息 会在发送之前加密,并且发件人和接收器之间也存在互相身份验证。有关配置 TLS,请参阅 “使用 TLS 配置加密的消息传输”一节

通用安全服务 API(GSSAPI )是一个用于访问安全服务的程序的应用编程接口。若要将其与 rsyslog 连接使用,您必须有一个正常运作的 Kerberos 环境。有关配置 GSSAPI,请参阅 “使用 GSSAPI 配置加密的消息传输”一节

使用 TLS 配置加密的消息传输

若要通过 TLS 使用加密传输,您需要同时配置服务器和客户端。

  1. 创建公钥、私钥和证书文件,请参阅 第 14.1.11 节 “生成新密钥和证书”
  2. 服务器 端,在 /etc/rsyslog.conf 配置文件中配置以下内容:

    1. 将 gtls netstream 驱动程序设置为默认驱动程序:

      global(defaultnetstreamdriver="gtls")
    2. 提供证书文件的路径:

      global(defaultnetstreamdrivercafile="path_ca.pem"
      defaultnetstreamdrivercertfile="path_cert.pem"
      defaultnetstreamdriverkeyfile="path_key.pem")

      如果您希望使用不太灵活的配置文件,您可以将所有全局指令合并到单个块中。

      替换:

      • 带有指向公钥的路径的 path_ca.pem
      • 带有证书文件路径的 path_cert.pem
      • 路径为私钥的 path_key.pem
    3. 加载 imtcp 模块并设置驱动程序选项:

      module(load=”imtcp”
      StreamDriver.Mode=“number”
      StreamDriver.AuthMode=”anon”)
    4. 启动服务器:

      input(type="imtcp" port="port″)

      替换:

      • 指定驱动程序模式的数字。要启用 TCP 模式,请使用 1
      • 端口 号,用于启动侦听器,例如 10514

        anon 设置表示客户端未经身份验证。

  3. 客户端,在 /etc/rsyslog.conf 配置文件中配置以下内容:

    1. 加载公钥:

      global(defaultnetstreamdrivercafile="path_ca.pem")

      path_ca.pem 替换为公钥的路径。

    2. 将 gtls netstream 驱动程序设置为默认驱动程序:

       global(defaultnetstreamdriver="gtls")
    3. 配置驱动程序并指定要执行的操作:

      module(load=”imtcp”
        streamdrivermode=”number”
        streamdriverauthmode=”anon”)
      input(type=”imtcp”
        address=”server.net”
        port=”port”)

      number、onport 替换为与服务器上相同的值。

      在上面列表中的最后一行,示例操作将来自服务器的消息转发到指定的 TCP 端口。

使用 GSSAPI 配置加密的消息传输

rsyslog 中,与 GSSAPI 的交互由 imgssapi 模块提供。打开 GSSAPI 传输模式:

  1. /etc/rsyslog.conf 中放入以下配置:

    $ModLoad imgssapi

    此指令加载 imgssapi 模块。

  2. 按如下所示指定输入:

    $InputGSSServerServiceName name
    $InputGSSServerPermitPlainTCP on
    $InputGSSServerMaxSessions number
    $InputGSSServerRun port
    • 使用 GSS 服务器的名称替换 name。
    • 替换数字,以设置支持的最大会话数。默认情况下不限制这个数字。
    • 使用您要在其上启动 GSS 服务器的所选端口替换 port。

      设置 上的 $InputGSSServerPermitPlainTCP 允许服务器在同一端口上同时接收纯 TCP 消息。默认情况下为 off。

注意

当配置文件读取器遇到 /etc/rsyslog.conf 配置文件中的 $InputGSSServerRun 指令时,会立即初始化 The imgsapi 模块。因此,$InputGSSServerRun 之后配置的附加选项将被忽略。要使配置生效,必须在 $InputGSSServerRun 之前放置所有 imgssapi 配置选项。

例 23.17. 使用 GSSAPI

以下配置启用端口 1514 上的 GSS 服务器,该服务器也允许在同一端口上接收普通的 tcp syslog 消息。

$ModLoad imgssapi
$InputGSSServerPermitPlainTCP on
$InputGSSServerRun 1514

23.6.4. 使用 RELP

可靠的事件记录协议 (RELP)是用于计算机网络中数据登录的网络协议。它旨在提供可靠的事件消息传送,这使其在消息丢失无法接受的环境中很有用。

配置 RELP

要配置 RELP,您需要使用 /etc/rsyslog.conf 文件配置服务器和客户端。

  1. 配置客户端:

    1. 加载所需的模块:

      module(load="imuxsock")
      module(load="omrelp")
      module(load="imtcp")
    2. 配置 TCP 输入,如下所示:

      input(type="imtcp" port="port″)

      替换 port,以在所需端口上启动侦听器。

    3. 配置传输设置:

      action(type="omrelp" target="target_IP″ port="target_port″)

      使用标识目标服务器的 IP 地址和端口替换 target_IP 和 target_port

  2. 配置服务器:

    1. 配置载入模块:

      module(load="imuxsock")
      module(load="imrelp" ruleset="relp")
    2. 配置与客户端配置类似的 TCP 输入:

      input(type="imrelp" port="target_port″)

      使用与客户端上相同的值替换 target_port

    3. 配置规则并选择要执行的操作。在以下示例中,log_path 指定存储信息的路径:

      ruleset (name="relp") {
      action(type="omfile" file="log_path")
      }
使用 TLS 配置 RELP

要使用 TLS 配置 RELP,您需要配置身份验证。然后,您需要使用 /etc/rsyslog.conf 文件配置服务器和客户端。

  1. 创建公钥、私钥和证书文件。具体步骤请查看 第 14.1.11 节 “生成新密钥和证书”
  2. 配置客户端:

    1. 加载所需的模块:

      module(load="imuxsock")
      module(load="omrelp")
      module(load="imtcp")
    2. 配置 TCP 输入,如下所示:

      input(type="imtcp" port="port″)

      替换 port,以在所需端口上启动侦听器。

    3. 配置传输设置:

      action(type="omrelp" target="target_IP″ port="target_port″ tls="on"
      tls.caCert="path_ca.pem"
      tls.myCert="path_cert.pem"
      tls.myPrivKey="path_key.pem"
      tls.authmode="mode"
      tls.permittedpeer=["peer_name"]
      )

      替换:

      • target_IPtarget_port,其 IP 地址和端口标识目标服务器。
      • path_ca.pem、path_cert.pempath_key.pem,包含认证文件的路径
      • 模式事务的身份验证模式。使用 "name""fingerprint"
      • peer_name,具有允许的对等者的证书指纹。如果您指定此项,tls.permitpeer 将连接限制到所选的对等组。

        TLS="on" 设置启用 TLS 协议。

  3. 配置服务器:

    1. 配置载入模块:

      module(load="imuxsock")
      module(load="imrelp" ruleset="relp")
    2. 配置与客户端配置类似的 TCP 输入:

      input(type="imrelp" port="target_port″ tls="on"
      tls.caCert="path_ca.pem"
      tls.myCert="path_cert.pem"
      tls.myPrivKey="path_key.pem"
      tls.authmode="name"
      tls.permittedpeer=["peer_name","peer_name1","peer_name2"]
      )

      将突出显示的值替换为与客户端上相同的值。

    3. 配置规则并选择要执行的操作。在以下示例中,log_path 指定存储信息的路径:

      ruleset (name="relp") {
      action(type="omfile" file="log_path")
      }