Ad Widget

Collapse

Проблема с триггером

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • buzzlightner
    Junior Member
    • Jul 2014
    • 7

    #1

    Проблема с триггером

    Привет!
    Никак не могу разобраться с работой триггера. Как говорится, то ли лыжи не едут, то ли ... (думаю вы поняли )
    Имеется хост, который проверяется через простую проверку http:

    ({TRIGGER.VALUE}=0 & {srv-pbx02:net.tcp.service[http].last()}=0) | ({TRIGGER.VALUE}=1 & {srv-pbx02:net.tcp.service[http].last()}=1)

    Если веб-сервер в дауне или порт 80 фильтруется, то триггер срабатывает и начинает переключаться в бесконечном цикле (сначала ПРОБЛЕМА, потом ОК, потом опять ПРОБЛЕМА и снова ОК и так далее с каждым новым значением). При этом web-служба в дауне и на графике только нулевые значения. Почему так происходит ума не приложу, пытался играться с функциями avg(), min(), max() - реакция идентичная. Zabbix 2.2 на OpenSuse 12.3.
    Last edited by buzzlightner; 22-07-2014, 04:29. Reason: solved
  • Egor4ik
    Member
    • May 2012
    • 68

    #2
    Originally posted by buzzlightner
    Привет!
    Никак не могу разобраться с работой триггера. Как говорится, то ли лыжи не едут, то ли ... (думаю вы поняли )
    Имеется хост, который проверяется через простую проверку http:

    ({TRIGGER.VALUE}=0 & {srv-pbx02:net.tcp.service[http].last()}=0) | ({TRIGGER.VALUE}=1 & {srv-pbx02:net.tcp.service[http].last()}=1)

    Если веб-сервер в дауне или порт 80 фильтруется, то триггер срабатывает и начинает переключаться в бесконечном цикле (сначала ПРОБЛЕМА, потом ОК, потом опять ПРОБЛЕМА и снова ОК и так далее с каждым новым значением). При этом web-служба в дауне и на графике только нулевые значения. Почему так происходит ума не приложу, пытался играться с функциями avg(), min(), max() - реакция идентичная. Zabbix 2.2 на OpenSuse 12.3.
    Тут наверное надо начать с предистории возникновения такого решения, ибо оно звучит примерно так: "если не работало и начало неработать или если работало и начало рабоать".

    И почему не подходит: {srv-pbx02:net.tcp.service[http].last()}=0

    Comment

    • buzzlightner
      Junior Member
      • Jul 2014
      • 7

      #3
      Originally posted by Egor4ik
      Тут наверное надо начать с предистории возникновения такого решения, ибо оно звучит примерно так: "если не работало и начало неработать или если работало и начало рабоать".
      Хотелось получить плавающий триггер, который сам переключается в ОК и ПРОБЛЕМА в зависимости от последней проверки. Можно усреднить через функцию avg(), но проблема в самом гистерезисе - он почему-то не работает. Настраивал по примерам из статьи.

      Originally posted by Egor4ik
      И почему не подходит: {srv-pbx02:net.tcp.service[http].last()}=0
      Подходит, но это будет одностороннее переключение в ПРОБЛЕМУ.

      Comment

      • Jimson
        Senior Member
        • Jan 2008
        • 1327

        #4
        Что такое "предыстория"?

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

        Хрен с два. Вертикальная черта это ИЛИ и условие это одно, если при вычислении оно равно ИСТИНА, то триггер останется/переключится в состояние "ОК", если же выражение равняется ЛОЖЬ, то триггер переключится/останется в состояние "ПРОБЛЕМА".

        Все просто. Берем из принтера бумагу, одалживаем в бухгалтерии ручку, вспоминаем булеву алгебру и проверяем свое условие триггера. Стыдно должно быть такие вопросы задавать на форумах.

        Comment

        • buzzlightner
          Junior Member
          • Jul 2014
          • 7

          #5
          Originally posted by Jimson
          Что такое "предыстория"?
          Хрен с два. Вертикальная черта это ИЛИ и условие это одно, если при вычислении оно равно ИСТИНА, то триггер останется/переключится в состояние "ОК", если же выражение равняется ЛОЖЬ, то триггер переключится/останется в состояние "ПРОБЛЕМА".
          А если оба условия ЛОЖЬ (и правая часть в скобках и левая)?

          p.s. Форум - место где люди задают вопросы. Тем более вы не предложили ничего в замен.

          Comment

          • Zentarim
            Senior Member
            • Mar 2012
            • 526

            #6
            Originally posted by buzzlightner

            Подходит, но это будет одностороннее переключение в ПРОБЛЕМУ.
            А вы пробовали? Если порт поднимется (последнее значение станет != 0) - то уйдет и проблема.

            Comment

            • buzzlightner
              Junior Member
              • Jul 2014
              • 7

              #7
              Originally posted by zentarim
              А вы пробовали? Если порт поднимется (последнее значение станет != 0) - то уйдет и проблема.
              Проверил - действительно работает. Наверное, из-за простого условия.

              Comment

              • Zentarim
                Senior Member
                • Mar 2012
                • 526

                #8
                Originally posted by buzzlightner
                Проверил - действительно работает. Наверное, из-за простого условия.
                Получается, вы решили свою проблему?

                Comment

                • Jimson
                  Senior Member
                  • Jan 2008
                  • 1327

                  #9
                  Originally posted by buzzlightner
                  А если оба условия ЛОЖЬ (и правая часть в скобках и левая)?
                  Вы это серьезно?

                  Originally posted by buzzlightner
                  p.s. Форум - место где люди задают вопросы.
                  Ну ладно.

                  false or false = false

                  Comment

                  • buzzlightner
                    Junior Member
                    • Jul 2014
                    • 7

                    #10
                    Originally posted by zentarim
                    Получается, вы решили свою проблему?
                    В данном случае да, спасибо! А вот гистерезис остался для меня тайной.

                    Comment

                    • Jimson
                      Senior Member
                      • Jan 2008
                      • 1327

                      #11
                      Originally posted by buzzlightner
                      А вот гистерезис остался для меня тайной.
                      В чем конкретно тайна? Гистерезис реализуется через использование макроса {trigger.value} в условии, но условие триггера при этом остается единым, его надо вычислить целиком что бы узнать в каком состоянии триггер.

                      выражение
                      ( {trigger.value} = 0 & {macro} < 10 ) | ( {trigger.value} = 1 & {macro} < 8 )

                      {macro} = 9, {trigger.value} = 0 => "ok"
                      {macro} = 10, {trigger.value} = 0 => "ПРОБЛЕМА"
                      {macro} = 9, {trigger.value} = 1 => "ПРОБЛЕМА"
                      {macro} = 7, {trigger.value} = 1 => "ok"
                      {macro} = 8, {trigger.value} = 0 => "ok"
                      {macro} = 9, {trigger.value} = 0 => "ok"

                      Где тайна, покажите мне ее.

                      Comment

                      • buzzlightner
                        Junior Member
                        • Jul 2014
                        • 7

                        #12
                        Originally posted by Jimson
                        {macro} = 9, {trigger.value} = 0 => "ok"
                        {macro} = 10, {trigger.value} = 0 => "ПРОБЛЕМА"
                        {macro} = 9, {trigger.value} = 1 => "ПРОБЛЕМА"
                        {macro} = 7, {trigger.value} = 1 => "ok"
                        {macro} = 8, {trigger.value} = 0 => "ok"
                        {macro} = 9, {trigger.value} = 0 => "ok"

                        Где тайна, покажите мне ее.
                        ({TRIGGER.VALUE}=0 & {kmvo-pbx02:net.tcp.service[http].last(0)}=0) | ({TRIGGER.VALUE}=1 & {kmvo-pbx02:net.tcp.service[http].last(0)}=1)

                        сервис падает:
                        {TRIGGER.VALUE}=0, {macro}=0 => ПРОБЛЕМА (срабатывает левая часть ИЛИ)

                        сервис попрежнему лежит:
                        {TRIGGER.VALUE}=1, {macro}=0 => ВОТ здесь туман! Правая и левая часть ИЛИ ложные. Почему происходит переключение в ОК?

                        Comment

                        • Jimson
                          Senior Member
                          • Jan 2008
                          • 1327

                          #13
                          Originally posted by buzzlightner
                          {TRIGGER.VALUE}=1, {macro}=0 => ВОТ здесь туман! Правая и левая часть ИЛИ ложные. Почему происходит переключение в ОК?
                          Потому что триггер это лампочка - если питание есть, то она горит (проблема). Ложное значение триггера это и есть состояние "ОК", лампочка погашена. Ты имея булевый элемент данных поставил взаимоисключающее условие в выражение триггера и добавил условие гистерезиса. В результате получил цветомузыку.

                          Правильное выражение должно быть
                          ({TRIGGER.VALUE}=0 & {kmvo-pbx02:net.tcp.service[http].last(0)}=0) | ({TRIGGER.VALUE}=1 & {kmvo-pbx02:net.tcp.service[http].last(0)}=0)
                          отсюда и следует что гистерезис тут не нужен и выражение сокращается до
                          {kmvo-pbx02:net.tcp.service[http].last(0)}=0

                          Comment

                          • buzzlightner
                            Junior Member
                            • Jul 2014
                            • 7

                            #14
                            Originally posted by jimson
                            Потому что триггер это лампочка - если питание есть, то она горит (проблема). Ложное значение триггера это и есть состояние "ОК", лампочка погашена. Ты имея булевый элемент данных поставил взаимоисключающее условие в выражение триггера и добавил условие гистерезиса. В результате получил цветомузыку.
                            А проблема та не в булевой алгебре В моем понимании триггер был неким механизмом, который переключается только при подводе тока: подвели - вкл, подвели - выкл и т.д. На самом же деле оказалось: подвели - вкл, отвели - выкл. В этом и была концептуальная ошибка. Сейчас переписал все выражения и всё работает на ура! Ваша магия имеет силу! Спасибо!

                            Comment

                            • Egor4ik
                              Member
                              • May 2012
                              • 68

                              #15
                              Всё это вот обсуждение почему-то подтолкнуло размять мозг. В результате мозгового штурма вышла следующая логика:

                              Code:
                              ( {TRIGGER.VALUE}=1 & {PING:icmpping.count(#30,0,"gt")}<22 & {PING:icmpping.max(#30)}>0 ) |
                              ( {TRIGGER.VALUE}=0 & {PING:icmpping.last(0)}=1 & {PING:icmpping.count(#30,0,eq)}>8 )
                              Об чём это я... Получился эдакий отдельный триггер "Service is flapping" указывающий на то что уровень сервиса упал до 70% (21/30 = 0.7).
                              В данном случае на примере icmpping.

                              Первая часть: держит тригер во включеном состоянии пока сервис даёт менее 70% сервиса, но ещё вроде живой.

                              Вторая часть: включает триггер после того, как сервис на 30ти проверках упал до 70%, но при этом сервис рабочий.

                              Я ещё не на 100% уверен что логика правильная, надо бы потестировать. Но, наверное именно это имелось в виду топикстартером.
                              Last edited by Egor4ik; 22-07-2014, 15:01.

                              Comment

                              Working...