23.6. 使用 Rsyslog 模块
由于其模块化设计,r syslog 提供了各种 模块,提供额外的功能。请注意,模块可以由第三方编写。大多数模块提供额外的输入(请参阅下面的 输入模块 )或 输出(请参见下面的输出模块 )。其他模块提供特定于各个模块的特殊功能。模块可能会在加载模块后提供额外的配置指令。要载入模块,请使用以下语法:
module(load=”MODULE”)
其中 MODULE 代表您所需的模块。例如:如果要加载可让 rsyslog 将任何标准文本文件转换为 syslog 信息的文本文件输入模块(imfile
),请在 /etc/rsyslog.conf
配置文件中指定以下行:
module(load=”imfile”)
rsyslog 提供了多个模块,它们被分为以下主要类别:
-
输入模块 - 输入模块从各种来源收集消息。输入模块的名称始终以
im
前缀开头,如imfile
和imjournal
。 -
输出模块 - 输出模块提供相应的功能,可以发出消息到各种目标,如通过网络发送、存储在数据库或加密等目标。输出模块的名称始终以
om
前缀(如omsnmp
、omrelp
等)开头。 -
解析器模块 - 这些模块可用于创建自定义解析规则或解析错误的消息。熟悉 C 编程语言,您可以创建自己的消息解析器。parser 模块的名称始终以
pm
前缀开头,如pmrfc5424
、pmrfc3164
等。 -
Message Modification Modules - 消息修改模块更改 syslog 消息的内容。这些模块的名称以
mm
前缀开头。消息修改模块(如mmanon
、MMnormalize
或mmjsonparse
)用于消息的匿名化或规范化。 -
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”)
即使导入多个文件,也足以加载一次性的 imfile
。PollingInterval 模块参数指定 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 类型,从各种输出模块(如 ommysql
、ompgsql
、omoracle
或 ommongodb)中进行选择
。另外,还可使用依赖于 lib
输出模块。The dbi 库的 genericomlib
dbiomlibdbi
模块支持数据库系统 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. 启用加密传输
网络传输中的机密性和完整性可以由 TLS 或 GSSAPI 加密协议提供。
传输层安全性(TLS )是一种加密协议,旨在通过网络提供通信安全性。使用 TLS 时,rsyslog 消息 会在发送之前加密,并且发件人和接收器之间也存在互相身份验证。有关配置 TLS,请参阅 “使用 TLS 配置加密的消息传输”一节。
通用安全服务 API(GSSAPI )是一个用于访问安全服务的程序的应用编程接口。若要将其与 rsyslog 连接使用,您必须有一个正常运作的 Kerberos 环境。有关配置 GSSAPI,请参阅 “使用 GSSAPI 配置加密的消息传输”一节。
使用 TLS 配置加密的消息传输
若要通过 TLS 使用加密传输,您需要同时配置服务器和客户端。
- 创建公钥、私钥和证书文件,请参阅 第 14.1.11 节 “生成新密钥和证书”。
在 服务器 端,在
/etc/rsyslog.conf
配置文件中配置以下内容:将 gtls netstream 驱动程序设置为默认驱动程序:
global(defaultnetstreamdriver="gtls")
提供证书文件的路径:
global(defaultnetstreamdrivercafile="path_ca.pem" defaultnetstreamdrivercertfile="path_cert.pem" defaultnetstreamdriverkeyfile="path_key.pem")
如果您希望使用不太灵活的配置文件,您可以将所有全局指令合并到单个块中。
替换:
- 带有指向公钥的路径的 path_ca.pem
- 带有证书文件路径的 path_cert.pem
- 路径为私钥的 path_key.pem
加载 imtcp 模块并设置驱动程序选项:
module(load=”imtcp” StreamDriver.Mode=“number” StreamDriver.AuthMode=”anon”)
启动服务器:
input(type="imtcp" port="port″)
替换:
-
指定驱动程序模式的数字。要启用 TCP 模式,请使用
1
端口 号,用于启动侦听器,例如
10514
anon
设置表示客户端未经身份验证。
-
指定驱动程序模式的数字。要启用 TCP 模式,请使用
在 客户端,在
/etc/rsyslog.conf
配置文件中配置以下内容:加载公钥:
global(defaultnetstreamdrivercafile="path_ca.pem")
将 path_ca.pem 替换为公钥的路径。
将 gtls netstream 驱动程序设置为默认驱动程序:
global(defaultnetstreamdriver="gtls")
配置驱动程序并指定要执行的操作:
module(load=”imtcp” streamdrivermode=”number” streamdriverauthmode=”anon”) input(type=”imtcp” address=”server.net” port=”port”)
将 number、on 和 port 替换为与服务器上相同的值。
在上面列表中的最后一行,示例操作将来自服务器的消息转发到指定的 TCP 端口。
使用 GSSAPI 配置加密的消息传输
在 rsyslog 中,与 GSSAPI 的交互由 imgssapi 模块提供。打开 GSSAPI 传输模式:
在
/etc/rsyslog.conf
中放入以下配置:$ModLoad imgssapi
此指令加载 imgssapi 模块。
按如下所示指定输入:
$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
文件配置服务器和客户端。
配置客户端:
加载所需的模块:
module(load="imuxsock") module(load="omrelp") module(load="imtcp")
配置 TCP 输入,如下所示:
input(type="imtcp" port="port″)
替换 port,以在所需端口上启动侦听器。
配置传输设置:
action(type="omrelp" target="target_IP″ port="target_port″)
使用标识目标服务器的 IP 地址和端口替换 target_IP 和 target_port。
配置服务器:
配置载入模块:
module(load="imuxsock") module(load="imrelp" ruleset="relp")
配置与客户端配置类似的 TCP 输入:
input(type="imrelp" port="target_port″)
使用与客户端上相同的值替换 target_port。
配置规则并选择要执行的操作。在以下示例中,log_path 指定存储信息的路径:
ruleset (name="relp") { action(type="omfile" file="log_path") }
使用 TLS 配置 RELP
要使用 TLS 配置 RELP,您需要配置身份验证。然后,您需要使用 /etc/rsyslog.conf
文件配置服务器和客户端。
- 创建公钥、私钥和证书文件。具体步骤请查看 第 14.1.11 节 “生成新密钥和证书”。
配置客户端:
加载所需的模块:
module(load="imuxsock") module(load="omrelp") module(load="imtcp")
配置 TCP 输入,如下所示:
input(type="imtcp" port="port″)
替换 port,以在所需端口上启动侦听器。
配置传输设置:
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_IP 和 target_port,其 IP 地址和端口标识目标服务器。
- path_ca.pem、path_cert.pem 和 path_key.pem,包含认证文件的路径
- 模式事务的身份验证模式。使用 "name" 或 "fingerprint"
peer_name,具有允许的对等者的证书指纹。如果您指定此项,
tls.permitpeer
将连接限制到所选的对等组。TLS="on" 设置启用 TLS 协议。
配置服务器:
配置载入模块:
module(load="imuxsock") module(load="imrelp" ruleset="relp")
配置与客户端配置类似的 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"] )
将突出显示的值替换为与客户端上相同的值。
配置规则并选择要执行的操作。在以下示例中,log_path 指定存储信息的路径:
ruleset (name="relp") { action(type="omfile" file="log_path") }