Rsyslog Regex 和 DynaFile 模板

Rsyslog Regex and DynaFile template

我正在使用以下模板从防火墙日志中仅提取必填字段,以节省 Splunk 中的带宽和许可证成本。当我将它保存到静态文件时它正在工作,但我需要将文件名保存在时间戳中,以便我将轮换旧日志。我正在尝试使用 DynaFile,但我不知道如何将两个模板用于单个日志?

带有静态文件的工作模板:

template(name="clean" type="string"
         string="%TIMESTAMP% %HOSTNAME%  %msg:R,ERE,0,DFLT:type=\"([^\"]*)\"--end% %msg:R,ERE,0,DFLT:subtype=\"([^\"]*)\"--end% %msg:R,ERE,0,DFLT:level=\"([^\"]*)\"--end% %msg:R,ERE,0,DFLT:eventtime=[1-9]+--end% %msg:R,ERE,0,DFLT:srcip=(.*) srcport=[0-9]+--end% %msg:R,ERE,0,DFLT:srcintf=\"([^\"]*)\"--end%\n"
        )

if $hostname == '192.168.0.1' then action(type="omfile" file="/var/log/firewall.log" template="clean")

如何使用 DynaFile 保存此模板的结果?谢谢你的时间。

omfile 模块接受参数 "dynaFile=" 而不是 "file=" 来指定动态文件名的模板。

如果您只在文件名中使用 %timestamp%,它可能会为每条消息创建一个新文件,因为时间戳包括小时、分钟和秒。一种可能性是将时间戳转换为称为 rfc3339 的标准格式,然后使用 property replacer.

仅获取该字符串的年月日部分
template(name="mydynafile" type="string" string="/var/log/my-%timestamp:1:10:date-rfc3339%.log")

if $hostname == '192.168.0.1' then action(type="omfile" dynaFile="mydynafile" template="clean")