Ad Widget

Collapse

Заменить полученные значения (ip адреса) из JSON тестовым именем

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • fractal90
    Senior Member
    • Jun 2019
    • 177

    #1

    Заменить полученные значения (ip адреса) из JSON тестовым именем

    У меня есть правило обнаружения которое собирает значения параметров канала (потери, задержка, джиттер, dst ip адрес) и создает прототипы элементов, но загвоздка в том, в ответе от сервера нет имени устройства (hostname)

    Имя прототипа выглядит так Route [{#LOCAL} => {#REMOTE} to {#DST_IP}]: Jitter.

    Значение получается такое

    Route [mpls => mpls to 192.168.101.218]: Jitter

    Можно ли как то сделать замену нескольких ip адресов в тестовое значение? допустим 192.168.101.218 в r1.mpls-gw

    Наверное это делается как то в предобработке LLD? если у кого нибудь есть пример, я был бы признателен

    В моем понимание это что то:

    если {#DST_IP} = 192.168.101.218 тогда 192.168.101.218 заменить на r1.mpls-gw
  • Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3404

    #2
    Тут основной вопрос - откуда брать те значения, на которые вы хотите заменять.
    Наилучший вариант - это если бы они содержались в какой-то из таблиц, которые тоже можно опросить по SNMP.
    Если такой нет, то остаются варианты - либо явно прописывать таблицу заменяемых значений прямо в коде JavaScript (на шаге предобработки JSON-а, используемого для LLD), либо выносить такую таблицу в пользовательский макрос. Примеры можно посмотреть здесь (ссылка), смотрите ответы Gregory Chalenko.
    Last edited by Kos; 09-12-2024, 12:37.

    Comment

    • fractal90
      Senior Member
      • Jun 2019
      • 177

      #3
      Originally posted by Kos
      Тут основной вопрос - откуда брать те значения, на которые вы хотите заменять.
      Наилучший вариант - это если бы они содержались в какой-то из таблиц, которые тоже можно опросить по SNMP.
      Если такой нет, то остаются варианты - либо явно прописывать таблицу заменяемых значений прямо в коде JavaScript (на шаге предобработки JSON-а, используемого для LLD), либо выносить такую таблицу в пользовательский макрос. Примеры можно посмотреть здесь (ссылка), смотрите ответы Gregory Chalenko.
      к сожалению их не откуда брать

      Вот такие данные я с api дергаю
      Code:
      {
      "data":[
      {
      "local_color":"mpls",
      "count":11,
      "remote_color":"mpls",
      "dst_ip":"192.168.101.218",
      "state":"Up",
      "remote_system_ip":"10.80.254.101",
      "tunnel_color":"mpls:mpls",
      "jitter":"0.00",
      "loss_percentage":"0.00",
      "latency":"0.00",
      "tloc_state":"up"
      },
      {
      "local_color":"mpls",
      "count":11,
      "remote_color":"mpls",
      "dst_ip":"192.168.101.219",
      "state":"Up",
      "remote_system_ip":"10.80.254.102",
      "tunnel_color":"mpls:mpls",
      "jitter":"0.00",
      "loss_percentage":"0.00",
      "latency":"0.00",
      "tloc_state":"up"
      }
      ]
      В правиле LLD
      Click image for larger version

Name:	image.png
Views:	100
Size:	12.7 KB
ID:	495794
      В фильтре я значения с API запроса преобразовываю в макрос
      Click image for larger version

Name:	image.png
Views:	48
Size:	17.8 KB
ID:	495795
      Попробовал в препроцессинг java добавить такое, но видимо в map var я должен как то по другому указывать переменные?
      Code:
      var map = {
      '192.168.101.218' : 'gw1',
      '192.168.101.219' : 'gw2'
      };
      var value = JSON.parse(value);
      
      for (var i in value) {
      value[i]['{#DST_IP_NEW}'] = map[value[i]['{#DST_IP}']];
      }
      
      return JSON.stringify(value);​​
      Last edited by fractal90; 12-12-2024, 09:37.

      Comment

      • Alex_UUU
        Senior Member
        • Dec 2018
        • 541

        #4
        Взаббиксе "ограниченный" джаваскрит, там даже ссылка есть на сайт, где можно проверить и там есть перечень работающих операторов.

        Comment

        • fractal90
          Senior Member
          • Jun 2019
          • 177

          #5
          Originally posted by Alex_UUU
          Взаббиксе "ограниченный" джаваскрит, там даже ссылка есть на сайт, где можно проверить и там есть перечень работающих операторов.
          А где ссылка? скрипт взят с https://support.zabbix.com/browse/ZB...MzgwNi4yLjAuMA..

          Comment

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

            #6
            Originally posted by fractal90

            Попробовал в препроцессинг java добавить такое, но видимо в map var я должен как то по другому указывать переменные?
            Code:
            var map = {
            '192.168.101.218' : 'gw1',
            '192.168.101.219' : 'gw2'
            };
            var value = JSON.parse(value);
            
            for (var i in value) {
            value[i]['{#DST_IP_NEW}'] = map[value[i]['{#DST_IP}']];
            }
            
            return JSON.stringify(value);​
            Вроде бы, выглядит почти нормально. Только мне кажется, что вместо строки
            Code:
            value[i]['{#DST_IP_NEW}'] = map[value[i]['{#DST_IP}']];
            ​
            нужно указать так:
            Code:
            value[i]['{#DST_IP_NEW}'] = map[value[i]['dst_ip']];
            ​
            ​Что получается, если пробовать нажимать на кнопку тестирования предобработки?

            Comment

            • fractal90
              Senior Member
              • Jun 2019
              • 177

              #7
              Originally posted by Kos
              Вроде бы, выглядит почти нормально. Только мне кажется, что вместо строки
              Code:
              value[i]['{#DST_IP_NEW}'] = map[value[i]['{#DST_IP}']];
              нужно указать так:
              Code:
              value[i]['{#DST_IP_NEW}'] = map[value[i]['dst_ip']];
              ​Что получается, если пробовать нажимать на кнопку тестирования предобработки?
              Да, Вы верно написали, вот так нормально заработало
              Code:
              value[i]['{#DST_IP_NEW}'] = map[value[i]['dst_ip']
              , такой вопрос, а чтобы значения которые я не указал в таблице map подставлялись как есть надо что то такого?
              Code:
              value[i]['{#DST_IP_NEW}'] = map[value[i]['dst_ip']||'dst_ip' ['dst_ip'];

              Comment


              • Kos
                Kos commented
                Editing a comment
                У вас в обоих примерах после строки
                map[value[i]['dst_ip']
                осталась незакрытой квадратная скобка.
            • Kos
              Senior Member
              Zabbix Certified SpecialistZabbix Certified Professional
              • Aug 2015
              • 3404

              #8
              Originally posted by fractal90
              такой вопрос, а чтобы значения которые я не указал в таблице map подставлялись как есть надо что то такого?
              Code:
              value[i]['{#DST_IP_NEW}'] = map[value[i]['dst_ip']||'dst_ip' ['dst_ip'];
              Чтобы подставлялись "как есть" какие именно значения? Выберите нужное поле и используйте его; например, для поля dst_ip:
              Code:
              value[i]['{#DST_IP_NEW}'] = map[value[i]['dst_ip']] || value[i]['dst_ip'];
              либо просто какую-то строковую константу:
              Code:
              value[i]['{#DST_IP_NEW}'] = map[value[i]['dst_ip']] || 'Unknown';
              Last edited by Kos; 15-12-2024, 22:55.

              Comment

              Working...