Ad Widget

Collapse

Нет данных в item value

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • zabbixlan
    Junior Member
    • Feb 2022
    • 15

    #16
    Originally posted by Kos
    Ну вот ваш исходный JSON из первого сообщения:
    Code:
    {"data":{"drive":[{"number":"K77TFK57","weight":"1380","size":"2470"}]}}
    В нём действительно есть массив (то, что в квадратных скобках), но этот массив состоит из одного элемента - объекта с тремя атрибутами (number, weight и size).
    Если таких объектов много, тогда есть смысл и в массиве, и в автообнаружении.
    Например, передаются данные о множестве драйвов, каждый из которых идентифицируется своим постоянным номером и имеет переменные вес и размер.
    В этом случае можно для каждого из них при помощи LLD создавать свои элементы данных - допустим, drive.weight["K77TFK57"] (в который попадёт значение 1380) и drive.size["K77TFK57"] (в который попадёт 2470). Поскольку значения числовые, то по ним можно строить график и легко настроить нужные прототипы триггеров (например, если для какого-то драйва в качестве числового значения пришёл ноль).
    добавил в json ещё одну переменную direction {"data":{"drive":[{"direction":"1","number":"77777","weight":"100 0", "size":"2000"}]}} добавил макрос {#DIRECTION} $.direction, ключ прототипа drive.nomber[{#DIRECTION}], предобработка $.data.drive.[?(@.number == '{#NUMBER}' )].number
    данные поступают но эффект такой же как и ранее если меняешь значение number при повторной отправке данные становятся с ошибкой:
    Preprocessing failed for: {"data":{"drive":[{"direction":"1","number":"777","weight":"1000" ,"s ize":"2000"}]}}
    1. Failed: cannot extract value from json by path "$.data.drive.[?(@.number == '7737' )].number": no data matches the specified path
    Подскажите плз что я делаю не так​

    Comment

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

      #17
      Originally posted by zabbixlan
      Подскажите плз что я делаю не так​
      Сдаётся мне, что я уже отвечал на этот вопрос:
      [почему] если меняешь number то предыдущие становятся с ошибкой?​
      Потому что выражение в предобработке не находит в исходных данных заданный шаблон.
      У вас в каждом элементе данных, который был сгенерирован из прототипа, в предобработке указано выражение, в котором ищется значение именно для его number-а; если такого не находится - то возникает ошибка. Это можно отлавливать и игнорировать такие данные, если в шаге предобработки выставить Custom on fail​ -> discard value.

      Comment

      • zabbixlan
        Junior Member
        • Feb 2022
        • 15

        #18
        Originally posted by Kos
        Сдаётся мне, что я уже отвечал на этот вопрос:


        У вас в каждом элементе данных, который был сгенерирован из прототипа, в предобработке указано выражение, в котором ищется значение именно для его number-а; если такого не находится - то возникает ошибка. Это можно отлавливать и игнорировать такие данные, если в шаге предобработки выставить Custom on fail​ -> discard value.
        Добрый день, с прошедшими праздниками)
        Вернулся к проблеме т.к задача не решена.
        Подозреваю что проблема в предобработке? если нет то опишу что я хочу реализовать а именно:
        С стороны хоста отправляю sender сообщение в сторону Zabbix server типа {"data":{"drive":[{"direction":"1","number":"77777","weight":"100 0", "size":"2000"}]}}
        Далее задача по каждой изменяющийся переменной : number, weight, size строить графики, то есть на выходе будут 3 Item prototypes.
        На сервере создаю Item prototypes с key direction.[{#DIRECTION}] сообщения прилетают, но вида сообщения которого я отправляю ладно окей каждое сообщение есть в истории данных, далее настраиваю предобработку вот тут проблема если указываю $.data.drive.[?(@.number == '{#NUMBER}' )].number то возникает старая проблема которую описывал выше "1. Failed: cannot extract value from json by path "$.data.drive.[?(@.number == '7737' )].number": no data matches the specified path" и значение меняется только после повторной отправки такого же сообщения, а мне это не подходит сообщение будет одно и значения переменных будут каждый раз разные
        Уверен что дело в припроцессинге, мб подскажите как должен выгладить припроцессинг что бы данные переменной number изменялось при её изменении

        Comment

        • zabbixlan
          Junior Member
          • Feb 2022
          • 15

          #19
          Originally posted by zabbixlan

          Добрый день, с прошедшими праздниками)
          Вернулся к проблеме т.к задача не решена.
          Подозреваю что проблема в предобработке? если нет то опишу что я хочу реализовать а именно:
          С стороны хоста отправляю sender сообщение в сторону Zabbix server типа {"data":{"drive":[{"direction":"1","number":"77777","weight":"100 0", "size":"2000"}]}}
          Далее задача по каждой изменяющийся переменной : number, weight, size строить графики, то есть на выходе будут 3 Item prototypes.
          На сервере создаю Item prototypes с key direction.[{#DIRECTION}] сообщения прилетают, но вида сообщения которого я отправляю ладно окей каждое сообщение есть в истории данных, далее настраиваю предобработку вот тут проблема если указываю $.data.drive.[?(@.number == '{#NUMBER}' )].number то возникает старая проблема которую описывал выше "1. Failed: cannot extract value from json by path "$.data.drive.[?(@.number == '7737' )].number": no data matches the specified path" и значение меняется только после повторной отправки такого же сообщения, а мне это не подходит сообщение будет одно и значения переменных будут каждый раз разные
          Уверен что дело в припроцессинге, мб подскажите как должен выгладить припроцессинг что бы данные переменной number изменялось при её изменении
          отвечу сам на свой тупой вопрос $.data.drive[0].number

          Comment

          • smailik
            Junior Member
            • Jan 2023
            • 11

            #20
            Я правильно понимаю что у вас Элемент данных возвращает Json? Где вы из него читаете данные вот таким способом "$.data.drive[0].number"?

            Comment

            Working...