Rsyslog正则表达式和DynaFile模板

问题描述 投票:0回答:1

我正在使用以下模板从防火墙日志中仅提取必填字段,以节省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保存此模板的结果?谢谢您的时间。

rsyslog
1个回答
0
投票

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

如果您仅在文件名中使用%timestamp%,则它可能会为每个消息创建一个新文件,因为时间戳包括小时,分钟和秒。一种可能是将时间戳转换为称为rfc3339的标准格式,然后仅使用property replacer来获取该字符串的year-month-date部分。

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")
    
© www.soinside.com 2019 - 2024. All rights reserved.