Ad Widget

Collapse

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

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • misak
    Junior Member
    • Feb 2013
    • 8

    #16
    Добрый день,

    пробую использовать Ваш скрипт, из командной строки все ОК, а через Заббикс выводит такую ошибку:

    Can't call method "bulkwalk" on unblessed reference at /usr/lib/zabbix/externalscripts/cisco_ifindex.pl line 19.

    Zabbix 2.0.5, CentOS release 6.3 (Final)

    Помогите, в перле совсем не разбираюсь.

    Comment

    • Jimson
      Senior Member
      • Jan 2008
      • 1327

      #17
      ух... если чесно не знаю, пытаюсь погуглить что это за unblessed, что связанное с объектным представлением в перле

      но не понятно почему у вас разное поведение из командной строки и из под забикс-сервера... во первых какая версия перла стоит, во вторых какая версия net-snmp (перловый модуль SNMP:: из этого пакета), в третьих надо понять какого у вас "разный" перл под забиксом и из командной строки....

      сделайте простой скрипт, из одной строки:
      #!/usr/bin/perl -V
      дайте ему права на выполнение и запустите, затем сделайте в забиксе итем "внешняя проверка" типа "текст" и пропишите в качестве ключа этот скрипт, сравните то что попадет в этот итем с тем что вам выдает скрипт из командной строки

      Comment

      • Jimson
        Senior Member
        • Jan 2008
        • 1327

        #18
        вообщем есть подозрения что у вас не создается объект "сессии" по какой то причине, вот тут:

        $sess = new SNMP::Session(DestHost => "$ARGV[0]:$ARGV[1]",
        Community => "$ARGV[2]",
        UseNumeric => 1,
        NonIncreasing => 1,
        UseLongNames => 1);

        проверка ошибок там минимальная, я просто проверяю сгенерилась ли ошибка на уровне самого объекта, но видимо этого не достаточно и в вашем случае вы получаете в $sess не объект, а какую то херню

        вы или не правильно описали итем дискаверинга и скрипт вызывается с неправильными параметрами или... я без понятия что у вас происходит такое
        Last edited by Jimson; 26-02-2013, 16:52.

        Comment

        • misak
          Junior Member
          • Feb 2013
          • 8

          #19
          Спасибо за ответ, просто очень странно что там может быть. Попробовал как в предыдущем посте создать тестовый файл, нормально отработал. От рута команда:
          su -c "/usr/lib/zabbix/externalscripts/cisco_ifindex.pl 10.х.х.х 161 community" zabbix

          отрабатывает на ура. Непонятно как заббикс умудряется так накосячить.

          Comment

          • misak
            Junior Member
            • Feb 2013
            • 8

            #20
            Ну короче как всегда - забыл прописывать макросы для хоста

            Comment

            • Jimson
              Senior Member
              • Jan 2008
              • 1327

              #21
              я тут только что обнаружил что далеко не всякое железо нормально работает с GetBulk
              печалька, надо переписать выгребание индексов через старый добрый GetNext

              Comment

              • Demyan
                Junior Member
                • Mar 2006
                • 3

                #22
                Originally posted by okyhb
                Перешли с 2.0.2 на 2.0.3, используем snmp lld по ifalias (никаких скриптов, всё стандартное). И тоже, если название прототипа графика включает в себя snmpindex и snmpvalue, при изменении ifalias получаем новый график. И при этом старый график у хоста удалить вручную нельзя, так как он из темплейта.

                На support.zabbix.com такую проблему не нашёл. Неужели проявляется только у нас?
                Аналогично, при смене дескрипшина изменяется и имя элемента данных, но старые триггеры и графики остаются и соответственно плодятся при каждом изменении дескрипшина.

                Comment

                • zalex_ua
                  Senior Member
                  Zabbix Certified Trainer
                  Zabbix Certified SpecialistZabbix Certified Professional
                  • Oct 2009
                  • 1286

                  #23
                  Originally posted by OKyHb
                  Перешли с 2.0.2 на 2.0.3, используем SNMP LLD по ifAlias (никаких скриптов, всё стандартное). И тоже, если название прототипа графика включает в себя SNMPINDEX и SNMPVALUE, при изменении ifAlias получаем новый график. И при этом старый график у хоста удалить вручную нельзя, так как он из темплейта.

                  На support.zabbix.com такую проблему не нашёл. Неужели проявляется только у нас?
                  Originally posted by Demyan
                  Аналогично, при смене дескрипшина изменяется и имя элемента данных, но старые триггеры и графики остаются и соответственно плодятся при каждом изменении дескрипшина.
                  Похоже исправлено тут https://support.zabbix.com/browse/ZBX-5968

                  Comment

                  • Jimson
                    Senior Member
                    • Jan 2008
                    • 1327

                    #24
                    хм... интересно каким образом
                    в смысле интересно как это можно было исправить без изменений в структуре базы данных, ведь они не стали их вносить в стейбл ветке?

                    Comment

                    • Demyan
                      Junior Member
                      • Mar 2006
                      • 3

                      #25
                      Originally posted by zalex_ua
                      Похоже исправлено тут https://support.zabbix.com/browse/zbx-5968
                      помогло. спасибо за наводку

                      Originally posted by jimson
                      хм... интересно каким образом
                      в смысле интересно как это можно было исправить без изменений в структуре базы данных, ведь они не стали их вносить в стейбл ветке?
                      этот фикс решает проблему с залипанием устаревших триггеров/графиков, но не решает проблему глобально - т.е. при смене дескрипшина создаётся новый график и соответственно в комплексный экран он не попадет

                      Comment

                      • zalex_ua
                        Senior Member
                        Zabbix Certified Trainer
                        Zabbix Certified SpecialistZabbix Certified Professional
                        • Oct 2009
                        • 1286

                        #26
                        Originally posted by Jimson
                        хм... интересно каким образом
                        в смысле интересно как это можно было исправить без изменений в структуре базы данных, ведь они не стали их вносить в стейбл ветке?
                        Fix Version/s: 2.0.5rc1, 2.1.0 (trunk)
                        2.0.5rc1 значит в общем то 2.0.5 что есть стабильной веткой и уже выпущен 2.0.5 релиз.

                        Originally posted by Demyan
                        помогло. спасибо за наводку


                        этот фикс решает проблему с залипанием устаревших триггеров/графиков, но не решает проблему глобально - т.е. при смене дескрипшина создаётся новый график и соответственно в комплексный экран он не попадет
                        Это отдельная тема. Можно тут и на форуме найти дисскусию и в Жире кажется.

                        Comment

                        • Jimson
                          Senior Member
                          • Jan 2008
                          • 1327

                          #27
                          то что оно фиксед в 2.0.5 я как раз видел, потому и "спросил" о том как это можно было пофиксить в стейбле учитывая что в рамках одной релизной ветки структуру базы обычно не меняли

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

                          В корне пофиксить проблему можно только добавлением "ключа" в тригеры и графики по принципу итемов, а это переписывание кучи кода и серверного и ui и, естественно, добавление новых колонок в таблицы.

                          Comment

                          • Alexsmr
                            Junior Member
                            • Mar 2013
                            • 4

                            #28
                            Здравствуйте, уважаемые. Хотел прикрутить как раз внешнюю проверку cisco_ifindex.pl Для начала попробовал его выполнить без прикручивания. Привожу чатсть кода, до момента где возникает ошибка при выполнении.

                            #!/usr/bin/perl -w

                            $TAGSEP = ",";

                            use SNMP;

                            die "Usage: $0 <host> <port> <community>" if ($#ARGV < 2);

                            $sess = new SNMP::Session(DestHost => "$ARGV[0]:$ARGV[1]",
                            Community => "$ARGV[2]",
                            UseNumeric => 1,
                            NonIncreasing => 1,
                            UseLongNames => 1);

                            die $sess->{ErrorStr} if ($sess->{ErrorNum});

                            ($ifDescr, $ifAdmin, $ifAlias) = $sess->bulkwalk(0, 500, [
                            ['.1.3.6.1.2.1.2.2.1.2'],
                            ['.1.3.6.1.2.1.2.2.1.7'],
                            ['.1.3.6.1.2.1.31.1.1.1.18'],
                            ]);

                            die $sess->{ErrorStr} if ($sess->{ErrorNum});

                            Указывает на ошибку в последней строке . Делаю следующее:

                            perl cisco_ifindex.pl 10.x.x.163 161 public
                            Unknown user name at cisco_ifindex.pl line 23.
                            Подскажите в чем причина. Поднимаю на FreeBSD.

                            Comment

                            • Jimson
                              Senior Member
                              • Jan 2008
                              • 1327

                              #29
                              "Unknown user name" в виде SNMP ошибки намекает что скрипт пытается лезть по SNMPv3, а сессию выше мы создает только с указанием комьюнити, т.е. только под SNMPv1 и SNMPv2c.

                              Если вам нужно работать по SNMPv3 то надо поправить скрипт, передавать в него не комьюнити, а юзеров, пароли и что там еще нужно, соответсвенно если кол-во параметров увелится то ниже по тексту так же надо будет сдвинуть индексы в списке @ARGV.

                              P.S. Недавно воевал со сбором SNMP через слабенькие и ненадежные каналы, столкнулся с множеством проблем связанных с использованием bulkwalk, всяко тестился, пока остановился на том что сильно уменьшил размер выборки и подробил опрос. Заодно при создании сессии явно указываю версию SNMP, ретри и таймаут (перловый модуль, хоть и является частью net-snmp, не использует параметры snmp.conf).

                              Code:
                              msk-be-srv-zbx VPN-455 [root]:/ # /usr/local/etc/zabbix/externalscripts/cisco_ifindex.pl 172.18.4.5 161 xxxxxxxxxxxxx
                              {"data":[
                              {"{#IFINDEX}":"3001","{#IFDESCR}":"radio1","{#IFTAGS}":",radio1,Type:71,AdminStatus:up,Physical,Counter64,","{#IFALIAS}":"018-02495_Root:R1"},
                              {"{#IFINDEX}":"2002","{#IFDESCR}":"ge2","{#IFTAGS}":",ge2,Type:6,AdminStatus:up,Physical,Counter64,","{#IFALIAS}":""},
                              {"{#IFINDEX}":"3","{#IFDESCR}":"vlan1","{#IFTAGS}":",vlan1,Type:135,AdminStatus:up,Physical,Counter64,","{#IFALIAS}":""},
                              {"{#IFINDEX}":"3003","{#IFDESCR}":"radio3","{#IFTAGS}":",radio3,Type:71,AdminStatus:up,Physical,Counter64,","{#IFALIAS}":"018-02495_Root:R3"},
                              {"{#IFINDEX}":"3002","{#IFDESCR}":"radio2","{#IFTAGS}":",radio2,Type:71,AdminStatus:up,Physical,Counter64,","{#IFALIAS}":"018-02495_Root:R2"},
                              {"{#IFINDEX}":"2001","{#IFDESCR}":"ge1","{#IFTAGS}":",ge1,Type:6,AdminStatus:up,Physical,Counter64,","{#IFALIAS}":""}]}
                              Attached Files

                              Comment

                              • Alexsmr
                                Junior Member
                                • Mar 2013
                                • 4

                                #30
                                Спасибо огромное, Jimson, работает без проблем. К забиксу прикрутил, тоже без проблем работает. Только не получается фильтровать по {#IFTAGS}.Подскажите, каким должно быть регулярное выражение, чтобы фильтровать только Ethernet, вдобавок, не закрытые административно. Фильтровать только Ethernet получается выражением (Eth|eth). Логического операнда "И" не нашел.

                                Comment

                                Working...