Ad Widget

Collapse

Почему срабатывает триггер, хотя не должен?

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Yacudzer
    Junior Member
    • Apr 2019
    • 24

    #1

    Почему срабатывает триггер, хотя не должен?

    Всем доброго времени суток.
    Сегодня я обнаружил такую ситуацию.
    Триггер сработал там где, по-идее, не должен был сработать:
    Click image for larger version

Name:	01.png
Views:	70
Size:	19.8 KB
ID:	378715
    Значения при этом пришли такие:
    Click image for larger version

Name:	02.png
Views:	72
Size:	18.4 KB
ID:	378716

    Ну и докучи сам триггер выглядит так:
    Click image for larger version

Name:	03.png
Views:	73
Size:	51.0 KB
ID:	378717

    Т.е. при любом раскладе триггер сработать не должен если пришли нули по всем фазам.
    Почему так?
  • Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3404

    #2
    Потому что данные обрабатываются последовательно, каждое новое поступающее значение независимо от других значений (даже если по факту они были сняты и пришли одновременно).
    Т.е. пришло три новых значения (напряжения на фазах A, B и С, все три по нулям) - для каждого из значений триггер пересчитывается следущим образом:
    • новое значение Ua сравнивается с последними (ещё пока предыдущими!) значениями Ub и Uc (триггер срабатывает по любому из первых двух условий), после чего новое значение Ua попадает в кэш для последующего сохранения в базе данных;
    • новое значение Ub сравнивается с последними значениями Ua (новым из кэша) и Uc (старым) (третье и четвёртое условия триггера выполняются, поэтому он остаётся в состоянии PROBLEM);
    • новое значение Uc сравнивается с последними (уже новыми, только что закэшированными) значениями Ua и Ub (ни одно из условий триггера не выполняется, он закрывается, т.е. переходит в состояние OK).
    К сожалению, такова архитерктура системы Zabbix; соответствующие enhancement requests были зарегистрированы "сто лет назад", но их реализация требует серьёзного перепланирования архитектуры.
    Поэтому пока что единственный вариант - это усложнять триггер ещё больше по одному из направлений:
    • либо проверять не только последние, но и предпоследние значения (и ругаться тогда, когда оба условия срабатывают);
    • либо проверять, что все последние значения, использующиеся для сравнений, "свежие".
    Мне кажется, что второй вариант проще. Для примера, предположим, что у вас проверки проводятся с интервалом раз в 5 минут, а данные собираются неким внешним скриптом (и реально присылаются одновременно). Тогда мы можем добавить в триггер условие, что все три значения пришли в течение последней минуты - например, используя триггерную функцию count():
    Code:
    ({AIISKUE:askue.meter.Ua[4492,6].count(60)}>0 and {AIISKUE:askue.meter.Ub[4492,6].count(60)}>0 and {AIISKUE:askue.meter.Uc[4492,6].count(60)}>0) and
    (...здесь внутри скобок всё ваше текущее выражение триггера...)

    Comment

    • Yacudzer
      Junior Member
      • Apr 2019
      • 24

      #3
      Данные приходят в виде JSON и обрабатываются как Dependent item + Preprocessing, т.е. одновременно.
      Насчет анализа нескольких значений я уже думал, например с помощью функции max(#3). Замедленная на три минуты реакция - это нормально. Однако, Ваше предложение со счетчиком тоже довольно интересно - надо будет протестировать. Спасибо.

      Comment

      Working...