Ad Widget

Collapse

Flap detection(помогите настроить триггер)

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • ramix
    Junior Member
    • May 2013
    • 5

    #1

    Flap detection(помогите настроить триггер)

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

    К примеру, есть стандартный триггер из шаблона Template JMX Jeneric:

    {Template JMX Generic:jmx["java.lang:type=GarbageCollector,name=PS Scavenge",CollectionCount].last(0)}<{Template JMX Generic:jmx["java.lang:type=GarbageCollector,name=PS MarkSweep",CollectionCount].last(0)}

    Мне необходимо видоизменить его так, чтобы он детектировал проблему только в том случае, если его условие сохраняется в течение 5 минут.
    Т.е. если первое выражение больше второго в течение 5 минут - проблема.

    Буду рад советам, а то я уже совсем выбился из сил и отчаялся найти решение.
    Last edited by ramix; 17-09-2014, 23:06. Reason: решил задачу через workaround
  • ramix
    Junior Member
    • May 2013
    • 5

    #2
    Неожиданное решение

    Прочитав всевозможные мануалы и перерыв не одну кучу документации, нашел способ решить первопричинную проблему - множественная генерация событий, которые регистрируют проблему и тут же сообщают о её решении.

    Я использовал механизм эскалации в actions.
    Он позволяет задать операции, которые будут выполняться после срабатывания триггера, заранее определив шаги и интервалы, с которыми эти операции будут происходить.

    В первую очередь, я решил задать severity - warning только для тех триггеров, для которых частые срабатывания в порядке вещей, которые генерируют большой объем неинформативных сообщений, не несущих особой смысловой нагрузки. Для них я создал отдельный Action, в условиях которого явно указывалось значение Severity = warning и значение триггера - problem. После этого, на вкладке Operations я указал Default operation step duration в 300 (5 минут), после чего создал две операции, в рамках каждой из которых отсылаются сообщения. Первая операция выполняется на шаге с 2 по 3, step duration для неё - 43200(12ч). Вторая операция выполняется с 3 по 0 шаг с точно такой же step duration - 43200(12ч).

    Вот как это выглядит:


    Что же происходит с триггерами, на срабатывание которых выполняется этот Action? Если триггер переходит в состояние problem, и пребывает в нем меньше 5 минут, после чего меняет состояние на OK - оповещение не отсылается. Срабатывает шаг 1-2 с default operation step duration в 5 минут, который не задан в Operations нашего action. Соответственно, не происходит ничего. Если же триггер переходит в состояние problem, и пребывает в нем больше 5 минут, выполняется шаг 2-3, который отсылает сообщение пользователю Developers, сообщая о проблеме, после чего переходит в состояние ожидания, которое продлится 12 часов. Если в течение 12 часов с момента отправки сообщения триггер не изменил своё состояние на ОК, начинает выполнение шаг 3-0. Он отсылает видоизмененное сообщение, в котором явно указывается, что это повторное уведомление, которое отправлено из-за того, что в течение 12 часов проблема не была решена. Подобные сообщения будут генерироваться до тех пор, пока триггер не перейдет в состояние ОК.

    Что вышло в итоге - оповещения о срабатывании триггеров стали более информативными, поскольку теперь они уведомляют о том, что проблема действительно есть и это не ошибочное срабатывание. Не потребовалось изменять каждый из триггеров, внося правки в выражения. Удалось решить задачу, которая описана в заглавном сообщении этой темы - когда в триггере сравниваются значения двух разных item, и необходимо, чтобы триггер переходил в состояние проблемы только если результат сравнения будет актуален в течение определенного промежутка времени.

    Надеюсь, мой опыт окажется полезным

    Comment

    • s0me_n00b
      Junior Member
      • Mar 2011
      • 6

      #3
      Я обычно решаю подобное через avg(300):
      if ВЫРАЖЕНИЕ.avg(300) > УСТАВКА

      Можно и не по avg(), а по min()/max()

      Гистерезиса, правда, это не задаёт, но и используется не совсем по вашей задаче.
      А по заданию гистерезиса есть готовый пример в документации - https://www.zabbix.com/documentation...B7%D0%B8%D1%81
      Last edited by s0me_n00b; 18-09-2014, 06:45.

      Comment

      Working...