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