Ad Widget

Collapse

Триггер на содержание в лог файле Linux определенных строк

Collapse
This topic has been answered.
X
X
 
  • Time
  • Show
Clear All
new posts
  • nevidomyy
    Junior Member
    • Nov 2021
    • 11

    #1

    Триггер на содержание в лог файле Linux определенных строк

    Приветствую. Я только погрузился в тему Zabbix и никак не могу решить вопрос.
    Работает активный агент на Linux и мониторит /var/log/syslog - на наличие в событии фразы "Device Serial Number"
    Реализовано это так:
    Элемент данных Zabbix активный агент
    Ключ: [logrt"/var/log/syslog","Device Serial Number","UTF-8",100]
    В целом все хорошо, я получаю ту строку, которую и хотел. Это срока вида :
    Nov 30 10:15:30 MyPC kernel: [11111.343443] Device Serial Number: 12345678

    Могу повесить триггер на наличие в строке Device Serial Number, но это не совсем то что мне надо.
    Нужен тригер на несоответствие Device Serial Number: , в нашем примере это 12345678 - списку из серийных номеров (например 10 серийных номеров в списке)
    Можно ли как-то сделать триггер, который проверит - есть ли серийный из строки Nov 30 10:15:30 MyPC kernel: [11111.343443] Device Serial Number: 12345678 , в заранее созданном списке(в дальнейшем редактируемом), если в списке номера нет - то выдать предупреждение.

    Я постарался выразиться максимально ясно, надеюсь вы поймете, что именно я хочу и поможете это реализовать. Спасибо
  • Answer selected by nevidomyy at 01-12-2021, 13:08.
    Semiadmin
    Senior Member
    • Oct 2014
    • 1625

    Ну у меня же не так регулярка написана: .*Serial\sNumber:\s(?:{$MACRO})$
    Проверьте правильность регулярки на https://regex101.com, как советовал коллега wins.
    И всю регулярку в функции стоит взять в кавычки.

    Comment

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

      #2
      у вас будут трудности в «сравнении со списком» т.к. в забиксе нет стандартного хранилища для списков… сравнение с одним значением в триггере - без проблем. ну или делать много триггеров через lld каждый из которых сравнивает полученное значение с значением просунутым через lld например из эд типа скрипт…

      Comment

      • nevidomyy
        Junior Member
        • Nov 2021
        • 11

        #3
        Originally posted by Hamardaban
        у вас будут трудности в «сравнении со списком» т.к. в забиксе нет стандартного хранилища для списков… сравнение с одним значением в триггере - без проблем. ну или делать много триггеров через lld каждый из которых сравнивает полученное значение с значением просунутым через lld например из эд типа скрипт…
        Вариант с множеством триггеров также будет нормальным вариантом решения моей проблемы. Спасибо.
        Попробую покрутить lld и мой элемент данных.

        Comment

        • Semiadmin
          Senior Member
          • Oct 2014
          • 1625

          #4
          Делаете user macro и загоняете список серийников в него, разделяя | , например: 12345678|23456789|87654321
          Потом вставляете этот макрос в регулярку в триггерной функции regexp (в 5.4 find), например:
          .*Serial\sNumber:\s(?:{$MACRO})$

          Comment


          • Hamardaban
            Hamardaban commented
            Editing a comment
            интересный вариант! до упора в длину макроса годное решение

          • Semiadmin
            Semiadmin commented
            Editing a comment
            Начиная с 5.2 макросы длинные, в 4.0 - да, коротковаты. Но можно поставить подряд несколько макросов, и продолжать список в них. Главное, во всех, кроме первого, в начале списка ставить |
        • wins
          Senior Member
          • Sep 2014
          • 307

          #5

          Comment

          • nevidomyy
            Junior Member
            • Nov 2021
            • 11

            #6
            find(ИмяШаблона:logrt["/var/log/syslog","Device Serial Number","UTF-8",100],#1,"regexp",{$SerialList})
            Что я делаю не так?
            В SerialList - значения 12342|123123|323123 и тд

            Comment


            • Semiadmin
              Semiadmin commented
              Editing a comment
              {$SerialList} - недопустимое имя макроса, в нем могут быть только заглавные буквы. Странно, что Zabbix не выругался на это

            • nevidomyy
              nevidomyy commented
              Editing a comment
              Да, все верно - имя макроса - Заглавными буквами
          • wins
            Senior Member
            • Sep 2014
            • 307

            #7
            12342|123123|323123 - не оч похоже на регулярку
            Проверьте свое выражение тут https://regex101.com/

            Comment


            • Semiadmin
              Semiadmin commented
              Editing a comment
              так это часть регулярки
          • nevidomyy
            Junior Member
            • Nov 2021
            • 11

            #8
            Originally posted by Semiadmin
            Делаете user macro и загоняете список серийников в него, разделяя | , например: 12345678|23456789|87654321
            Потом вставляете этот макрос в регулярку в триггерной функции regexp (в 5.4 find), например:
            .*Serial\sNumber:\s(?:{$MACRO})$
            Ниже выражение тригера:
            {Shablon:logrt:["/var/log/syslog/","SerialNumber:","UTF-8",100].regexp({$SERIAL_LIST})}=0
            Это работает, но только если в макросе $SERIAL_LIST указан один серийный номер, если указано 2 и более, то не работает

            Я только пришел в Zabbix и для меня это достаточно сложно. Прошу потерпеть)))))) Спасибо
            *Я понимаю, что куда-то надо прикрутить find для поиска по списку, но не понимаю куда.
            Сам макрос выглядит так $SERIAL_LIST 12343242|1221212|2121212
            Last edited by nevidomyy; 01-12-2021, 09:27.

            Comment

            • Semiadmin
              Senior Member
              • Oct 2014
              • 1625

              #9
              Наверно, как-то так:
              Code:
              find(ИмяШаблона:logrt["/var/log/syslog","Device Serial Number","UTF-8",100],#1,"regexp",".*Serial\sNumber:\s(?:{$SERIAL_LIST})")
              Сорри, кавычки не закрыл
              Last edited by Semiadmin; 01-12-2021, 09:35.

              Comment

              • nevidomyy
                Junior Member
                • Nov 2021
                • 11

                #10
                Originally posted by Semiadmin
                Наверно, как-то так:
                Code:
                find(ИмяШаблона:logrt["/var/log/syslog","Device Serial Number","UTF-8",100],#1,"regexp",".*Serial\sNumber:\s(?:{$SERIAL_LIST})")
                Сорри, кавычки не закрыл
                Вот я пробовал прикрутить этот find, в том числе сейчас попробовал вашу строку - ответ - Некорректное выражение триггера. Может я не туда пытаюсь писать? - Шаблоны-Мой шаблон-Тригеры-Выражение

                Comment

                • Semiadmin
                  Senior Member
                  • Oct 2014
                  • 1625

                  #11
                  Попробуйте использовать конструктор в триггере, не стоит копипастить то, что я написал, это просто в качестве идеи

                  Comment

                  • nevidomyy
                    Junior Member
                    • Nov 2021
                    • 11

                    #12
                    Originally posted by Semiadmin
                    Попробуйте использовать конструктор в триггере, не стоит копипастить то, что я написал, это просто в качестве идеи
                    в конструкторе, в целом нет оператора find. Проблемы начинаются, как только появляется find

                    Comment

                    • Semiadmin
                      Senior Member
                      • Oct 2014
                      • 1625

                      #13
                      Как это - нет функции find ? У вас 5.4 ?

                      Comment

                      • nevidomyy
                        Junior Member
                        • Nov 2021
                        • 11

                        #14
                        Originally posted by Semiadmin
                        Как это - нет функции find ? У вас 5.4 ?
                        Понял, в чем проблема - у меня 4.0.3 - видимо find тут нет - и проблему решить возможно только обновив Zabbix

                        Comment

                        • Semiadmin
                          Senior Member
                          • Oct 2014
                          • 1625

                          #15
                          Originally posted by nevidomyy

                          Понял, в чем проблема - у меня 4.0.3 - видимо find тут нет - и проблему решить возможно только обновив Zabbix
                          Ну я же писал: вставляете этот макрос в регулярку в триггерной функции regexp (в 5.4 find)

                          Comment

                          Working...