Ad Widget

Collapse

zabbix trapper LLD

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • burgum
    Junior Member
    • Apr 2013
    • 15

    #1

    zabbix trapper LLD

    Создал DiscoveryRule cо следующими параметрами:
    Type:ZabbixTrapper

    и в нём определил ItemPrototype
    Type:ZabbixTrapper

    на целевой машинке выполняю
    Code:
    zabbix_sender.exe -z zabbix.local -p 10051 -s "myhost.local" -k app.stream.discovery -o {"data":[{"{#StreamName}":"MyStream"}]}
    Cообщение сервер принимает, но в DiscoveryRule выдается сообщение, что данные должны быть в JSON формате. Проверил JSON на валидность.
    Подскажите, пожалуйста, что я делаю не так.
  • Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3404

    #2
    Мне кажется, имя переменной-макроса ({#StreamName} в Вашем примере) не должно содержать маленьких букв.

    Comment

    • burgum
      Junior Member
      • Apr 2013
      • 15

      #3
      Поправил имя переменной(я буду внимательнее читать документацию), но это не помогло.

      Возможно у меня не совсем корректно определено правило.
      ItemPrototype:
      Code:
      Name:{#STREAMNAME}
      KEY: app[{#STREAMNAME}]
      После отправки JSON c именем ключа, делаю отправку данных
      Code:
      zabbix_sender.exe -z zabbix  -p 10051 -s "myhost" -k app["MyStream"] -o 1
      Но получаю от сервера в ответ ошибку.
      Last edited by burgum; 10-02-2016, 10:35.

      Comment

      • ableev
        Senior Member
        Zabbix Certified Specialist
        • Oct 2012
        • 276

        #4
        Какую ошибку?

        Code:
        zabbix_sender.exe -z zabbix.local -p 10051 -s "myhost.local" -k app.stream.discovery -o '{"data":[{"{#StreamName}":"MyStream"}]}'
        Попробуйте в кавычках. Я не знаю, как в Windows, в Linux (bash, например) это важно.

        Comment

        • burgum
          Junior Member
          • Apr 2013
          • 15

          #5
          Кавычки не помогли

          Comment

          • ableev
            Senior Member
            Zabbix Certified Specialist
            • Oct 2012
            • 276

            #6
            Originally posted by burgum
            Кавычки не помогли
            Очень информативно с вами общаться. Ни копипасты логов, ни скриншотов.

            Создал то же, что и у вас. Отправляемые данные поместил в кавычки. Ошибки нет.

            Comment

            • burgum
              Junior Member
              • Apr 2013
              • 15

              #7
              Прошу прощения, не сразу заметил Ваш вопрос.
              Какую ошибку?
              Code:
              zabbix_sender.exe -z zabbix  -p 10051 -s "myhost" -k app["MyStream"] -o 1
              info from server: "processed: 0; failed: 1; total: 1; seconds spent: 0.000014" sent: 1; skipped: 0; total: 1
              настройки правила во вложении, логи пока приложить не могу, т.к. у меня к ним нет доступа, как только доступ предоставят, добавлю и логи.
              Last edited by burgum; 12-02-2016, 13:52.

              Comment

              • ableev
                Senior Member
                Zabbix Certified Specialist
                • Oct 2012
                • 276

                #8
                Ещё раз вам повторю – дело в кавычках.

                Comment

                • burgum
                  Junior Member
                  • Apr 2013
                  • 15

                  #9
                  В каких кавычках?
                  Я отправлял параметр -o с одинарными кавычками и без них
                  но в Web-интерфейсе получаю
                  Code:
                  Value should be a JSON object
                  (запросы приложил в текстовом файле, т.к. спамфильтр не пропускал сообщение)

                  Коллеги в логах ничего не нашли по ни по ключу app.discovery.stream, ни по MYSTREAM

                  Я попробую описать задачу, которую пытаюсь решить. Может Вы подскажете решение оптимальнее (LLD для zabbix_agent у меня нормально работают, проблема именно с trapper).

                  Есть приложение, состоящее из нескольких модулей, при падении модуля в EventLog создаётся сообщение вида
                  Source:{$MYAPP} - одинаковый для всех модулей
                  EventID:{$ERROR_ID} - одинаковый для всех модулей
                  Message:{$MODULE_NAME}
                  При восстановлении работы модуля создается аналогичная запись с другим ID.

                  Мне нужно отслеживать ошибки и рисовать графики, рассматривал следующие варианты:
                  • реализовать это через item "eventlog", но насколько я понимаю, рисовать графики для него нельзя.
                  • парсить логи скриптом через userparam, но я если я правильно понимаю, то при таком подходе я не могу отправить массив данных серверу. А т.к. число модулей может доходить до 200 выполнять для каждого из них запрос к логу не хочется.
                  Last edited by burgum; 12-02-2016, 13:52.

                  Comment

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

                    #10
                    Во-первых, имя хоста в кавычки я бы не заключал. Если виндовый zabbix_sender.exe пересылает эти кавычки вместе со значением, то Zabbix хоста с таким именем (включающим кавычки) не найдёт.

                    Во-вторых, имя элемента данных у Вас, судя по предыдущим примерам и по скриншоту, app.stream.discovery, а в посылаете Вы почему-то app.discovery.stream. Разумеется, будет ошибка, поскольку такого элемента данных не определено.

                    В-третьих, последующие две команды тоже не отработают, поскольку ещё не отработало автообнаружение (discovering) - таких элементов данных тоже ещё просто не создано. Даже после успешной отправки app.stream.discovery реальные данные для отдискаверенных айтемов можно отправлять только где-то через минуту (посколько сама процедура дискаверинга тоже занимает время).

                    Наконец, в-четвёртых - графики, действительно, можно рисовать только для числовых элементов данных. Но вот это:
                    при таком подходе я не могу отправить массив данных серверу
                    не совсем верно. Используя zabbix_sender, можно послать сразу множество значений на сервер, которые этот сендер может читать из файла определённого формата или из STDIN (что обычно и делают), см. параметр "-i".

                    Comment

                    • burgum
                      Junior Member
                      • Apr 2013
                      • 15

                      #11
                      Originally posted by Kos
                      Во-первых, имя хоста в кавычки я бы не заключал. Если виндовый zabbix_sender пересылает эти кавычки вместе со значением, то Zabbix хоста с таким именем (включающим кавычки) не найдёт.
                      Сервер находится, т.к. в настройках сервера для данного discovery rule выставляется статус "Value should be a JSON object", но я попробовал отправить сообщение не заключая в кавычки имя хоста, это не помогло

                      Во-вторых, имя элемента данных у Вас, судя по предыдущим примерам и по скриншоту, app.stream.discovery, а в посылаете Вы почему-то app.discovery.stream. Разумеется, будет ошибка, поскольку такого
                      элемента данных не определено.
                      Прошу прощения, тут я ошибся и прикрепил не тот файл. Добавил актуальный.
                      Last edited by burgum; 12-02-2016, 13:52.

                      Comment

                      • burgum
                        Junior Member
                        • Apr 2013
                        • 15

                        #12
                        Наконец, в-четвёртых - графики, действительно, можно рисовать только для числовых элементов данных. Но вот это:не совсем верно. Используя zabbix_sender, можно послать сразу множество значений на сервер, которые этот сендер может читать из файла определённого формата или из STDIN (что обычно и делают), см. параметр "-i".
                        Я не совсем корректно выразился, была идея получать данные через zabbix_agent, выполняя скрипт в userparam, но как отправить массив я не разобрался, поэтому выбрал решение через zabbix_sender


                        [offtopic]Сообщение разбил на два т.к. одним не отправлялось[/offtopic]
                        Last edited by burgum; 11-02-2016, 09:20.

                        Comment

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

                          #13
                          Originally posted by burgum
                          Прошу прощения, тут я ошибся и прикрепил не тот файл. Добавил актуальный.
                          Ну, тут не виден результат выполнения этой команды.

                          Меня смущает обилие кавычек. Я бы попытался, во избежание (а заодно и для отладки) перефразировать эту команду таким образом, чтобы она читала сами данные из стандартного ввода (используя параметры "-i -").

                          Например:
                          Code:
                          echo - app.stream.discovery {"data":[{"{#STREAMNAME}":"MYSTREAM"}]}
                          Если без лишних кавычек выводится нормально (через пробел: минус, ключ элемента данных, JSON), то делаем следующий шаг, скармливая это через конвейер утилите zabbix_sender:
                          Code:
                          echo ... | zabbix_sender.exe -z zabbix -p 10051 -s myhost -i -
                          Смотрим на результат. Если данные ушли без ошибок, то у хоста должен в результате дискаверинга появиться новый элемент данных. Только после этого можно пробовать засылать данные уже туда.

                          Comment

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

                            #14
                            Originally posted by burgum
                            Я не совсем корректно выразился, была идея получать данные через zabbix_agent, выполняя скрипт в userparam, но как отправить массив я не разобрался, поэтому выбрал решение через zabbix_sender

                            [offtopic]Сообщение разбил на два т.к. одним не отправлялось[/offtopic]
                            Тот скрипт, который вызывается из агента через UserParameter, должен возвращать одно значение, это да. Но никто не мешает из того же скрипта вызывать zabbix_sender, который будет засылать на сервер ещё целую пачку значений
                            У нас, кстати, некоторые данные именно так и собираются, тут главное, чтобы весь скрипт (вместе с вызовом zabbix_sender-a) успевал укладываться в отведённый ему тайм-аут.

                            (отправляю отдельным сообщением по той же причине)

                            Comment

                            • burgum
                              Junior Member
                              • Apr 2013
                              • 15

                              #15
                              Originally posted by Kos
                              Ну, тут не виден результат выполнения этой команды.

                              Меня смущает обилие кавычек. Я бы попытался, во избежание (а заодно и для отладки) перефразировать эту команду таким образом, чтобы она читала сами данные из стандартного ввода (используя параметры "-i -").

                              Смотрим на результат. Если данные ушли без ошибок, то у хоста должен в результате дискаверинга появиться новый элемент данных. Только после этого можно пробовать засылать данные уже туда.
                              Спасибо, всё получилось.
                              Проблема в кавычках
                              только вместо одинарных кавычек под виндой пришлось экранировать двойные в JSON. При получении данных через конвеер и отправке через ключ -i zabbix_sender экранирует кавычки.

                              а через -o пришлось ручками отправлять вот такую запись
                              Code:
                              {\"data\":[{\"{#STREAMNAME}\":\"MYSTREAM\"}]}
                              Last edited by burgum; 11-02-2016, 10:27.

                              Comment

                              Working...