Ad Widget

Collapse

Тригер на мониторинг службы

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Kicum
    Member
    • Dec 2019
    • 30

    #1

    Тригер на мониторинг службы

    Доброго дня!
    в тригере использую:
    {*****:service_state[MSSQLSERVER].avg(900)}=6
    через 15 минут выдаст тригер что сервис в down, в дальнейшем планировал расширить список через "or" с использованием значений 1-5, там где служба запускается и тд что бы обеспечить максимальный охват объективных данных. НО! тут на https://github.com/ натянулся на шаблон начал изучать его и обнаружил вот такой синтаксис:
    {*****:service_state[MSSQLSERVER].last(0)}<>0
    получается что если последние значение не 0 то срабатывает тригер? причем мгновенно без задержек?

    Zabbix 4.0.16
  • Hamardaban
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • May 2019
    • 2713

    #2
    Да. И что так удивляет? :-)
    использование функций avg в триггерах обусловлено желанием сгладить ненужные срабатывания при кратковременных "взбрыках" данных.

    Comment

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

      #3
      Я в таких случаях обычно использую конструкцию
      Code:
      max(#2)>0

      Comment

      • Kicum
        Member
        • Dec 2019
        • 30

        #4
        Originally posted by Hamardaban
        Да. И что так удивляет? :-)
        использование функций avg в триггерах обусловлено желанием сгладить ненужные срабатывания при кратковременных "взбрыках" данных.
        я не совсем понял синтаксис last(0)}<>0 было предположение и догадки. Почему собственно и создал тему. А если к примеру выбрать last(300)}<>0 взять интервал в 5 минут, что бы действительно сгладить все кратковременные перебои, я больше удивился что не надо писать портянку из
        Code:
         [B]{*****:service_state[MSSQLSERVER].avg(900)}=6 or {*****:service_state[MSSQLSERVER].avg(900)}=1 or {*****:service_state[MSSQLSERVER].avg(900)}=2 or и тд[/B]
        Originally posted by Kos
        Я в таких случаях обычно использую конструкцию
        Code:
        max(#2)>0
        а можно поподробнее, я еще не совсем освоился в функциях которые можно использовать, пока использую стандартные из шаблонов, но переделываю под себя.

        Comment

        • Hamardaban
          Senior Member
          Zabbix Certified SpecialistZabbix Certified Professional
          • May 2019
          • 2713

          #5
          Зачем предположения и догадки? Читай документацию! https://www.zabbix.com/documentation...gers/functions
          там и примеры есть....

          Comment

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

            #6
            А если к примеру выбрать last(300)}<>0 ...
            Не попадайтесь в эту частую логическую ловушку, читайте документацию!
            Функция last() всегда обрабатывает одно и только одно значение. last(300) - это одно значение, которое было 5 минут назад. Если хотите анализировать не одно, а несколько значений, то используйте другие фукции.
            Code:
            max(#2)>0
            а можно поподробнее, я еще не совсем освоился в функциях
            Тут я опечатался: должно быть не max(#2), а min(#2). Нормальное значение (которое мы обычно ожидаем) - это ноль, все остальные возможные значения - больше нуля. Соответственно, min(#2) - это наименьшее из двух последних значений. Больше нуля оно будет только в случае, когда оба последних значения нулевые (т.е. два подряд не являются "нормальными").

            Comment

            • Semiadmin
              Senior Member
              • Oct 2014
              • 1625

              #7
              Originally posted by Kos
              last(300) - это одно значение, которое было 5 минут назад.
              Ох, хитра функция last(), даже коллега Kos немного ошибается!
              Значение 5 (или около того) минут назад - last(,300), т.е. с time_shift, а время в качестве первого аргумента вообще игнорируется.
              А еще в доке можно прочитать, что она работает с текстом, и тут все еще веселее...

              Comment

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

                #8
                Да, согласен, спасибо Semiadmin за поправку.
                Но главная мысль, тем не менее, верна: last() обрабатывает (и возвращает) только одно значение, а не несколько.

                Comment

                • Kicum
                  Member
                  • Dec 2019
                  • 30

                  #9
                  Originally posted by Hamardaban
                  Зачем предположения и догадки? Читай документацию! https://www.zabbix.com/documentation...gers/functions
                  там и примеры есть....
                  ну так бывает когда не досконально знаешь продукт, да и программистом я не являюсь, вот и получается примерно так, спасибо за наводку.
                  Originally posted by Kos
                  Не попадайтесь в эту частую логическую ловушку, читайте документацию!
                  Функция last() всегда обрабатывает одно и только одно значение. last(300) - это одно значение, которое было 5 минут назад. Если хотите анализировать не одно, а несколько значений, то используйте другие функции.
                  Тут я опечатался: должно быть не max(#2), а min(#2). Нормальное значение (которое мы обычно ожидаем) - это ноль, все остальные возможные значения - больше нуля. Соответственно, min(#2) - это наименьшее из двух последних значений. Больше нуля оно будет только в случае, когда оба последних значения нулевые (т.е. два подряд не являются "нормальными").
                  если я вас правильно понял, то служба возвращает 0 если она работает. То при такой функции min(#2)>0 два раза вернет значение не 0 то отработает тригер?

                  Comment

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

                    #10
                    Originally posted by Kicum
                    если я вас правильно понял, то служба возвращает 0 если она работает. То при такой функции min(#2)>0 два раза вернет значение не 0 то отработает тригер?
                    Именно так. На одно значение (скажем, "Starting" или "Stopping" при необходимости перезапустить службу или при начальной загрузке машины) не реагируем. На два подряд не "Running" - уже реагируем.

                    Comment

                    • Kicum
                      Member
                      • Dec 2019
                      • 30

                      #11
                      Originally posted by Kos
                      Именно так. На одно значение (скажем, "Starting" или "Stopping" при необходимости перезапустить службу или при начальной загрузке машины) не реагируем. На два подряд не "Running" - уже реагируем.
                      а если подставить временной интервал будет min(#2,300)>0 иcходя из описания функции, т.е. он будет проверять за последние 5 минут и если вернулось не 0 то аларм

                      Comment

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

                        #12
                        Originally posted by Kicum
                        а если подставить временной интервал будет min(#2,300)>0 иcходя из описания функции, т.е. он будет проверять за последние 5 минут и если вернулось не 0 то аларм
                        Нет, второй параметр триггерной функции - это не временной интервал, а сдвиг назад. Т.е. в данном случае min(#2,300) будет означать "два последних по состоянию 5 минут назад значения".

                        Если нужно просто за последние 5 минут (без учёта количества), то это будет min(300) либо (что то же самое) min(5m). Только надо учитывать, что если, скажем, у вас интервал опроса выставлен в те же 5 минут, то он не будет выдерживаться с абсолютной точностью: может оказаться и 300 секунд, и 301, и даже больше. И может оказаться, что проверяются не два последних значения (как это ожидалось), а только одно (самое последнее, поскольку предыдущее было более 5 минут назад). Собственно, поэтому я обычно и указываю явно количество (через #).

                        Comment

                        • Kicum
                          Member
                          • Dec 2019
                          • 30

                          #13
                          огромное спасибо, дали много пищи для размышления, и вектор куда двигаться!

                          Comment

                          • merle1379
                            Junior Member
                            • Mar 2020
                            • 3

                            #14
                            But if you substitute the time interval it will be min (# 2,300)> 0 based on the description of the function, i.e. he will check for the last 5 minutes and if not 0 returns then the alarm goes onmcdvoice login


                            Comment

                            • manleykeedan
                              Junior Member
                              • Apr 2020
                              • 5

                              #15
                              Originally posted by Kicum
                              Доброго дня!
                              в тригере использую:
                              {*****:service_state[MSSQLSERVER].avg(900)}=6
                              через 15 минут выдаст тригер что сервис в down, в дальнейшем планировал расширить список через "or" с использованием значений 1-5, там где служба запускается и тд что бы обеспечить максимальный охват объективных данных. НО! тут на Nox Vidmate VLC натянулся на шаблон начал изучать его и обнаружил вот такой синтаксис:
                              {*****:service_state[MSSQLSERVER].last(0)}<>0
                              получается что если последние значение не 0 то срабатывает тригер? причем мгновенно без задержек?

                              Zabbix 4.0.16

                              огромное спасибо, дали много пищи для размышления, и вектор куда двигаться!
                              Last edited by manleykeedan; 08-04-2020, 10:03.

                              Comment

                              Working...