Ad Widget

Collapse

json, jscript в препроцессинге и zabbix_js

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • IgorB
    Member
    • Apr 2016
    • 58

    #1

    json, jscript в препроцессинге и zabbix_js

    Коллеги, добрый день

    Наставьте, плиз, на путь истинный, киньте примерчиком.
    Задача - обработать в препроцессинге item, представляющий собой json-строку. Примерно так, как в стандартном темплейте "Windows Network by Zabbix agent". Там запрос WMI в дискавери парсится таким кодом:
    Code:
    output = JSON.parse(value).map(function(net){
    return {
    "{#IFNAME}": net.Name,
    "{#IFDESCR}": net.Description,
    "{#IFALIAS}" : net.NetConnectionID
    }})
    return JSON.stringify({"data": output})
    Вот мне нужно сделать/отладить нечто похожее.
    Для отладки пытаюсь использовать zabbix_js. Но нигде не могу найти, как правильно оформить скрипт? Как он принимает параметр, передаваемый через -p? Может, кто-то кинет пример такого скрипта из нескольких строчек, или подскажет, где посмотреть?

    И второй вопрос на ту же тему. Объект JSON вроде есть. А можно ли (и как?) использовать jsonPath?
  • Semiadmin
    Senior Member
    • Oct 2014
    • 1625

    #2
    Про zabbix_js не подскажу, не пользовался, меня пока вполне устраивает тест препроцессинга в веб-интерфейсе Zabbix.
    По второму вопросу: JSONPath использовать можно и нужно.
    Насколько я понимаю, в данном случае автор шаблона применил js-препроцессинг для того, чтобы убрать из изначального JSON'a пары ключ-значение, по которым не будут создаваться макросы LLD (WMI-запрос там также получает AdapterTypeId, NetConnectionStatus, Speed).
    Убрав ненужные и при этом, как правило, часто меняющиеся метрики, автор вторым шагом применил троттлинг с хартбитом, чтобы LLD выполнялось только раз в час или при изменении метрик, которые нужны для LLD-макросов.
    А так - можно было бы просто прописать LLD-макросы и JSONPath на вкладке "LLD macros". Собственно, и после удаления из JSON лишних метрик через JS можно было бы пойти этим путем, но автор решил сразу сделать готовый JSON c LLD-макросами.
    Что касается обычного парсинга JSON, не в целях создания LLD rule, как правило, возможностей JSONPath-препроцессинга вполне достаточно. В документации есть подробные примеры его применения.

    Comment

    • IgorB
      Member
      • Apr 2016
      • 58

      #3
      Code:
      {
      "body": {
      "items": [
      {"name": "GWv4","status_translated": "Online"},
      {"name": "GWv5","status_translated": "Online"}
      ],
      "status": "ok"
      }
      }
      Вот есть такой "исходник". На этапе LLD мне нужно вытянуть "name" в LLD-макрос (пусть {#GW_NAME}), и сгенерировать item-ы, вытягивающие значение status_translated.
      Пишу LLD-макро с JSONPath
      $.body.items.name
      Получаю ошибку "Cannot find the "data" array in the received JSON object". Подозреваю, что неправильно пытаюсь залезть внутрь [] в items. Как правильно?

      Comment

      • IgorB
        Member
        • Apr 2016
        • 58

        #4
        Ввел шаг препроцессинга, в котором просто заменяю "body" на "data". Ошибка ушла, но item-ы не создаются.

        Comment

        • IgorB
          Member
          • Apr 2016
          • 58

          #5
          "Задача решена, землекопа полтора, отдыхать теперь пора!"

          Коллеги, если кому-то интересно - то задачка решена путем поиска аналогии. Она найдена в темплейте Elasticsearch by HTTP. Точнее - "они". Одна аналогия - на дискавери и LLD-макро, вторая - на прототип item-а.

          Очень богатый темплейт на тему jsonpath. Да, и еще хорош сайт jsonpath.com - для отладки.

          Comment

          Working...