我有一个发送消息的 rsyslog 服务器。
我想知道我是否可以编辑我转发的任何数据?
也就是说,我发送的其中一个日志包含以下信息:
<13>Nov 29 08:00:00 localhost CEF: 0|212|656|1|1|Bot Access Control|4| fileId=739000180002315518 sourceServiceName=
我有兴趣更改主机名,例如从 localhost 更改为 HOST01
<13>Nov 29 08:00:00 HOST01 CEF: 0|212|656|1|1|Bot Access Control|4| fileId=739000180002315518 sourceServiceName=
我无法控制日志的接收位置,只能控制传送。
答案1
您可以使用物业更换者处理该属性,假设这是找到msg
字符串的位置。localhost
在你的rsyslog.conf
或类似的行中定义一个模板叫做newmsg
:
$template newmsg,"%timestamp% %programname% %msg:R,ERE,1:(.*) localhost --end% HOST01 %msg:R,ERE,1: localhost (.*)--end%\n"
为了使其更具可读性,这里将其分成几行,但您必须使用上面的版本:
$template newmsg,
"%timestamp% %programname%
%msg:R,ERE,1:(.*) localhost --end%
HOST01
%msg:R,ERE,1: localhost (.*)--end%
\n"
这包含 2 个替换器的用途,如下所示:%msg:R,ERE,1: ...(...)... --end%
其中%msg%
是用作正则表达式的输入的属性R
,扩展正则表达式ERE
,仅保留捕获组 1,后跟具有捕获组的正则表达式模式()
,替换器以 结尾--end
。
由于此模板始终将单词添加HOST01
到消息中,因此您仅应在消息实际包含时使用它localhost
,因此请编辑记录消息的操作以对此进行测试,例如:
:msg, contains, " localhost " -/var/log/test.log; newmsg
注意最后的模板的使用:; newmsg
。
您也可以在发送到远程时使用模板,例如:
action(type="omfwd"
Target="server.example.net"
Port="10514"
Protocol="tcp"
Template="newmsg"
)