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

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

ОШИБКА: Соединение FOO не работает

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

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

ВНИМАНИЕ: Соединение FOO работает.

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

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

Справка?

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

0
ответ дан 5 December 2019 в 06:37

Теги

Похожие вопросы