Ad Widget

Collapse

Расширяем snmp lld скриптами

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Jimson
    Senior Member
    • Jan 2008
    • 1327

    #136
    Originally posted by izuchator
    проблема решилась маленьким переделыванием скрипта, убрана последняя запитая в json после чего все заработало.
    "запятая", и я же вам сразу указал на эту проблему и дал ссылку на решение

    Comment

    • izuchator
      Junior Member
      • Mar 2014
      • 17

      #137
      еще вопросик
      фильтр ,Type:161,
      получаю:

      "{#IFTAGS}":",ae5.0,Type:161,AdminStatus:up
      "{#IFTAGS}":",ae5,Type:161,AdminStatus:up

      как изменить фильтр, чтоб отсеять значение с точкой и получить:

      "{#IFTAGS}":",ae5,Type:161,AdminStatus:up

      Comment

      • Jimson
        Senior Member
        • Jan 2008
        • 1327

        #138
        Регулярное выражение писать, что то вроде
        Code:
        ,ae\d+,
        и забить на "type", раз оно ничего не идентифицирует, но это костыли. Что бы удобно и быстро помечать интерфейсы маршрутизаторов которые нужно мониторить я придумал {$LLD_IF_FLAG}, а что бы мониторить сабы, которые появляются только в точке PE-CE придумал {$MPLS_VRF_RD}. Если ни флаги ни RD не устраивают, то только регулярные выражения, или грубый {$LLD_IF_REGEX} или гибкие встроенные в заббикс, но с последними будут некоторые сложности при модификации шиблона, так как ссылка на используемое регулярное выражение есть по сути опция элемента данных - правила дискаверинга.

        P.S. разбирайтесь и включайте фантазию, zabbix в первую очередь инструмент, а не тупорылое готовое решение

        Comment

        • PacMan
          Junior Member
          • Sep 2014
          • 14

          #139
          С zabbix опыт маленький, хотелось бы задать вопрос.
          Попробовал установить скрипт.
          1) Исправил скрипт из поста 46(перекопировал последний кусок "Output in JSON format")
          2) Скопировал скрипт в папку externalscripts, прописал chmod a+x на файл скрипта.
          3) Добавил regexp
          4) Импортировал шаблон и привязал его к хосту
          5) Макросы комьюнити и порта на хосте прописал.
          Элементы данных не находит.

          При запуске
          Скрипта из командной строки пишет следующие:

          Usage: /usr/lib/zabbix/externalscripts/script.pl <host> <port> <community> [RD] [flag] [regex] at /usr/lib/zabbix/externalscripts/script.pl line 10.

          Comment

          • Jimson
            Senior Member
            • Jan 2008
            • 1327

            #140
            Originally posted by PacMan
            Usage: /usr/lib/zabbix/externalscripts/script.pl <host> <port> <community> [RD] [flag] [regex] at /usr/lib/zabbix/externalscripts/script.pl line 10.
            Code:
            die "Usage: $0 <host> <port> <community> [RD] [flag] [regex]\n" if scalar @ARGV < 3;
            Проверка очень простая: менее трех аргументов. Шаблон + глобальные регекспы я тоже прикладывал.

            Code:
            zbx[root]:.../LLD # perl cisco_ifmib.pl x.x.1.1 161 public | wc -l
                 170

            Comment

            • PacMan
              Junior Member
              • Sep 2014
              • 14

              #141
              Originally posted by Jimson
              Code:
              die "Usage: $0 <host> <port> <community> [RD] [flag] [regex]\n" if scalar @ARGV < 3;
              Проверка очень простая: менее трех аргументов. Шаблон + глобальные регекспы я тоже прикладывал.

              Code:
              zbx[root]:.../LLD # perl cisco_ifmib.pl x.x.1.1 161 public | wc -l
                   170
              Спасибо за помощь.

              Вывод следующий:
              zabbix@ubuntu:~$ perl /usr/lib/zabbix/externalscripts/script.pl 192.168.45.129 161 minsk | wc -l
              0
              Если без параметра "wc -l", то выводит куча текста(интерфейсы, статус и т.д.)

              Получается, на прямую скрипт работает?

              Шаблон и регулярные выражения брал ваши из сообщения 46, только скрипт немного подправил, как вы указали в сообщение 87.

              Имена регулярных выражения с пробелами(LLD IF 64) или с подчеркиваниями(LLD_IF_64) надо вводить?



              На узле в макросах указал
              1. {$SNMP_COMMUNITY} -> Bel
              2. {$SNMP_PORT} -> 161

              На данный момент пишет в "Состояние" - не поддерживается "Инфо" - Value should be a JSON object
              Что-то не так со скриптом?(приложил к посту)
              Attached Files

              Comment

              • Jimson
                Senior Member
                • Jan 2008
                • 1327

                #142
                Originally posted by PacMan
                zabbix@ubuntu:~$ perl /usr/lib/zabbix/externalscripts/script.pl 192.168.45.129 161 minsk | wc -l
                0
                Если без параметра "wc -l", то выводит куча текста(интерфейсы, статус и т.д.)
                Показывайте вывод, можно в приват или ссылку на файлик в dropbox.

                Шаблон и регулярные выражения брал ваши из сообщения 46, только скрипт немного подправил, как вы указали в сообщение 87.
                Вроде все верно.

                Имена регулярных выражения с пробелами(LLD IF 64) или с подчеркиваниями(LLD_IF_64) надо вводить?
                Так как указано в полях "фильтр" у правил дискаверинга в шаблоне.

                На данный момент пишет в "Состояние" - не поддерживается "Инфо" - Value should be a JSON object
                Не нравится ему то что возвращает скрипт. Возможно что скрипт ругается, но в версии 2.0 zabbix ругань скрипта выводил у себя в логе, поэтому форматировал свою ругань (функцию error намулевал), но на сколько я понял толи в 2.2 толи в 2.4 все поломали и теперь zabbix пытается анализировать STDERR как возвращаемое значение.

                Посмотрите внимательно лог сервера, вдруг таки там есть ошибки.
                Скорее всего или сервер не может запустить скрипт (проблемы с правами, path к интерпритатору, кстати, запустите не через perl а просто скрипт, выполнится?) либо проблемы у скрипта - не может соединится с железкой (либо ошибки в передаче параметров и как следствие адрес не тот или вообще каша вместо него, либо не может постать/получить snmp пакетики, например файрволы хитрые мешаются, sulinux-ы и прочие).

                Comment

                • PacMan
                  Junior Member
                  • Sep 2014
                  • 14

                  #143
                  Originally posted by Jimson
                  Показывайте вывод, можно в приват или ссылку на файлик в dropbox.


                  Вроде все верно.


                  Так как указано в полях "фильтр" у правил дискаверинга в шаблоне.


                  Не нравится ему то что возвращает скрипт. Возможно что скрипт ругается, но в версии 2.0 zabbix ругань скрипта выводил у себя в логе, поэтому форматировал свою ругань (функцию error намулевал), но на сколько я понял толи в 2.2 толи в 2.4 все поломали и теперь zabbix пытается анализировать STDERR как возвращаемое значение.


                  Посмотрите внимательно лог сервера, вдруг таки там есть ошибки.
                  Скорее всего или сервер не может запустить скрипт (проблемы с правами, path к интерпритатору, кстати, запустите не через perl а просто скрипт, выполнится?) либо проблемы у скрипта - не может соединится с железкой (либо ошибки в передаче параметров и как следствие адрес не тот или вообще каша вместо него, либо не может постать/получить snmp пакетики, например файрволы хитрые мешаются, sulinux-ы и прочие).
                  Поставил готовое решение на OpenSuse с zabbixa 2.0.9 + неисправленный скрипт из 46 поста, regexp, импортировал шаблон, привязал. Ошибок нет, логи чистые. С path - все ок, без "perl" скрипт запускается. На папку externalscripts и сам файл скрипта стоят правила 0777(через WinSCP прописывал)
                  Но элементов данных нет.
                  Отрубил все хосты с мониторинга, кроме тестового, с этим скриптом, и решил поснифирить, нет пакетов с протоколом SNMP, получается, скрипт он не запускает(проверил с другими шаблонами, SNMP протокол тоже не видит, значит заббикс, как-то не на прямую по SNMP запрашивает).
                  Есть какие-нибудь советы?
                  Last edited by PacMan; 17-02-2015, 16:33.

                  Comment

                  • Jimson
                    Senior Member
                    • Jan 2008
                    • 1327

                    #144
                    А вы уверенны что он вообще запускается забиксом? В моем шаблоне интервал для правил дискаверинга 3 часа, надо или ждать или временно уменьшить интервал, но последнее действие так же не произойдет мгновенно, сервер узнает о том что вы изменили интервал только после обновления кэша конфигурации, как часто обновлять кэш указывается в конфигурации zabbix-сервера.

                    Еще вариант, что бы наверняка, добавить в начало скрипта:

                    open(LOG, ">>", "/tmp/mylldscript.log"); print LOG time, "\n";

                    а в конец скрипта можно добавить еще
                    print LOG encode_json({ data => \@data });

                    или (если не исправляли вывод и не добавляли use JSON можно просто сдампить содержимое хеша добавив в конце скрипта

                    Code:
                    use Data::Dumper;
                    print LOG Dumper(\%json);
                    И еще момент. Правило LLD это по сути обычный элемент данных, соответсвенно у него есть статус и он отображается в интерфейсе. Если там стоит зеленая галочка, то либо сервер получает валидный JSON (но в вашем случае пустой из-за неправильных фильтров или других ошибок), либо элемент-правило еще ни разу не пулилось. Если же статус правила красный, то можно быстро разобраться в проблеме добавив отладку как я написал выше.

                    Comment

                    • PacMan
                      Junior Member
                      • Sep 2014
                      • 14

                      #145
                      Originally posted by Jimson
                      А вы уверенны что он вообще запускается забиксом? В моем шаблоне интервал для правил дискаверинга 3 часа, надо или ждать или временно уменьшить интервал, но последнее действие так же не произойдет мгновенно, сервер узнает о том что вы изменили интервал только после обновления кэша конфигурации, как часто обновлять кэш указывается в конфигурации zabbix-сервера.

                      Еще вариант, что бы наверняка, добавить в начало скрипта:

                      open(LOG, ">>", "/tmp/mylldscript.log"); print LOG time, "\n";

                      а в конец скрипта можно добавить еще
                      print LOG encode_json({ data => \@data });

                      или (если не исправляли вывод и не добавляли use JSON можно просто сдампить содержимое хеша добавив в конце скрипта

                      Code:
                      use Data::Dumper;
                      print LOG Dumper(\%json);
                      И еще момент. Правило LLD это по сути обычный элемент данных, соответсвенно у него есть статус и он отображается в интерфейсе. Если там стоит зеленая галочка, то либо сервер получает валидный JSON (но в вашем случае пустой из-за неправильных фильтров или других ошибок), либо элемент-правило еще ни разу не пулилось. Если же статус правила красный, то можно быстро разобраться в проблеме добавив отладку как я написал выше.
                      Скрипт вроде запускается, поставил время обнаружения 60 секунд, а обновление данных 30, снифером вижу SNMP запросы и ответы, отключаю обнаружения - SNMP пропадает



                      Попробую опять заново Zabbix с нуля накатить 2.0.9 и 2.4 с вашими исправлениями со скриптами.

                      Comment

                      • Jimson
                        Senior Member
                        • Jan 2008
                        • 1327

                        #146
                        Originally posted by PacMan
                        Попробую опять заново Zabbix с нуля накатить 2.0.9 и 2.4 с вашими исправлениями со скриптами.
                        Не мучайтесь с 2.0, ставьте 2.4. В скрипт отладку как я написал выше и ищите где ошибка, явно что то с фильтрами раз скрипт нормально работает из командной строки и снифером вы видите что забиксом он тоже запускается. Напутали где то или в глобальных regexp или в пользовательских макросах, ну или не до конца поняли принцип фильтрации который я реализовал в своем шаблоне.

                        P.S. по умолчанию мой шаблон выгребает только интерфейсы которые "помечены" на оборудовании добавлением в дескрипшен метки '[D]', вы это учли? Если вам нужно просто выгрести все интерфейсы без разбора то надо определить на хосте пользовательский макрос {$LLD_IF_FLAG} со значением 0 или вообще не задавать значение. Обратите внимание на макросы определенные в самом шаблоне.

                        Comment

                        • PacMan
                          Junior Member
                          • Sep 2014
                          • 14

                          #147
                          Originally posted by Jimson
                          Не мучайтесь с 2.0, ставьте 2.4. В скрипт отладку как я написал выше и ищите где ошибка, явно что то с фильтрами раз скрипт нормально работает из командной строки и снифером вы видите что забиксом он тоже запускается. Напутали где то или в глобальных regexp или в пользовательских макросах, ну или не до конца поняли принцип фильтрации который я реализовал в своем шаблоне.

                          P.S. по умолчанию мой шаблон выгребает только интерфейсы которые "помечены" на оборудовании добавлением в дескрипшен метки '[D]', вы это учли? Если вам нужно просто выгрести все интерфейсы без разбора то надо определить на хосте пользовательский макрос {$LLD_IF_FLAG} со значением 0 или вообще не задавать значение. Обратите внимание на макросы определенные в самом шаблоне.
                          Спасибо большое за помощь, на 2.0.9, не был добавлен "{$LLD_IF_FLAG}" в макросы, забил в макрос со значением "0" и все подтянулось.
                          Поставил Debian на него установил 2.4 + исправленный скрипт и все пошло, наверное был какой-то косяк с библиотеками.

                          А возможно как-то в скрипте прописать так, чтобы в графиках он не только тип интерфейса показывал, но и description подтягивал?

                          Comment

                          • Jimson
                            Senior Member
                            • Jan 2008
                            • 1327

                            #148
                            Originally posted by pacman
                            А возможно как-то в скрипте прописать так, чтобы в графиках он не только тип интерфейса показывал, но и description подтягивал?
                            Тип в графиках? Вы имеете в виду название графиков? Ну так измените название графика в шаблоне так как вам надо, вы же видите содержимое json, можете использовать макросы {#....} как вам нравится.

                            Comment

                            • PacMan
                              Junior Member
                              • Sep 2014
                              • 14

                              #149
                              Originally posted by Jimson
                              Тип в графиках? Вы имеете в виду название графиков? Ну так измените название графика в шаблоне так как вам надо, вы же видите содержимое json, можете использовать макросы {#....} как вам нравится.
                              Спасибо, разобрался
                              Сейчас буду пробывать скрипт под SNMP v3 переделать.

                              Comment

                              • Jimson
                                Senior Member
                                • Jan 2008
                                • 1327

                                #150
                                А смысл в v3 для сбора readonly данных? Только нагрузка на агента выше раза в два.

                                Comment

                                Working...