含“test”的$msg过滤规则未生效,事件仍被写入磁盘求助
解决rsyslog丢弃特定文本事件无效的问题
排查配置问题
1. 避免默认规则干扰
rsyslog默认配置(如/etc/rsyslog.conf或/etc/rsyslog.d/下的其他文件)可能自带输出动作,若你的丢弃规则晚于这些默认动作执行,事件会先被写入磁盘再触发丢弃逻辑。需确保自定义丢弃规则优先于所有输出动作加载。
2. 修正Ruleset配置
你的第一个ruleset配置存在变量使用错误与逻辑冗余,调整后如下:
ruleset(name="test_sort") { if ($msg contains "test") then { stop # 直接丢弃包含test的事件 } # 仅处理不包含test的事件 set $!host = $myhostname; action(type="omfile" dynafile="format") } input(type="impudp" port="5000" ruleset="test_sort")
注意:$$myhostname需改为$myhostname,双重$是错误的变量引用方式。
3. 传统Filter规则的正确写法
第二个规则:msg, contains, "test" stop必须放在所有输出规则之前,示例:
# 先执行丢弃逻辑 :msg, contains, "test" stop # 再定义正常输出规则 *.* /var/log/syslog
验证配置
- 重启rsyslog服务:
systemctl restart rsyslog - 发送测试事件:
logger -n 127.0.0.1 -P 5000 "this is a test message" - 检查目标日志文件,确认包含"test"的事件未被写入
内容的提问来源于stack exchange,提问作者MrMr
相关产品推荐
相关产品推荐

