Назад | Перейти на главную страницу

rsyslogd - как отменить повторы тревоги «X», если тревога «Y» не происходит между ними (сохранить контекст)

У меня есть интерфейс, который при отключении выдает сигналы тревоги каждые 60 секунд.

ERROR: Connection FOO is DOWN

Мой rsyslogd рассылает спам нижестоящим агентам SNMP. Чтобы избежать этого, я хочу отправлять только при тревоге, когда соединение ВЫКЛЮЧАЕТСЯ. Вы можете сказать, что достаточно просто, просто используйте action.execOnlyOnceEveryInterval.

Но хитрость в том, что как только соединение восстанавливается ...

NOTICE: Connection FOO is UP.

... Я хочу сбросить это состояние, чтобы, как только оно снова выйдет из строя, я немедленно регистрировал / ретранслировал повторное появление состояния DOWN.

Я вижу локальные переменные в RainerScript, но это бесполезно. Мне нужны глобальные переменные для сохранения состояния между сообщениями.

Помогите?

Если вы используете 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. В документации указано, что вместо этого вы должны использовать «глобальные переменные». Однако поиск в документации по глобальным переменным не дает никакой информации о том, как можно использовать эти мифические «глобальные переменные».