Rsyslog 在转发之前更改日志行

Rsyslog 在转发之前更改日志行

使用 rsyslogd 在 Ubuntu 16.04.5 LTS 上。

我们有以下情况:

(1) 设备将 syslog 转发到 Ubuntu 主机。 (2) Ubuntu 主机将这些转发的消息存储在单独的日志文件中 (3) Ubuntu 主机还将其转发到第三台机器

详细说明当前配置的样子

(1) 在/etc/rsyslog.conf中,已启用以下功能:

# provides UDP syslog reception
module(load="imudp")
input(type="imudp" port="514")

# provides TCP syslog reception
module(load="imtcp")
input(type="imtcp" port="514")

(2) 通过在 /etc/rsyslog.d 中创建 30-remotehosts.conf 来实现,内容如下:

:fromhost-ip, isequal, "<sending_IP>" /var/log/remotesyslog/<name>.log
& ~

(3) 通过在 /etc/rsyslog.d 中创建 10-send_to_other_hosts.conf 来实现,内容如下:

:fromhost-ip, isequal, "<sending_IP>"   @<destination_IP>:514

到目前为止一切顺利,按预期工作。

然而,我们现在需要的是在发送到目的地之前更改日志行。

当前的一个示例日志行是

Dec  7 11:10:07 srvde450.rce-group.local [S=582442040] [SID=9642c9:20:3850677]  1 RTP packets lost: CID=217 [Code:0x600b] [CID:217] [Time:07-12@10:10:13]

在发送到目的地之前,我们需要将其更改为以下内容:

[S=582442040] [SID=9642c9:20:3850677]  1 RTP packets lost: CID=217 [Code:0x600b] [CID:217] [Time:07-12@10:10:13]

因此删除时间戳和来源。

如何才能实现这一目标呢?

答案1

您应该能够通过为仅包含该字段的数据指定模板来完成此操作msg。但请注意,远程服务器可能无法解析生成的非标准行,因此它可能无法使用默认设置来处理它。

创建一个模板,例如,

$template myedit,"%msg%\n"

并在您的过滤器系列中使用它:

:fromhost-ip, isequal, "<sending_IP>"   @<destination_IP>:514;myedit

有很多特性msg这样从输入中提取,你可以操纵它们,例如获取一个子字符串%msg:10:$:%(从字符 10 到末尾)。

相关内容