Ad Widget

Collapse

Использование функции last() при создании триггера

Collapse
This topic has been answered.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Maksim_4.24
    Junior Member
    • Feb 2025
    • 12

    #1

    Использование функции last() при создании триггера

    Добрый день.
    Необходимо создать триггер с множественным вложением используя функцию last().

    Первое значение проверяет состояние компьютера - не на связи.
    Второе значение проверяет причину падения, через "или" нужно перечислить проблемы. Варианты типов 1,2,3,4,5.
    Правильно ли используются фигурные скобки и как сократить выражение? Как написать триггер правильно?

    last(/10.10.10.20/pc.state,#1)=0 and {last(/10.10.10.20/pc.state.cause,#1)=1 or last(/10.10.10.20/pc.state.cause,#1)=2 or last(/10.10.10.20/pc.state.cause,#1)=3 or last(/10.10.10.20/pc.state.cause,#1)=4 or last(/10.10.10.20/pc.state.cause,#1)=5}

  • Answer selected by Maksim_4.24 at 04-02-2025, 09:30.
    Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3404

    Originally posted by Maksim_4.24
    Поэтому нужен триггер с обработкой любое из этих 7 состояний, но исключающее все остальные.
    Теперь понятно, спасибо.
    Code:
    last(/10.10.10.20/pc.state,#1)=0 and
    ((last(/10.10.10.20/pc.state.cause,#1)>=1 and last(/10.10.10.20/pc.state.cause,#1)<=6) or last(/10.10.10.20/pc.state.cause,#1)=15)
    Заодно обращу внимание, что если возможен вариант со значением "-1", то в Zabbix'е тип данных должен быть не "Numeric (unsigned)", а "Numeric (float)", иначе он такое значение принять не сможет.

    Comment

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

      #2
      1) Нет, неправильно.
      2) Зависит от того, что вы хотите, а также от используемой версии Zabbix.

      Например, для чего вообще проверять в триггере второе из значений, если перечисляются все возможные значения? Или, всё же, не все (тогда какие значения вообще возможны?)?

      Comment

      • Maksim_4.24
        Junior Member
        • Feb 2025
        • 12

        #3
        Zabbix 6.4.11
        Второе из значений проверяет причину падения, а не просто на связи, не на связи. Пример привел придуманный, устройство не пк.
        1 тип падения - нет питания
        2 тип падения - обрыв
        3 тип
        4 тип
        5 тип
        Last edited by Maksim_4.24; 03-02-2025, 14:50.

        Comment

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

          #4
          За версию - спасибо, понятно.
          Эти пять значений для второго параметра (с единицы до пятёрки) уже и так были перечислены ранее. Я имел в виду - возможны ли какие-то ещё значения, помимо этих? Ибо если нет, то и проверять нет смысла. Если же возможны, но остальные значения за пределами этого диапазона, то проще не перебирать каждое значение отдельно, а сформулировать условие, например, так:
          Code:
          last(/10.10.10.20/pc.state,#1)=0 and
          (last(/10.10.10.20/pc.state.cause,#1)>=1 and last(/10.10.10.20/pc.state.cause,#1)<=5)
          Круглые скобки, обрамляющие вторую строку, здесь избыточны, они только для большей читабельности.

          Comment

          • Maksim_4.24
            Junior Member
            • Feb 2025
            • 12

            #5
            Спасибо за ответ.
            Нашелся еще один тип падения, он под номером 15, как его добавить в триггер? То есть типы 1, 2, 3, 4, 5 и 15.

            Comment

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

              #6
              Originally posted by Maksim_4.24
              Спасибо за ответ.
              Нашелся еще один тип падения, он под номером 15, как его добавить в триггер? То есть типы 1, 2, 3, 4, 5 и 15.
              Вы так и не ответили, какие значения этого параметра возможны ещё; есть ли смысл вообще их перечислять в условии триггера?
              Скажем, еслидля параметра pc.state.cause есть какое-нибудь значение, условно говоря, "0" или "-1", которое для вас означает "падения нет, просто связь порвалась, а так всё работает и срабатывать не надо", то проще условие триггера записать следующим образом:
              Code:
              last(/10.10.10.20/pc.state,#1)=0 and last(/10.10.10.20/pc.state.cause,#1)>0
              Если же триггер должен срабатывать при любом значении параметра pc.state.cause, то и в условии триггера ему делать нечего.

              Comment

              • Maksim_4.24
                Junior Member
                • Feb 2025
                • 12

                #7
                Информация по сетевому оборудованию Huawei, каждое значение value 1, 2, 3, 4, 5, 6, 15 необходимо обрабатывать через триггер. Каждое значение обрабатывается через скрипт, на выходе получаются числа, которые можно подставить в last().

                Числа 7, 8, 9, 10, 11, 12, 13, 18, 30, 31, 32, 33, 34, 35, 37, -1 точно НЕ должно попадать в триггер!

                /**
                * These return codes from SNMP:
                * The value (1) indicates that the reason is LOS(Loss of signal),
                * The value (2) indicates that the reason is LOSi(Loss of signal for ONUi) or LOBi (Loss of burst for ONUi),
                * The value (3) indicates that the reason is LOFI(Loss of frame of ONUi),
                * The value (4) indicates that the reason is SFI(Signal fail of ONUi),
                * The value (5) indicates that the reason is LOAI(Loss of acknowledge with ONUi),
                * The value (6) indicates that the reason is LOAMI(Loss of PLOAM for ONUi),
                * The value (7) indicates that the reason is deactive ONT fails,
                * The value (8) indicates that the reason is deactive ONT success,
                * The value (9) indicates that the reason is reset ONT,
                * The value (10) indicates that the reason is re-register ONT,
                * The value (11) indicates that the reason is pop up fail,
                * The value (13) indicates that the reason is dying-gasp,
                * The value (15) indicates that the reason is LOKI(Loss of key synch with ONUi),
                * The value (18) indicates that the reason is deactived ONT due to the ring,
                * The value (30) indicates that the reason is shut down ONT optical module,
                * The value (31) indicates that the reason is reset ONT by ONT command,
                * The value (32) indicates that the reason is reset ONT by ONT reset button,
                * The value (33) indicates that the reason is reset ONT by ONT software,
                * The value (34) indicates that the reason is deactived ONT due to broadcast attack,
                * The value (35) indicates that the reason is operator check fail,
                * The value (37) indicates that the reason is a rogue ONT detected by itself,
                * The value (-1) indicates that the query fails.
                */

                Такой вариант слишком избыточен, можно ли упростить?
                last(/10.10.10.20/pc.state,#1)=0 and
                last(/10.10.10.20/pc.state.cause,#1)=1

                last(/10.10.10.20/pc.state,#1)=0 and
                last(/10.10.10.20/pc.state.cause,#1)=2

                last(/10.10.10.20/pc.state,#1)=0 and
                last(/10.10.10.20/pc.state.cause,#1)=3

                last(/10.10.10.20/pc.state,#1)=0 and
                last(/10.10.10.20/pc.state.cause,#1)=4

                last(/10.10.10.20/pc.state,#1)=0 and
                last(/10.10.10.20/pc.state.cause,#1)=5

                last(/10.10.10.20/pc.state,#1)=0 and
                last(/10.10.10.20/pc.state.cause,#1)=6

                last(/10.10.10.20/pc.state,#1)=0 and
                last(/10.10.10.20/pc.state.cause,#1)=15

                Поэтому нужен триггер с обработкой любое из этих 7 состояний, но исключающее все остальные.

                Прошу прощения, если вас запутал.
                Last edited by Maksim_4.24; 04-02-2025, 09:07.

                Comment

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

                  #8
                  Originally posted by Maksim_4.24
                  Поэтому нужен триггер с обработкой любое из этих 7 состояний, но исключающее все остальные.
                  Теперь понятно, спасибо.
                  Code:
                  last(/10.10.10.20/pc.state,#1)=0 and
                  ((last(/10.10.10.20/pc.state.cause,#1)>=1 and last(/10.10.10.20/pc.state.cause,#1)<=6) or last(/10.10.10.20/pc.state.cause,#1)=15)
                  Заодно обращу внимание, что если возможен вариант со значением "-1", то в Zabbix'е тип данных должен быть не "Numeric (unsigned)", а "Numeric (float)", иначе он такое значение принять не сможет.

                  Comment

                  Working...