如果与正则表达式不匹配,则 rsyslog7 过滤主机名

如果与正则表达式不匹配,则 rsyslog7 过滤主机名

所以我对 rsyslog 非常陌生(最近从 syslog-ng 切换),我真的很喜欢我可以拥有动态文件名...我的工作最近开始使用 docker,他们将 syslogtag 中的很多字段发送到远程主机。因此,我不是为每个实例设置过滤器,而是尝试编写一个动态过滤器来解析相关详细信息并将其放入它自己的日志/目录中,例如 /var/log/docker/app name/syslog.log

当他们在字段之间提供正确的分隔符时,我的“应用程序名称”正在工作,但是当他们没有使用正确的分隔符时,正则表达式将返回 **NO MATCH** 并将所有内容放入“/var/”日志/docker/**不匹配**/syslog.log'。使用 **NO MATCH** 目录不是问题,但将每个远程主机分组到一个文件中才是问题。有没有办法测试正则表达式是否返回不匹配,然后将文件名从 'syslog.log' 更改为 '%hostname%.log' ?

答案1

我不是专家,但您可以从这里开始:您将需要重复您的正则表达式(我不知道如何评估模板来获取字符串**NO MATCH**)。例如,假设您的“appname”部分与 regexp 匹配[a-z]+:,那么您可以编写

$template nomatch,"/var/log/docker/nomatch/%hostname%.log"
if (not re_match($msg, "[a-z]+:")) then {
   action(type="omfile" dynaFile="nomatch")
   stop
}

描述$template您想要的文件名,if尝试查找匹配项,然后执行action写入文件的操作,无需进一步处理此消息。这action()说明这里在 RainerScript 中。

相关内容