Ad Widget

Collapse

snmpget next

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • poxeron
    Member
    • Sep 2020
    • 52

    #1

    snmpget next

    Здравствуйте.
    Нуждаюсь в Вашей помощи.

    делаю запрос по snmpwalk - получаю простыню , как и должен
    делаю snmpget - на тот же OID - получаю "No Such Instance currently exists at this OID". Хотя хотелось бы простыню ))

    собственно вопрос, можно ли штатными средствами решить проблему или вариантов нет , и остается только Click image for larger version

Name:	image_2021-02-08_180402.png
Views:	324
Size:	123.8 KB
ID:	418367 смотреть в сторону внешних проверок и скриптов ?
  • Hamardaban
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • May 2019
    • 2713

    #2
    ... потому что не полностью указали запрашиваемый oid - начало забыли ....
    для более полного понимания укажите в snmpwalk ключик -On и посмотрите на цифровые oid

    Comment

    • poxeron
      Member
      • Sep 2020
      • 52

      #3
      Спасибо за участие. Но в этом и вопрос. Если делаю запрос на родитеский OID (.1.3.6.1.2.1.25.6.3.1.2) - snmpwalk получает всю простыню значений.

      Но по всей видимости, Заббикс использует snmp_get и вместо простыни значений я получаю ошибку о не нахождении. Если же добавляю .№ - то могу получить только одно взятое взачение , вместо всей простыни. Но мне нужны именно все значения (((
      Click image for larger version

Name:	image_2021-02-08_220650.png
Views:	286
Size:	138.0 KB
ID:	418378
      Click image for larger version

Name:	image_2021-02-08_221040.png
Views:	267
Size:	27.0 KB
ID:	418379

      Comment

      • nik-sn
        Junior Member
        • Mar 2020
        • 12

        #4
        А разве snmpget умеет данные брать из поддерева OID?
        snmpwalk смотрит указанный OID и то, что есть за ним. snmpget запрашивает данные именно в указанном идентификаторе, если там данных нет, то всё.
        Так что у вас всё верно, так и должно работать.

        Comment

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

          #5
          Как верно отметил nik-sn, snmpget использует запрос GetRequest, в то время как snmpwalk - GetNextRequest (причём, итеративно).
          Честно говоря, не очень понятно, при чём тут Zabbix.
          Могу лишь отметить, что если очень хочется получить Zabbix-ом целиком список (т.е. какую-то таблицу), то можно сделать вид, что хотите делать низкоуровневое обнаружение (LLD, см. тут), и в качестве oid-а указать приведённую там конструкцию вида
          Code:
          discovery[<LLD_макрос>,<OID>]
          Получите результат в виде JSON-а (массив пар с индексами и значениями), который затем с помощью предобработки можно преобразовать в тот вид, который нужен именно вам.

          Например, для получения списка томов сервера NetWare можно указать:
          Code:
          discovery[{#SNMPVALUE},1.3.6.1.4.1.23.2.28.2.14.1.2]
          Результат:
          Code:
          [{"{#SNMPINDEX}":"1","{#SNMPVALUE}":"SYS"},{"{#SNMP INDEX}":"2","{#SNMPVALUE}":"_ADMIN"},{"{#SNMPINDEX }":"3","{#SNMPVALUE}":"VOL1"},{"{#SNMPINDEX}":"4"," {#SNMPVALUE}":"VOL2"}]
          Click image for larger version

Name:	screenshot-2021-02-09_01.png
Views:	333
Size:	20.1 KB
ID:	418397
          Last edited by Kos; 09-02-2021, 09:54.

          Comment


          • poxeron
            poxeron commented
            Editing a comment
            Спасибо большое.
        • Hamardaban
          Senior Member
          Zabbix Certified SpecialistZabbix Certified Professional
          • May 2019
          • 2713

          #6
          про snmp-get я думал это очевидно что он показывает одно значение..
          вот более интересно для меня что запрос по неполному текстовому oid срабатывает!
          видимо мне стоит перечитать мануалы :-)

          Comment

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

            #7
            Originally posted by Kos
            Могу лишь отметить, что если очень хочется получить Zabbix-ом целиком список (т.е. какую-то таблицу), то можно сделать вид, что хотите делать низкоуровневое обнаружение (LLD, см. тут), и в качестве oid-а указать приведённую там конструкцию вида
            Code:
            discovery[<LLD_макрос>,<OID>]
            Получите результат в виде JSON-а (массив пар с индексами и значениями), который затем с помощью предобработки можно преобразовать в тот вид, который нужен именно вам.
            Для полноты картинки (мало ли кому ещё понадобится что-то похожее).
            Для данного примера (с которого начал автор темы) можно применить тот же приём: использовать обычный элемент данных с типом "SNMP agent", но в качестве OID-а указать следующее:
            Code:
            discovery[{#UBSOFTWARE},1.3.6.1.2.1.25.6.3.1.2]
            Zabbix, видя такую конструкцию, делает опрос всей таблицы и преобразует полученные значения в JSON, предназначенный для дискаверинга. Результат получается таким (для краткости ограничимся первыми пятью значениями):
            Code:
            [{"{#SNMPINDEX}":"0","{#UBSOFTWARE}":"adduser-3.115"},{"{#SNMPINDEX}":"1","{#UBSOFTWARE}":"apt-1.4.10"},{"{#SNMPINDEX}":"2","{#UBSOFTWARE}":"apt-transport-https-1.4.10"},{"{#SNMPINDEX}":"3","{#UBSOFTWARE}":"at-3.1.20-3"},{"{#SNMPINDEX}":"4","{#UBSOFTWARE}":"avahi-daemon-0.6.32-2"}]
            Дальнейшая задача состоит в том, чтобы через препроцессинг преобразовать этот JSON в нужный вид (предположим, что надо вывести лишь "простыню" значений - каждое в своей строке, без кавычек).
            Тогда возможны несколько вариантов.

            Вариант 1: понятно и наглядно, но в несколько шагов.
            • Первый шаг: тип "JSONPath", в качестве параметра вставить следующую строку:
            Code:
            $..["{#UBSOFTWARE}"]
            Результат после первого шага:
            Code:
            ["adduser-3.115","apt-1.4.10","apt-transport-https-1.4.10","at-3.1.20-3","avahi-daemon-0.6.32-2"]
            • Второй шаг: "Trim", в качестве параметра - следующая строка (т.е. обрезать с начала и с конца все квадратные скобки и кавычки):
            Code:
            ["]
            Результат после второго шага:
            Code:
            adduser-3.115","apt-1.4.10","apt-transport-https-1.4.10","at-3.1.20-3","avahi-daemon-0.6.32-2
            • Третий шаг: "Replace", заменить все пары кавычек с запятой между ними на перевод строки:
            Code:
            ","
            (заменить на)
            Code:
            \n
            Результат после третьего шага:
            Code:
            adduser-3.115
            apt-1.4.10
            apt-transport-https-1.4.10
            at-3.1.20-3
            avahi-daemon-0.6.32-2
            Вариант 2: Делается, по сути, то же самое, но через JavaScript в один шаг (хотя менее наглядно, несмотря на комментарии). Создаётся шаг препроцессинга с типом "JavaScript", вставляется следующий код:
            Code:
            //transform source string into JSON object
            val_json=JSON.parse(value);
            //transform JSON back to string but filtering only with "{#UBSOFTWARE}" members
            val_str=JSON.stringify(val_json,['{#UBSOFTWARE}']);
            //Find & replace:
            //1) remove the left brace, LLD macro name, colon and opening quote mark (globally)
            //2) remove the closing quote mark and right brace, replace comma by a NL (globally)
            //3) remove the first left square bracket (opening the list)
            //4) clean the tail: remove the last closing quote mark, right brace and right square bracket (closing the list)
            val_str=val_str.replace(/{"{#UBSOFTWARE}":"/g,'');
            val_str=val_str.replace(/"},/g,'\n');
            val_str=val_str.replace(/\[/,'');
            return val_str.replace(/"}\]/,'');
            На выходе имеем тот же результат.

            Comment

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

              #8
              Мда, что-то я в последнем примере перемудрил с JavaScript-ом. Оно, конечно, работает; но гораздо проще сделать так:
              Code:
              //transform source string into JSON object
              val_json=JSON.parse(value);
              //extract needed parts only into array
              val_array=[];
              for (i in val_json) {
                val_array.push(val_json[i]["{#UBSOFTWARE}"]);
              }
              //return array as a string using NL as a separator
              return val_array.join('\n');
              Подозреваю, что знатоки JavaScript-а могут ещё более оптимизировать - например, подсказать какую-нибудь встроенную функцию для извлечения нужных данных из массива объектов в массив строк, чтобы избежать цикла.

              Comment

              Working...