linux7兼容rsyslog版本,linux – rsyslog7过滤到主机名,如果与正则表达式不匹配

本文探讨了在rsyslog中实现动态过滤器的方法,特别是针对Docker环境下多个实例的日志处理。通过正则表达式的匹配,实现了对不同应用名称的日志进行分类,并介绍了如何处理正则表达式匹配失败的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

解决方法:

我不是专家,但你可以从这开始:你将需要重复你的正则表达式(我不知道如何评估模板以获得** NO MATCH **字符串).例如,假设您的“appname”部分与正则表达式[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()参数在RainerScript中描述为here.

标签:rhel,linux,filter,rsyslog

来源: https://codeday.me/bug/20190815/1661925.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值