Ad Widget

Collapse

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

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

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

    а есть ли возможности этот скрипт ускорить - у меня несколько десятков тысяч интерфейсов и он отрабатывает за полторы минуты, а у заббикса таймаут 30 секунд, соответственно большая часть не грузится

    Comment

    • Jimson
      Senior Member
      • Jan 2008
      • 1327

      #92
      Originally posted by misak
      День добрый,

      а есть ли возможности этот скрипт ускорить - у меня несколько десятков тысяч интерфейсов и он отрабатывает за полторы минуты, а у заббикса таймаут 30 секунд, соответственно большая часть не грузится
      Это не скрипт надо ускорять, а IO, иначе говоря snmp агент. Можно увеличить "размер" bulk запросов в скрипте "bulkwalk(0, 10" вместо 10 попробовать поставить 20-30-40-...
      Это поднимет скорость опроса, но большинство агентов имеют ограничение на размер bulkwalk.

      Есть и другой вариант. Использовать для LLD не "внешнюю проверку", а "траппер". В вашем случае это будет правильнее. Скрипт при этом будет запускаться кроном, а результат отсылать через zabbix_sender API.

      Comment

      • misak
        Junior Member
        • Feb 2013
        • 8

        #93
        Спасибо большое за ответ, про траппер читал, но как-то страшно - ни разу не делал. Буду смотреть ...

        Comment

        • Jimson
          Senior Member
          • Jan 2008
          • 1327

          #94
          Originally posted by misak
          Спасибо большое за ответ, про траппер читал, но как-то страшно - ни разу не делал. Буду смотреть ...
          Для больших объемов данных траппер лучшее решение во всех смыслах.
          Я использую активно и для сложных SNMP опросов и для сортировки snmptraps. Это родной API Zabbix, называть его "zabbix sender" вообщем то не правильно, этим протоколом активные прокси сбрасывают данные на сервер и активные агенты.
          При этом есть интересный момент, если хост с элементом данных типа траппер опрашивается через прокси, то либо скрипт должен посылать JSON с данными на адрес прокси, и при этом "метка" в JSON будет 'request' => ' sender data', либо вы с тем же успехом можете слать данные напрямую на сервер, но надо указать 'request => 'history data' и 'host' => <proxy hostname>, ну а в 'data' => массив данных (хешей), как описанно в документации.

          Вообщем рекомендую.

          Comment

          • Gotcha
            Junior Member
            • May 2014
            • 23

            #95
            RicoX, у меня пока всего 13 свитчей, мне наворотов не надо, взял твой скрипт, из терминала отдает что нужно, в zabbix'e пока тишина. Как проверить-то оно вообще работает? Ты писал что можешь выложить шаблоны, можно посмотреть?

            upd:

            Похоже такая же беда с проверкой валидности json, там лишняя запятая в конце ((
            Подскажите, пожалуйста, как это поправить? Выше по теме видел вариант, но ничего не понял.
            Last edited by Gotcha; 23-05-2014, 11:16.

            Comment

            • Rico-X
              Junior Member
              • Jun 2012
              • 22

              #96
              Originally posted by gotcha
              ricox, у меня пока всего 13 свитчей, мне наворотов не надо, взял твой скрипт, из терминала отдает что нужно, в zabbix'e пока тишина. Как проверить-то оно вообще работает? Ты писал что можешь выложить шаблоны, можно посмотреть?

              Upd:

              Похоже такая же беда с проверкой валидности json, там лишняя запятая в конце ((
              Подскажите, пожалуйста, как это поправить? Выше по теме видел вариант, но ничего не понял.
              Исправленный скрипт во вложении, чуть переработана структура, к нему же выкладываю пару шаблонов для примера работы.
              Attached Files

              Comment

              • yukra
                Senior Member
                • Apr 2013
                • 1359

                #97
                Originally posted by Rico-X
                Исправленный скрипт во вложении, чуть переработана структура, к нему же выкладываю пару шаблонов для примера работы.
                Бегло глянут скрипт. Пара советом: 1)используйте /dev/shm вместо /tmp
                2)
                Code:
                yukra@yukra-ThinkPad ~ $ cat 1.txt 
                1
                2
                3
                yukra@yukra-ThinkPad ~ $ cat 1.txt  | grep -v '1\|2'
                3
                yukra@yukra-ThinkPad ~ $

                Comment

                • Rico-X
                  Junior Member
                  • Jun 2012
                  • 22

                  #98
                  Originally posted by yukra
                  Бегло глянут скрипт. Пара советом
                  Вы правы, особой отладкой не занимался, можно еще вместо && использовать &, тогда скрипт отработает намного быстрее т.к. выполняться запросы будут в несколько потоков, но на некоторых свичах в примерно 5% запросов получим пустой вывод, забил на скорость убрал многопоточность, но может на других будет удобней включить.

                  Comment

                  • alex82
                    Junior Member
                    • Sep 2013
                    • 6

                    #99
                    Originally posted by Rico-X
                    Исправленный скрипт во вложении, чуть переработана структура, к нему же выкладываю пару шаблонов для примера работы.
                    Ошибка так и осталась "Value should be a JSON object"

                    zabbix 2.2.3

                    Comment

                    • Rico-X
                      Junior Member
                      • Jun 2012
                      • 22

                      #100
                      Originally posted by alex82
                      Ошибка так и осталась "Value should be a JSON object"

                      zabbix 2.2.3
                      У меня 2.2.3, что говорит если запустить вручную на любой свич и вывод проверить через http://jsonlint.com/ ?

                      Comment

                      • alex82
                        Junior Member
                        • Sep 2013
                        • 6

                        #101
                        Originally posted by Rico-X
                        У меня 2.2.3, что говорит если запустить вручную на любой свич и вывод проверить через http://jsonlint.com/ ?
                        Вручную на свитч дает вывод вида:

                        {"{#IFINDEX}":"10103","{#IFDESCR}":"Port "Gi0/3"","{#IFTAGS}":",Port "Gi0/3",Type:6,ifOper:1,","{#IFALIAS}":"_Upl_SWCORE1_"} ,

                        При проверке:

                        "data": [
                        {
                        "{#IFINDEX}": "10103",
                        "{#IFDESCR}": "Port "Gi0/3"",
                        "{#IFTAGS}": ",Port "Gi0/3",Type:6,ifOper:1,",
                        "{#IFALIAS}": "_Upl_SWCORE1_"
                        },

                        ]
                        }

                        Parse error on line 1:
                        "data": [ {
                        ^
                        Expecting '{', '['

                        Comment

                        • Rico-X
                          Junior Member
                          • Jun 2012
                          • 22

                          #102
                          Проверил, получаю правильный вывод вида:
                          Code:
                          ./snmp-lld.sh public 10.7.10.100
                          {"data":[
                          {"{#IFINDEX}":"1","{#IFDESCR}":"Port 1/0/1","{#IFTAGS}":",Port 1/0/1,Type:6,ifOper:up,","{#IFALIAS}":"Samokisha_18a"},
                          {"{#IFINDEX}":"673","{#IFDESCR}":"Port 0/3/48","{#IFTAGS}":",Port 0/3/48,Type:161,ifOper:down,","{#IFALIAS}":""}
                          ]}
                          При проверке Valid JSON

                          Похоже вы не полностью скопировали скрипт, не хватает { перед "data":

                          Comment

                          • Rico-X
                            Junior Member
                            • Jun 2012
                            • 22

                            #103
                            Originally posted by alex82
                            ...
                            Еще вижу у вас SNMP вывод отображает цифровой, установите и включите snmp-mibs-downloader

                            Comment

                            • alex82
                              Junior Member
                              • Sep 2013
                              • 6

                              #104
                              Originally posted by Rico-X
                              Проверил, получаю правильный вывод вида:
                              Code:
                              ./snmp-lld.sh public 10.7.10.100
                              {"data":[
                              {"{#IFINDEX}":"1","{#IFDESCR}":"Port 1/0/1","{#IFTAGS}":",Port 1/0/1,Type:6,ifOper:up,","{#IFALIAS}":"Samokisha_18a"},
                              {"{#IFINDEX}":"673","{#IFDESCR}":"Port 0/3/48","{#IFTAGS}":",Port 0/3/48,Type:161,ifOper:down,","{#IFALIAS}":""}
                              ]}
                              При проверке Valid JSON

                              Похоже вы не полностью скопировали скрипт, не хватает { перед "data":
                              root@zabbix-city:/usr/local/share/zabbix/externalscripts# ./snmp-lld.sh XXX 10.50.254.6
                              {"data":[
                              {"{#IFINDEX}":"10001","{#IFDESCR}":"Port "Fa0/1"","{#IFTAGS}":",Port "Fa0/1",Type:6,ifOper:1,","{#IFALIAS}":"_USR_BUH_BIG_"} ,
                              {"{#IFINDEX}":"10002","{#IFDESCR}":"Port "Fa0/2"","{#IFTAGS}":",Port "Fa0/2",Type:6,ifOper:1,","{#IFALIAS}":"_USR_BUH_BIG_"} ,
                              {"{#IFINDEX}":"10003","{#IFDESCR}":"Port "Fa0/3"","{#IFTAGS}":",Port "Fa0/3",Type:6,ifOper:1,","{#IFALIAS}":"_USR_BUH_BIG_"} ,
                              {"{#IFINDEX}":"10004","{#IFDESCR}":"Port "Fa0/4"","{#IFTAGS}":",Port "Fa0/4",Type:6,ifOper:1,","{#IFALIAS}":"_USR_BUH_BIG_"} ,
                              .
                              .
                              {"{#IFINDEX}":"10047","{#IFDESCR}":"Port "Fa0/47"","{#IFTAGS}":",Port "Fa0/47",Type:6,ifOper:1,","{#IFALIAS}":"_WIFI_ACCESS_P OINT_"},
                              {"{#IFINDEX}":"10048","{#IFDESCR}":"Port "Fa0/48"","{#IFTAGS}":",Port "Fa0/48",Type:6,ifOper:1,","{#IFALIAS}":"_WIFI_ACCESS_P OINT_"},
                              {"{#IFINDEX}":"10101","{#IFDESCR}":"Port "Gi0/1"","{#IFTAGS}":",Port "Gi0/1",Type:6,ifOper:1,","{#IFALIAS}":"_________UPLINK _TO_CORE"},
                              {"{#IFINDEX}":"10102","{#IFDESCR}":"Port "Gi0/2"","{#IFTAGS}":",Port "Gi0/2",Type:6,ifOper:1,","{#IFALIAS}":"_________UPLINK "},
                              {"{#IFINDEX}":"10103","{#IFDESCR}":"Port "Gi0/3"","{#IFTAGS}":",Port "Gi0/3",Type:6,ifOper:2,","{#IFALIAS}":"__"},
                              {"{#IFINDEX}":"10104","{#IFDESCR}":"Port "Gi0/4"","{#IFTAGS}":",Port "Gi0/4",Type:6,ifOper:2,","{#IFALIAS}":"__"}

                              Прикреплен скриншот проверки на JsonLint
                              Attached Files

                              Comment

                              • Rico-X
                                Junior Member
                                • Jun 2012
                                • 22

                                #105
                                Originally posted by alex82
                                ...
                                Ага вот оно в чем проблема, получается в дескрипшене у вас "Fa0/1" уже есть кавычки из за чего JSON не может распарсить вывод.
                                В качестве временного решения попробуйте поменять строку
                                Code:
                                $snmpwalk -v2c -c $1 $2 .1.3.6.1.2.1.31.1.1.1.1 -O Unq |  awk -F . '{print $13}' | sed -e 's/\ /%Port /' > $tmp/ifDescr.$fl \
                                на
                                Code:
                                $snmpwalk -v2c -c $1 $2 .1.3.6.1.2.1.31.1.1.1.1 -O Unq |  awk -F . '{print $13}' | sed -e 's/\"/_/g' | sed -e 's/\ /%Port /' > $tmp/ifDescr.$fl \
                                Можно сделать красивее и исключить любые спесцимволы из строки, но я с телефона пожалуй написать не осилю, надо проверять.

                                Comment

                                Working...