Ad Widget

Collapse

Сравнение строк в триггере

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Alex81
    Junior Member
    • Jan 2020
    • 20

    #1

    Сравнение строк в триггере

    Добрый день!
    Прошу подсказать в чем может быть проблема.
    Есть два элемента данных, получающие текстовые параметры - имя ПК.
    Один элемент берет значение из реестра HKLM\SOFTWARE\zabbix Agent\HostName - через скрипт описанный в userparameters.
    Второй элемент берет текущее имя ПК - system.hostname[host] - и через предобработку (return value+".имядомена".toLowerCase()), приводит его к нижнему реестру и добавляет имя домена.
    В триггере происходит сравнение "(last(/Template OS Windows - PC/reg.info[2,"SOFTWARE\zabbix Agent",3 "HostName"])<>last(/Template OS Windows - PC/system.hostname[host]))>0", нужен сигнал если они не совпадают (при переименовании ПК).
    И всегда происходит срабатывание триггера, якобы имена разные, хотя визуально они одинаковые, в проблеме в оперативных данных видно, что они совпадают.
    Проблема в наличии непечатных символов или разных кодировках?
    Перепробовал кучу вариантов, не могу понять почему при одинаковых значениях элементов срабатывает триггер.
  • Hamardaban
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • May 2019
    • 2713

    #2
    Прочитайте вот это: https://www.zabbix.com/forum/in-russ...bix#post418218

    Comment

    • Alex81
      Junior Member
      • Jan 2020
      • 20

      #3
      Сапасибо за информацию. Ознакомился. Попробовал. Не помогло. Проблема не в том, что есть некий "дребезг" в срабатывании триггера, срабатывает он четко и однозначно, сравнивает два одинаковых текстовых значения, считает их разными и срабатывает.

      Comment

      • Alex_UUU
        Senior Member
        • Dec 2018
        • 541

        #4
        Посмотри в последних данных, что в значениях. Вполне возможно, что где-то лишний пробел или управляющий символ, типа \n

        Comment

        • Alex81
          Junior Member
          • Jan 2020
          • 20

          #5
          Смотрел в последних данных - значения одинаковые. Создал предобработки с регулярным выражением "\S+" и выводом захваченного, соответственно лишних символов попасть не должно было. Выражение триггера составлено на основе рабочего из шаблона "Template App Zabbix Agent" и его я приводил в первом посте. Никак не могу понять, что я упускаю, почему два одинаковых текстовых значения zbx считает разными...

          Comment

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

            #6
            можно сделать финт ушами и сравнивать эти 2 значения в еще одном ЭД с помощью JS. и возвращать tru\false и на этом строить тригер. может JS поможет понять в чем дело - там средства побагаче... и кодировку можно проверить и спец символы..

            Comment

            • Alex81
              Junior Member
              • Jan 2020
              • 20

              #7
              Для информации:
              при использовании в триггере выражения "(last(/Template OS Windows - PC/agent.hostname)<>last(/Template OS Windows - PC/system.hostname[host]))>0" триггер срабатывал всегда, даже при одинаковых значениях, хотя конструкция взята из оригинальных шаблонов, оказалось, что в данном случае нужно использовать "=1" и тогда триггер работает как положено. Таким образом сравнение имени ПК и имени zbx агента у меня получилось.
              (last(/Template OS Windows - PC/agent.hostname)<>last(/Template OS Windows - PC/system.hostname[host]))=1
              При сравнении значения имени агента из реестра с именем ПК, при видимых одинаковых текстовых значениях триггер всегда срабатывал, видимо в данных из реестра были управляющие символы, решилось через "return value.trim()".

              Вывод:
              1 - сравнивать строки от разных элементов в триггере нужно через "=1"
              2 - для уверенности в элементах можно сразу использовать предобработку с методом trim() (усечение управляющих символов и пробелов)
              Last edited by Alex81; 30-11-2021, 14:34.

              Comment

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

                #8
                пардонте - а зачем в тригере использовать конструкцию (v1<>v2)=1 ??? пишите просто v1<>v2 . если истина - тригер сработает.

                Comment

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

                  #9
                  Originally posted by Hamardaban
                  пардонте - а зачем в тригере использовать конструкцию (v1<>v2)=1 ??? пишите просто v1<>v2 . если истина - тригер сработает.
                  То же самое хотел спросить.

                  Comment

                  • Semiadmin
                    Senior Member
                    • Oct 2014
                    • 1625

                    #10
                    А это конвертер триггеров в 5.4 зачем-то преобразует в такую дикую конструкцию выпиленную функцию diff()

                    Comment

                    • Alex81
                      Junior Member
                      • Jan 2020
                      • 20

                      #11
                      Как написал коллега выше, после изменения структуры выражений триггеров в шаблонах по умолчанию используются именно такие конструкции, например:
                      (last(/Template App Zabbix Agent/agent.hostname,#1)<>last(/Template App Zabbix Agent/agent.hostname,#2))>0
                      Соответственно использовал вариант, предложенный создателями системы.

                      Comment

                      Working...