Ad Widget

Collapse

Zabbix. Вопрос по работе функции max()

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Phoen
    Member
    • Aug 2014
    • 60

    #1

    Zabbix. Вопрос по работе функции max()

    Собственно набрел на некоторую странность, которой пока не могу найти объяснение.

    Есть проверка, банальный icmpping[,3] (3 пакета) с интервалом обновления 120 секунд и есть триггер с примерно следующим выражением:

    icmpping[,3].max(180)=0

    Вопрос: почему триггер срабатывает через 2 минуты после наступления события, а не через 3?

    Согласно документации функция max() берет максимальное значение за период времени указанный в выражении. Т.е. поидее генерация события не должна произойти ранее чем через 3 минуты. Или заббикс «понимает» что за период времени указанный в функции есть возможность собрать item лишь один раз и сразу создает событие?

    Интересует в первую очередь природа явления.
    Last edited by Phoen; 11-08-2015, 18:34.
  • Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3404

    #2
    Насколько я понимаю, происходит так.

    Данные поступают с интервалом 2 минуты (120 секунд).
    Каждый раз при поступлении новых данных пересчитывается значение триггера, связанного с элементом данных (item-ом).
    В триггере у Вас функция max(180), т.е. максимальное из всех значений, пришедших за последние 3 минуты. Но множество "всех значений, пришедших за последние 3 минуты", состоит всего из двух элементов: последнего значения (пришедшего только что) и предыдущего (пришедшего 2 минуты назад), поскольку пред-предыдущее пришло 4 минуты назад (т.е. более трёх минут).
    Таким образом, срабатывает всё правильно, что называется, "by design".

    Обычно в случаях, когда мне нужно сравнивать последние несколько значений, я использую конструкцию со знаком "#" (решётка), чтобы явно задать не временной интервал, а количество значений. Т.е. в Вашем случае, если хотите, чтобы срабатывало на третью неудачную проверку, триггер мог бы быть таким:

    icmpping[,3].max(#3)=0

    Правда, тогда он будет срабатывать не через 3 минуты, а через 4.

    Comment

    • Alexei
      Founder, CEO
      Zabbix Certified Trainer
      Zabbix Certified SpecialistZabbix Certified Professional
      • Sep 2004
      • 5654

      #3
      Originally posted by Phoen
      Интересует в первую очередь природа явления.
      Всё очень просто. Zabbix выбирает значения за последние 180 секунд. Так как интервал проверки 120 секунд, то в выборке будут 2 значения: результат последней проверки и проверки двумя минутами ранее.
      Alexei Vladishev
      Creator of Zabbix, Product manager
      New York | Tokyo | Riga
      My Twitter

      Comment

      • Phoen
        Member
        • Aug 2014
        • 60

        #4
        Originally posted by Alexei
        Всё очень просто. Zabbix выбирает значения за последние 180 секунд. Так как интервал проверки 120 секунд, то в выборке будут 2 значения: результат последней проверки и проверки двумя минутами ранее.
        Вот на живом примере.

        Результаты проверок по хосту ( используется элемент данных и выражение триггера описанные выше):

        10-08-2015 12:59:45 1
        10-08-2015 12:57:45 1
        10-08-2015 12:55:45 0
        10-08-2015 12:53:45 0
        10-08-2015 12:51:45 0
        10-08-2015 12:49:45 0
        10-08-2015 12:47:45 1
        10-08-2015 12:45:45 1

        Триггер перешел в статус "проблема" в 12.49:

        10-08-2015 12:57:44 hostname is unavailable by ICMP (internal) OK Чрезвычайная 1д 5ч 3м Нет -
        10-08-2015 12:49:44 hostname is unavailable by ICMP (internal) ПРОБЛЕМА Чрезвычайная 8м Нет -

        Т.е. насколько понимаю по результатам только одной проверки, а по логике описанной вами должен был перейти в 12:51. Или я в чем-то не прав?

        Comment

        • Alexei
          Founder, CEO
          Zabbix Certified Trainer
          Zabbix Certified SpecialistZabbix Certified Professional
          • Sep 2004
          • 5654

          #5
          Originally posted by Phoen
          Или я в чем-то не прав?
          Так делать не безопасно. Zabbix хранит время с наносекундами. Вычисляя мах(120) в 12:49:45 Zabbix скорее всего не затронет предыдущее значение 12:47:45.

          Используйте мах(#2), так будет надёжнее.
          Alexei Vladishev
          Creator of Zabbix, Product manager
          New York | Tokyo | Riga
          My Twitter

          Comment

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

            #6
            Alexei, если я правильно понял Phoen, то у него не max(120), a max(180). Т.е. по-любому должны попадать два значения.
            Хотя, как я уже сказал, я полностью согласен с Вами в том, что надёжнее делать через max(#N).

            Comment

            Working...