Ad Widget

Collapse

Проблема с LLD при сосздании прототипа элемента данных

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • chicaragua
    Junior Member
    • Mar 2024
    • 5

    #1

    Проблема с LLD при сосздании прототипа элемента данных

    Всем привет, пишу снова, так как в прошлом топике сломалась вёрстка. Я обратился в саппорт и его просто удалили

    Итак.

    Zabbix 6.0.12

    Ломаю голову над следующей проблемой.

    У меня есть скрипт который определён в UserParameters
    Code:
    UserParameter=LLD[*], /etc/zabbix/externalscripts/LLD.sh
    Скрипт возвращает мне JSON вот такого вот вида:
    Code:
    sudo bash ./LLD.sh | jq .
    [
      {
      "camname": "cam1",
      "camid": "2998",
      "camimg": "1280"
      },
      {
      "camname": "cam2",
      "camid": "2999",
      "camimg": "1920"
      }
    ]
    Далее я создаю правило обнаружения



    После чего я пытаюсь создать LLD макрос

    Click image for larger version

Name:	image.png
Views:	158
Size:	14.7 KB
ID:	481532

    Но при нажатии Test мне ​​возвращается целиком весь JSON

    ​​

    Причём здесь можно писать любую чепуху, типа $.sldkjdslkhf - результат тотже, JSON целиком.

    А вот если всё тоже самое сделать во вкладке Preprocessing, то тогда я получу лишь ожидаемые значения.

    ​​

    Кто нибудь может подсказать что я делаю не так?​

    ​​
  • Griboed0ff
    Senior Member
    • Sep 2022
    • 153

    #2
    Попробуйте без[*], как обсуждалось тут: https://www.zabbix.com/forum/zabbix-...-an-lld-macros

    Comment

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

      #3
      Да, я пытался ответить в предыдущей теме, и при этом что-то пошло не так

      Смысл моего ответа был в том, что, как и пишет Griboed0ff, на вкладке "LLD macro" нужно упростить JSONPath до простого "$.camname".
      В предобработке шаг JSONPath не нужен. Дело в том, что предобработка обрабатывает всё входное значение (весь исходный JSON), а при работе правила обнаружения (и, в частности, подстановке макросов) указанный JSONPath применяется не ко всему исходному JSON-у, а к каждой строке по отдельности (т.е. к отдельному элементу его массива).

      Comment

      • chicaragua
        Junior Member
        • Mar 2024
        • 5

        #4
        Originally posted by Kos
        Да, я пытался ответить в предыдущей теме, и при этом что-то пошло не так

        Смысл моего ответа был в том, что, как и пишет Griboed0ff, на вкладке "LLD macro" нужно упростить JSONPath до простого "$.camname".
        В предобработке шаг JSONPath не нужен. Дело в том, что предобработка обрабатывает всё входное значение (весь исходный JSON), а при работе правила обнаружения (и, в частности, подстановке макросов) указанный JSONPath применяется не ко всему исходному JSON-у, а к каждой строке по отдельности (т.е. к отдельному элементу его массива).
        Я пробовал и $.camname - тот же результат. И в целом как бы можно лубую билеберду писать прсле $. и получать весь JSON в ответ. Я чую что дело в какой то мелочи, которую я скорее всего упустил.

        Comment

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

          #5
          Originally posted by chicaragua
          Я пробовал и $.camname - тот же результат. И в целом как бы можно лубую билеберду писать прсле $. и получать весь JSON в ответ. Я чую что дело в какой то мелочи, которую я скорее всего упустил.
          Что значаит "пробовал"? При нажатии на "Тест" вам и должен возвращаться весь JSON. Правило обнаружения при этом работает, элементы данных по прототипам создаются?

          Comment

          • Alex_UUU
            Senior Member
            • Dec 2018
            • 541

            #6
            Топикстартер путает предобработку и LLD макросы.
            последовательность:
            1. Отрабатывает ключ (скрипт, запрос и т.д.)
            2. На сервер поступают данные от пю1 (в данном случае уписанный json)
            3. Сервер делает предобработку. (для указанного json) она не нужна
            4. Итоги направляет в lld макросы, и далее делает прототипы.

            Нажимая на кнопку ТЕСТ мы получаем итог первых 3 пунктов и все.
            Что надо:
            В LLD макросы написать
            {#CAMNAME} $.camname
            Ну и аналогично для других полей.

            И в прототипах использовать {#CAMNAME}.{#CAMID} etc/

            Хинт: если крипт выдает
            Code:
            [
            {
            "{#CAMNAME}": "cam1",
            "{#CAMID}": "2998",
            "{#CAMIMG}": "1280"
            },
            {
            "{#CAMNAME}": "cam2",
            "{#CAMID}": "2999",
            "{#CAMIMG}": "1920"
            }
            ]
            ТО LLD макросы можно не заполнять.

            Comment

            • chicaragua
              Junior Member
              • Mar 2024
              • 5

              #7
              Originally posted by Kos
              Что значаит "пробовал"? При нажатии на "Тест" вам и должен возвращаться весь JSON. Правило обнаружения при этом работает, элементы данных по прототипам создаются?
              Нет, элементы данных по прототипам не создаются. А что делает "Тест" в прототипе данных? Просто там я тоже получаю целиком JSON.
              На всякий случай я сделал два макроса, как говорится и так и так.
              Click image for larger version

Name:	image.png
Views:	99
Size:	14.7 KB
ID:	481607
              Но в обоих случаях когда я жму "Тест" - приходит весь JSON
              Click image for larger version

Name:	image.png
Views:	99
Size:	77.7 KB
ID:	481608

              Так же я пробовал сразу макросы деать как описывал Alex_UUU и тоже ничего
              ​ Я же правильно понимаю, что при верной настройке у меня в Items сами появятся новые новые элементы данных?

              Comment

              • Alex_UUU
                Senior Member
                • Dec 2018
                • 541

                #8
                Originally posted by chicaragua
                . А что делает "Тест" в прототипе данных?

                Так же я пробовал сразу макросы деать как описывал Alex_UUU и тоже ничего
                ​ Я же правильно понимаю, что при верной настройке у меня в Items сами появятся новые новые элементы данных?
                Тест в прототипах данных тестирует что будет, если на вход подать то, что соберет элемент данных.
                При правильной настройке дтскаверинга элементы данных, описанные в прототипе будут появляться автоматически. Или в "обнаружении" будет высвечиваться ошибка.

                Comment

                • chicaragua
                  Junior Member
                  • Mar 2024
                  • 5

                  #9
                  Originally posted by Alex_UUU

                  Тест в прототипах данных тестирует что будет, если на вход подать то, что соберет элемент данных.
                  При правильной настройке дтскаверинга элементы данных, описанные в прототипе будут появляться автоматически. Или в "обнаружении" будет высвечиваться ошибка.
                  Тогда я не понимаю что я делаю не так

                  Comment

                  • Alex_UUU
                    Senior Member
                    • Dec 2018
                    • 541

                    #10
                    Я не вижу ни одного прототипа.
                    Напиши в прототипе (если линух и разрешено выполнение system.run), например
                    Ключ system.run(echo {#CAMNAME})
                    Появится ли элемиент данных? Будут ли ошибки?

                    Comment

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

                      #11
                      Originally posted by chicaragua

                      Тогда я не понимаю что я делаю не так
                      А я, в свою очередь, не очень понимаю, что вы хотите получить.
                      У вас в настройках прототипа элемента данных указан тот же ключ "LLD" (правда, с параметром), по которому в соответствии с вашими настройками UserParameter вызывается тот же самый скрипт LLD.sh, который при нажатии кнопки "Test" на прототипе выдает тот же самый JSON, который используется для дискаверинга. Т.е. всё работает в полном соответствии с вашими настройками.
                      Опишите подробнее, какого результата вы хотели добиться.

                      Comment

                      Working...