You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

rsyslogd配置:抑制重复告警X,遇告警Y时重置状态

解决rsyslog重复发送断连告警并在恢复后重置状态的方案

我刚好处理过几乎一模一样的场景,用rsyslog的自定义状态变量+条件判断就能完美解决你的需求——既实现断连时只发一次告警,又能在连接恢复后立即重置状态,确保下次断连能再次触发转发。

核心思路

我们通过rsyslog的全局自定义变量跟踪连接状态:

  • 收到断连告警时,仅当状态为「未断连」时才转发告警,并标记状态为「已断连」
  • 收到恢复告警时,立即重置状态为「未断连」,让下次断连能重新触发转发

具体配置示例

假设你原本的SNMP转发动作是用omfwd模块,把以下配置添加到你的rsyslog.conf或对应的规则文件中:

# 开头可以显式初始化连接状态(可选,未定义的变量默认视为空,不影响判断)
set $!connFOOStatus = "up";

# 处理断连告警:仅在首次触发时转发
:msg, contains, "ERROR: Connection FOO is DOWN" {
    if $!connFOOStatus != "down" then {
        # 这里替换成你实际的SNMP转发动作
        action(
            type="omfwd"
            target="your-snmp-proxy-ip"
            port="162"
            protocol="udp"
            template="your-snmp-template"
        )
        # 标记状态为已断连,后续重复告警不再转发
        set $!connFOOStatus = "down";
    }
}

# 处理恢复告警:重置状态,允许下次断连触发转发
:msg, contains, "NOTICE: Connection FOO is UP" {
    set $!connFOOStatus = "up";
    # 可选:如果需要转发恢复通知,在这里添加对应的action
    # action(type="omfwd" target="your-snmp-proxy-ip" port="162" protocol="udp" template="your-snmp-up-template")
}

关键细节说明

  • 自定义变量作用:$!connFOOStatus是rsyslog的全局变量,会一直保留状态(除非rsyslog重启),完美替代execOnlyOnceEveryInterval的固定间隔限制,实现基于事件的状态控制
  • 版本要求:确保你的rsyslog版本在v8.3.0及以上,这个版本才支持$!开头的自定义属性变量
  • 多连接扩展:如果需要跟踪多个连接,只需要给每个连接创建独立的变量(比如$!connBARStatus对应Connection BAR),复制上述规则修改匹配内容即可
  • Fallback方案(可选):如果担心恢复告警丢失,可以在断连转发动作中加上execOnlyOnceEveryInterval="3600"(比如1小时),这样即使状态没重置,一小时后也会再次转发,优先还是依赖状态变量控制

这个方案完全贴合你的需求:断连时只发一次告警,连接恢复后立即重置状态,下次断连能立刻触发转发,不会再出现大量重复的SNMP信息。

内容的提问来源于stack exchange,提问作者the.jxc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:27:48