Владимир, здравствуйте ! Столкнулся со следующей проблемой.
Коротко опишу работу системы:
С помощью zabbix мониторю программный комплекс на предмет ошибок. Если происходит ошибка в комплексе, то соответствующая запись попадает в elastic с кодом ошибки и названием модуля, где произошла ошибка. Соответственно, если ошибок нет, то и записей нет.
В zabbix создал шаблон, настроил правила обнаружения. Каждое правило это ошибка. В каждом правиле выполняется внешняя проверка и в качестве параметра скрипту передаю имя хоста и код ошибки для запроса в elastic. Далее с помощью утилиты я обрабатываю данные и отправляю их в zabbix в формате json с полями в виде
{
"data":[
{#MACROS}: ...
]
}
Так же к каждому правилу я настроил прототип элемента данных и прототип триггера.
Триггер срабатывает по вычисляемому выражению (простая 1). Соответственно сколько модулей с ошибками, столько триггеров и сработает.
А проблема в следующем. Когда ошибка перестает писаться в elastic (ошибку исправили или сама пропала), из elastic приходит пустой json, а значит и в zabbix приходит пустой json. Но проблема в zabbix остается висеть и история в виде графика пишется "1", хотя данных реально нет. Следовательно и триггер не может сработать на восстановление. Не понимаю, почему в отсутствии данных, zabbix пишет историю так, как будто они есть ? Может есть настройки в zabbix ?
У меня в json есть поле {#STATUS} где собственно лежит 1. Я попробовал подсунуть туда 0. Триггер отработал на восстановление, все ок.
Разобрался с проблемой, может кому-то поможет. В заббиксе есть настройка "Период сохранения порерянных ресурсов". Видимо заббикс так устроен, что когда данные на вход перестают поступать, то он берет их из этого источника. А так-как по умолчанию период стоит 30 дней, то и проблема висеть будет долго. Я изменил настройку на 1 час и если данных нет более 1 часа, то триггер закрывается автоматически. Потом, если данные с ошибками начнут поступать, то триггер сработает как положено.