Ad Widget

Collapse

LLD обнаружение из массива JSON

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • mikezett
    Junior Member
    • Jul 2017
    • 17

    #1

    LLD обнаружение из массива JSON

    Приветствую.

    Столкнулся с проблемой. Версия Zabbix 4.4.8.

    1) API системы, которая мониториться возвращает JSON вида
    { "errorcode": 0,
    "message": "Done",
    "severity": "NONE",
    "gslbsite": [
    {
    "sitename": "X1",
    "sitepublicip": "X1.X2.X3.X4",
    "siteip": "X5.X6.X7.X8",
    ...
    },
    {
    "sitename": "X2",
    "sitepublicip": "Y1.Y2.Y3.Y4",
    "siteip": "Y5.Y6.Y7.Y8",
    ...
    }
    ]
    }

    2) Преобразую его с помощью препроцессинга JSONPath = $.gslbsite
    [
    {
    "sitename": "X1",
    "sitepublicip": "X1.X2.X3.X4",
    "siteip": "X5.X6.X7.X8",
    ...
    },
    {
    "sitename": "X2",
    "sitepublicip": "Y1.Y2.Y3.Y4",
    "siteip": "Y5.Y6.Y7.Y8",
    ...
    }
    ]


    3) Создаю на его основе обнаружение и макрос (пока один)

    Click image for larger version  Name:	LLD.JPG Views:	2 Size:	16.1 KB ID:	401623

    Click image for larger version  Name:	LLD_Macros.JPG Views:	1 Size:	18.2 KB ID:	401624

    4) Создаю прототип элемента данных

    Click image for larger version  Name:	ITEM_Prototype.JPG Views:	1 Size:	22.8 KB ID:	401625

    Click image for larger version  Name:	ITEM_Preprocessing.JPG Views:	1 Size:	13.9 KB ID:	401626

    5) К сожалению в результате получаю ошибку

    Click image for larger version  Name:	Error.JPG Views:	1 Size:	21.1 KB ID:	401627

    В чем может быть проблема? Заранее спасибо.
    Last edited by mikezett; 21-05-2020, 11:16.
  • Yacudzer
    Junior Member
    • Apr 2019
    • 24

    #2
    У меня похожая проблема - на вход попадает список словарей, один из элементов которого делаю ключем для discovery. Остальные элементы должны попадать в item. И я даже для них сделал макросы. Но как макросы из dicovery засунуть в item - хз.

    В вашем случае на вход к созданному айтему попадает изначальная структура:
    Code:
    [I]{ "errorcode": 0,
    "message": "Done",
    "severity": "NONE",
    "gslbsite": [[/I]
    
    {
    "sitename": "X1",
    "sitepublicip": "X1.X2.X3.X4",
    "siteip": "X5.X6.X7.X8",
    },
    {
    "sitename": "X2",
    "sitepublicip": "Y1.Y2.Y3.Y4",
    "siteip": "Y5.Y6.Y7.Y8",
    ...
    }[I]]}[/I]
    Т.е. структуры $.[{#SITENAME}] - не существует в исходных данных...
    Last edited by Yacudzer; 21-05-2020, 14:55.

    Comment


    • mikezett
      mikezett commented
      Editing a comment
      В том то и дело, что конструкция {#SITENAME} существует и имеет значения, это видно в сообщении ошибки X1].sitepublicip.
      Если сделать немного по другому, то создаются 2 элемента с именами, где прописан {$SITENAME},
      но никакое другое обращение к JSON, $[{$SITENAME}.sitepublicip, $.[{$SITENAME}].sitepublicip итд не понимается системой.
  • Yacudzer
    Junior Member
    • Apr 2019
    • 24

    #3
    Я решил свою проблему.
    У меня в итоге структура получилась такая (благо, я сам могу формировать то что мне нужно):
    Code:
    {
    "data":[
    {"ID":"*343638","STATECHANGES":"4","ROUTERID":"aa. bb.cc.4","ADJACENCY":"6d02:51:47"},
    {"ID":"*343CF8","STATECHANGES":"4","ROUTERID":"aa. bb.cc.4","ADJACENCY":"6d05:32:24"},
    ]
    }
    Макросы я определяю так:
    Click image for larger version

Name:	Screenshot_1.png
Views:	468
Size:	19.4 KB
ID:	401671

    Ну, а в айтеме делаю такую обработку (JSON, затем trim):
    Click image for larger version

Name:	Screenshot_2.png
Views:	451
Size:	24.9 KB
ID:	401674

    Надеюсь, Вам это поможет. Главное избавиться от макросов вида {#ID} в самом JSON, иначе в препроцессинге будет подменяться на данные и реальный макрос и то что пришло через JSON

    P.S. у меня заббикс 5.0
    Attached Files

    Comment


    • mikezett
      mikezett commented
      Editing a comment
      Спасибо, это то что нужно!

      Дя моего JSON preprocessing-выражение в прототипах элементов будет выглядеть вот так:

      $[?(@.sitename == "{#SITENAME}")].siteip, $[?(@.sitename == "{#SITENAME}")].sitepublicip итд.

      XXXXXXXXXXXXXXXXX

      Поизучав шаблоны на сайте zabbix, которые работают с API системы через HTTP нашёл шаблон для RabbitMQ over HTTP, https://git.zabbix.com/projects/ZBX/.../rabbitmq_http.

      Тут массив JSON-ов чуть более сложный

      [
      {
      "arguments": {},
      "auto_delete": false,
      "durable": true,
      "internal": false,
      "message_stats": {
      "publish_in": 16,
      "publish_in_details": {
      "rate": 0
      },
      "publish_out": 1,
      "publish_out_details": {
      "rate": 0
      }
      },
      "name": "",
      "type": "direct",
      "user_who_performed_action": "rmq-internal",
      "vhost": "/"
      },

      И используется выражение $[?(@.name == "{#EXCHANGE}" && @.vhost == "{#VHOST}" && @.type =="{#TYPE}")].message_stats.ack.first()
  • mikezett
    Junior Member
    • Jul 2017
    • 17

    #4
    Click image for larger version

Name:	rabbit.JPG
Views:	449
Size:	45.4 KB
ID:	401706

    Comment

    Working...