日志转发规则

远程日志转发规则指的是确定哪些日志消息应该被转发到远程服务器的规则。这些规则通常基于日志消息的内容、来源、级别等属性进行匹配和过滤。以下是一些常见的远程日志转发规则

基于标签的规则

根据日志消息的标签(syslogtag)来确定是否应该转发。例如,只有特定标签的日志消息才会被转发到远程服务器。

我们可以直接在 rsyslog 配置文件中设置远程日志转发规则。下面是一个示例

:syslogtag, isequal, "NGINXERROR" @remote-server-ip:remote-server-port/协议

其中

基于来源IP的规则

根据日志消息的来源IP地址来确定是否应该转发。例如,只有来自特定主机或网络的日志消息才会被转发。

:fromhost-ip, isequal, "特定IP地址" :syslogtag, isequal, "NGINXERROR" @remote-server-ip:remote-server-port/协议

在这个配置中,”:fromhost-ip, isequal, “特定IP地址”” 部分表示过滤条件,指定只有来自特定IP地址的日志消息,并且 “:syslogtag, isequal, “NGINXERROR”” 部分表示只有标签为 “NGINXERROR” 的日志消息才会被转发到远程服务器。最后的 “@remote-server-ip:remote-server-port/协议” 部分表示将匹配到的日志消息转发到指定的远程服务器。这样配置后,只有来自特定IP地址并且标签为 “NGINXERROR” 的日志消息才会被转发到远程服务器。

基于级别的规则

根据日志消息的级别(例如info、warning、error等)来确定是否应该转发。例如,只有警告级别以上的日志消息才会被转发。

基于级别的规则可以通过条件语句中的日志级别来实现。以下是一个示例,说明如何配置基于级别的规则

if ($syslogseverity >= 4) then {    action(type="omfile" file="/var/log/high_severity.log")}

在这个示例中

基于关键字的规则

根据日志消息中包含的关键字或关键词来确定是否应该转发。例如,只有包含特定关键字的日志消息才会被转发。

:msg, contains, "特定关键词" @remote-server-ip:remote-server-port/协议

在这个配置中,”:msg, contains, “特定关键词”” 部分表示过滤条件,指定只有包含特定关键词的日志消息才会被转发到远程服务器。最后的 “@remote-server-ip:remote-server-port/协议” 部分表示将匹配到的日志消息转发到指定的远程服务器。这样配置后,只有包含特定关键词的日志消息才会被转发到远程服务器。我们可以根据需要调整过滤条件,例如根据日志消息的级别来进行过滤。

基于时间的规则

根据日志消息的时间戳来确定是否应该转发。例如,只有在特定时间范围内收到的日志消息才会被转发。

对于基于时间的规则,可以通过条件语句中的时间戳进行判断。下面是一个示例,说明如何配置基于时间的规则,而不使用omfwd

if ($msg contains "特定关键词" and $hour >= 9 and $hour < 17) then {    /var/log/remote.log    stop}

在这个示例中

这样就实现了基于时间的规则,将符合条件的日志消息写入到本地文件中。

基于正则表达式的规则

使用正则表达式来匹配日志消息的内容,并根据匹配结果来确定是否应该转发。例如,只有符合特定模式的日志消息才会被转发。

如果我们想使用单行配置的方式实现基于正则表达式的规则,可以将条件表达式和动作合并到一行中,如下所示

:msg, regex, "ERROR.*Server.*b(d{3})b" /var/log/error_messages.log

在这个示例中,条件表达式 :msg, regex, “ERROR.*Server.*b(d{3})b” 匹配了满足特定正则表达式的日志消息,然后将这些日志消息转发到指定的日志文件 /var/log/error_messages.log 中。

基于日志源的规则

根据日志消息的来源来源(例如文件、系统日志、应用程序日志等)来确定是否应该转发。例如,只有来自特定来源的日志消息才会被转发。

基于日志大小的规则

根据日志消息的大小来确定是否应该转发。例如,只有超过一定大小的日志消息才会被转发。

这些规则可以单独使用,也可以组合使用,以满足特定的转发需求。根据实际情况和需求,管理员可以灵活地配置和调整这些规则,以实现精确的日志转发策略。

变量

在 rsyslog 转发的上下文中,除了 :msg 这样的消息变量外,还有一些其他常用的变量,包括

$fromhost

表示消息的来源主机名或IP地址。

$fromhost-ip

表示消息的来源IP地址。

$syslogfacility

表示消息的设施(facility)。

$syslogpriority

表示消息的优先级(priority)。

$syslogtag

表示消息的标签(tag)。

$year、$month、$day

表示消息的时间戳中的年、月、日部分。

$hour、$minute、$second

表示消息的时间戳中的时、分、秒部分。

这些变量可用于根据不同的条件来过滤、处理或转发日志消息。我们可以根据实际需求在 rsyslog 配置中使用这些变量。

变量的表现形式

在rsyslog配置文件中,变量有两种常见的表示方式

冒号开头(比如 :fromhost-ip、:syslogtag)

这种形式表示系统定义的内置变量。内置变量在rsyslog中有特定的含义和用途,通常用于引用日志消息的属性,如来源主机IP、时间戳、标签等。这些内置变量无需额外定义,直接在配置文件中使用即可。

美元符号开头(比如 $fromhost、$msg)

这种形式表示用户定义的自定义变量。自定义变量是管理员根据需要在rsyslog配置中定义的,用于保存特定的值或中间结果。自定义变量需要在配置文件中显式地进行定义,并且可以在后续的规则中引用和使用。

区别

综上所述,冒号开头的变量表示系统内置变量,而美元符号开头的变量表示用户自定义变量。

rsyslog 配置文件中条件语句

在 :fromhost-ip, isequal, “特定IP地址” :syslogtag, isequal, “NGINXERROR” @remote-server-ip:remote-server-port/协议 这种配置方法中,条件判断的语法是基于比较操作符进行的。除了 isequal,还有一些其他常用的比较操作符,它们分别如下

isequal

表示相等。例如,isequal 可用于检查变量是否等于特定值。示例isequal 的使用方式如下

$syslogtag, isequal, "NGINXERROR"

contains

表示包含。用于检查变量的值是否包含特定字符串。示例contains 的使用方式如下

$msg, contains, "error"

startswith

表示以特定字符串开头。用于检查变量的值是否以指定字符串开头。示例startswith 的使用方式如下

$fromhost-ip, startswith, "## 168"

endswith

表示以特定字符串结尾。用于检查变量的值是否以指定字符串结尾。示例endswith 的使用方式如下

$msg, endswith, ".log"

regex

表示使用正则表达式匹配。用于检查变量的值是否符合正则表达式的模式。示例regex 的使用方式如下

$msg, regex, "^[A-Za-z]+$"

这些比较操作符可以根据实际需求选择合适的条件判断方式,来过滤或选择日志消息。

修改转发的内容

如果我们想使用单行配置来加入自己的IP地址,可以直接在转发动作中使用模板来定义日志消息格式,包括自己的IP地址。以下是一个示例单行配置,演示了如何实现


module(load="imfile")# 监控文件变化input(type="imfile" File="/var/log/nginx/error.log" Tag="NGINXERROR")template(name="MyTemplate" type="string" string="%timestamp% %hostname% %fromhost-ip% -test- %syslogtag% %msg%n"):syslogtag, isequal, "NGINXERROR" /var/log/nginx-error.log;MyTemplate

这段代码是rsyslog的配置文件,用于监控Nginx错误日志文件并将匹配的日志消息转发到指定的输出文件中,并且在日志消息中添加了时间戳、主机名、发送日志的主机IP地址等信息。

让我逐步解释这段代码:

module(load=”imfile”):加载了imfile模块,该模块允许rsyslog监控文件的变化。

input(type=”imfile” File=”/var/log/nginx/error.log” Tag=”NGINXERROR”):配置imfile模块的输入规则,监控指定的文件/var/log/nginx/error.log,并使用标签NGINXERROR来标识这些日志消息。

template(name=”MyTemplate” type=”string” string=”%timestamp% %hostname% %fromhost-ip% -test- %syslogtag% %msg%n”):定义了一个模板,名为MyTemplate,类型为字符串,用于格式化输出的日志消息。这个模板包括了时间戳、主机名、发送日志的主机IP地址、syslog标签、以及日志消息本身。

:syslogtag, isequal, “NGINXERROR” /var/log/nginx-error.log;MyTemplate:配置了日志消息的过滤规则,当syslog标签为NGINXERROR时,将匹配的日志消息输出到指定的文件/var/log/nginx-error.log,并使用之前定义的模板MyTemplate格式化日志消息。

综上所述,这段代码实现了监控Nginx错误日志文件,将匹配的日志消息转发到指定的输出文件,并且在日志消息中添加了额外的信息。

限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: lzxmw777

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注