rsyslogd - 如何丢弃重复的警报“X”,除非警报“Y”发生在其间(保留上下文)

rsyslogd - 如何丢弃重复的警报“X”,除非警报“Y”发生在其间(保留上下文)

我有一个接口,当断开连接时每 60 秒发出一次警报。

ERROR: Connection FOO is DOWN

我的 rsyslogd 正在向下游 SNMP 代理发送垃圾邮件。为了避免这种情况,我希望仅在连接断开时发送警报。您可能会说这很简单,只需使用 action.execOnlyOnceEveryInterval 即可。

但诀窍在于,一旦连接恢复……

NOTICE: Connection FOO is UP.

...我想重置该状态,以便一旦它再次发生故障,我就会立即记录/中继 DOWN 状态的再次发生。

我在 RainerScript 中看到了局部变量,但那没用。我需要全局变量来保留消息之间的状态。

帮助?

答案1

如果您使用的是 7.5.6 或更高版本,则可以按如下方式使用 mmsequence。

module(load="mmsequence")
if ($programname == "myprog") and ($msg contains "Bad Conn1")
then {
    action(
        type="mmsequence"
        mode="key"
        key="connection1"
        step="1"
        var="$!counter1"
    )
    if ($!counter1 > 1) then stop;
}
if ($programname == "myprog") and ($msg contains "Good Conn1")
then {
    action(
        type="mmsequence"
        mode="key"
        key="connection1"
        step="1"
        to="1"
        var="$!counter1"
    )
}

请注意,mmsequence 在 rsyslog v8 中被标记为“已弃用”。文档指出您应该改用“全局变量”。但是,在文档中搜索全局变量并没有提供关于如何使用这些神秘的“全局变量”的信息。

相关内容