Ad Widget

Collapse

Триггер. Автозакрытие

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Diesel315
    Senior Member
    • Jan 2020
    • 159

    #1

    Триггер. Автозакрытие

    Всем добрый день!

    Сперва опишу первоначальную задачу и почему родился такой запрос.
    Собственно настроил систему на получение snmptrap. Теперь все трапы (для конкретных узлов/групп узлов) приходит и хранятся в Zabbix.

    Встал вопрос "Что с этим делать?". Тут кстати будут благодарен Вашему опыту, что вы дальше делаете с этим массивом информации?
    Так как пока это все "белый шум", то решил просто перенаправлять поступающие snmptrap в почту. Дальше уже буду анализировать и как то более точечно обрабатывать эту информацию.

    Перенаправлять в почту решил понятно через триггеры.
    То есть приходит snmptrap, формируется триггер и информация уходит в почту, где просто складируется в отдельной директории.
    Соответственно встал вопрос автоматического закрытия этого триггера условно через некоторое время.
    И тут что-то не выходит "каменная чаша" ...


    Сам триггер такой - find(/BAL-ESXI-01.IMM/snmptrap.fallback,#1,"like","Trap")=1
    Операцию закрытия пробовал сделать такую - nodata(/BAL-ESXI-01.IMM/snmptrap.fallback,120,"strict")=1

    Но что-то триггер не закрывается.
    Может кто-нибудь знает как решить задачу?
  • Hamardaban
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • May 2019
    • 2713

    #2
    Не собирайте ненужное!
    Используйте фильтрацию и\или зависимые элементы чтоб отбирать только нужные события. и уж на эти элементы вещайте триггеры (тоже с фильтрами при необходимости).
    для "автозакрытия" есть функция nodata().

    Comment

    • Diesel315
      Senior Member
      • Jan 2020
      • 159

      #3
      Доброе.
      Собственно на первую вашу фразу я ответил сразу в начале - "Так как пока это все "белый шум", то решил просто перенаправлять поступающие snmptrap в почту. Дальше уже буду анализировать и как то более точечно обрабатывать эту информацию."
      Иными словами, чтобы собирать нужное, сперва нужно все собрать и понять, что из этого нужно, а что лишнее. То есть сперва мне просто необходимо накопить объем информации, чтобы потом уже фильтровать.

      nodata не выходит. Выше пример приводит операции закрытия с этой функцией, не срабатывает...

      Comment


      • Hamardaban
        Hamardaban commented
        Editing a comment
        ответили - вот и славно. приятного копания в этой куче ....
        на последок: по поводу несрабатывания условия закрытия триггера - оно срабатывает только тогда, когда основное условие перестает зажигать триггер.
        удачи
    • Kos
      Senior Member
      Zabbix Certified SpecialistZabbix Certified Professional
      • Aug 2015
      • 3404

      #4
      Originally posted by Diesel315
      Сам триггер такой - find(/BAL-ESXI-01.IMM/snmptrap.fallback,#1,"like","Trap")=1
      Операцию закрытия пробовал сделать такую - nodata(/BAL-ESXI-01.IMM/snmptrap.fallback,120,"strict")=1

      Но что-то триггер не закрывается.
      Условие закрытия триггера проверяется только после того как перестаёт выполняться основное условие, при котором триггер срабатывает.
      Другими словами, если у вас в каждом приходящем трапе есть слово "Trap", то первое условие будет выполняться всегда, и триггер никогда не закроется.

      Поэтому проверку на nodata() надо перенести из условия закрытия в условие срабатывания: если nodata(...)=0 (т.е. данные пришли недавно) - то срабатывать. А условие закрытия вообще убрать.

      Comment


      • Diesel315
        Diesel315 commented
        Editing a comment
        Спасибо за попытки помочь.
        Но как-то не понял вашей рекомендации. То есть что будет зажигать и что будет закрывать проблему. Мне в условии возникновения проблемы надо два условия прописать через "and"?
        find(/BAL-ESXI-01.IMM/snmptrap.fallback,#1,"like","Trap")=1 and nodata(/BAL-ESXI-01.IMM/snmptrap.fallback,120,"strict")=0
    • Diesel315
      Senior Member
      • Jan 2020
      • 159

      #5
      на последок: по поводу несрабатывания условия закрытия триггера - оно срабатывает только тогда, когда основное условие перестает зажигать триггер.удачи
      Спасибо за подсказку.
      Скорректировал триггеры на:
      Problem: find(/BAL-ESXI-01.IMM/snmptrap.fallback,2s,"like","Trap")=1
      Recovery: nodata(/BAL-ESXI-01.IMM/snmptrap.fallback,1s)=1

      В целом стало работать как надо.
      Last edited by Diesel315; 27-01-2022, 08:59.

      Comment

      • Kos
        Senior Member
        Zabbix Certified SpecialistZabbix Certified Professional
        • Aug 2015
        • 3404

        #6
        Но как-то не понял вашей рекомендации. То есть что будет зажигать и что будет закрывать проблему. Мне в условии возникновения проблемы надо два условия прописать через "and"?
        Code:
        find(/BAL-ESXI-01.IMM/snmptrap.fallback,#1,"like","Trap")=1 and nodata(/BAL-ESXI-01.IMM/snmptrap.fallback,120,"strict")=0
        Да, примерно так.
        "Примерно" - потому что я не знаю, какие данные у вас туда попадают и как быстро вы хотите гасить триггер.
        Например, если у вас, как я предполагал выше, в каждом приходящем трапе есть слово "Trap", то первая часть условия (с проверкой на наличие этой подстроки) вообще излишняя: она будет выполняться всегда, и её можно убрать (оставив только условие с nodata()).

        Но с закрытием подобного триггера по таймеру есть ещё одна неочевидная засада, о которой я писал неоднократно.
        Когда вы ставите закрывать через 2 минуты, то в случае, если в течение этих двух минут (пока триггер в состоянии "PROBLEM") придёт ещё один трап, реакции на него не будет.
        Например, если у вас настроено действие "отсылать уведомление по e-mail", то вы получите уведомление только о первом трапе.
        Более того, в гипотетической ситуации, когда что-то поломалось и трапы стали приходить с интервалом в 1 минуту, вы вообще получите только одно уведомление, а триггер останется висеть и закрываться не будет.
        Если это то поведение, которого вы хотите, - то всё ОК и беспокоиться не о чем. Но чаще люди хотят получать уведомления о каждом событии, и тогда это становится проблемой.
        В теории, для этого в свойствах триггера есть переключатель "PROBLEM event generation mode", который можно переключить в положение "Multiple" - тогда новое событие "проблема" будет генерироваться каждый раз по приходу нового значения, т.е. даже если триггер уже находится в состоянии "PROBLEM". Беда в том, что такая настройка несовместима с закрыванием по таймеру при помощи функции nodata(), подробности можно найти здесь (заодно и проголосовать за то, чтобы эту недоработку когда-нибудь, наконец, исправили). Чтоб не повторяться, отошлю к предыдущему своему посту на эту тему (линк).

        Альтернатива - закрывать по таймеру при помощи "костыля", который сводится к запуску внешнего скрипта, дёргающего Zabbix API (описано здесь).
        Last edited by Kos; 27-01-2022, 14:12. Reason: поправлена опечатка

        Comment

        • Diesel315
          Senior Member
          • Jan 2020
          • 159

          #7
          Спасибо большое. Очень понятно и подробно написали.

          Comment

          Working...