Ad Widget

Collapse

Макросы

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • exor14
    Junior Member
    • Apr 2022
    • 2

    #1

    Макросы

    Подскажите пожалуйста могу ли я в макрос в качестве значения прикрепить значение, которое я получаю в элементе данных (динамическое).

    Проблема в том что я пробую мониторить через http запросы, и в первом шаге я делаю POST запрос чтобы получить токен
    и вторым шагом мне надо сделать новый элемент данных чтобы сделать GET запрос и вставить полученный токен в заголовок этого запроса.
    Так как токен меняется каждые 5 минут, мне нужно чтобы значение полученное на шаге №1 использовалось в шаге №2.
    Я подумал могу ли я как-то использовать макрос в данной ситуации и если можно, то как правильно записать это в значение макроса?
    Если есть другой способ, буду благодарен за подсказу.
  • Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3404

    #2
    Для мониторинга по HTTP/HTTPS у Zabbix-а есть несколько вариантов.

    1. Самое простое - использовать агент Zabbix и его метрики web.page.*. Можно получить либо всю страницу (включая заголовки), либо конкретную строку (по регулярному выражению), либо время загрузки страницы. Но этот метод работает только с конкретным URL-ом, многошаговые сценарии не поддерживаются.

    2. Можно использовать проверки, которые называются "HTTP agent". В этом случае запрос делается не агентом, а сервером (Zabbix-сервер либо Zabbix-proxy), а настроек можно задать гораздо больше: например, указать HTTP-proxy, разрешить следовать редиректам, выбрать нужный метод (GET/POST/PUT/HEAD), указать нужные заголовки и содержимое тела запроса и т.д. К сожалению, и в этом варианте многошаговые сценарии тоже не поддерживаются.

    3. Использовать веб-проверки. В этом случае многошаговые сценарии поддерживаются; но, к сожалению, ограничен набор того, что возвращается. То есть с помощью веб-проверок можно убедиться в том, что можно (пусть даже за несколько шагов) добраться до нужной страницы и проверить, что это именно та страница (по коду ответа и по заданной строке в ответе), но нельзя использовать этот метод для получения данных с такой страницы (например, получать в качестве результата конкретное число, которое возращается на этой странице). Если вам нужно не забирать конкретное значение, а лишь убедиться в работоспособности сценария, то этот вариант для вас.

    Объединить бы возможности (2) и (3) - было бы прекрасно, но это пока только в планах на последующие версии.
    Поэтому, если нужно именно получать значения со страницы в многошаговом сценарии, то остаются только два варианта, требующие некоторых навыков программирования.

    4. Старый проверенный вариант: использование UserParameters. Просто пишете внешний скрипт, в котором реализуется вся нужная логика (на PowerShell-е для Windows, или на Python-е, или на bash-е с вызовом curl-а или wget-а под Linux и т.п.), и вызываете этот скрипт через агента. Как вариант, можно вызывать скрипт с сервера Zabbix, оформив его как внешнюю проверку.

    5. Наконец, начиная с версии 5.2, появился новый тип проверок: скриптовые (в версии 5.0 его ещё нет). Наверное, самый перспективный на данный момент вариант, но требующий некоторых навыков программирования на JavaScript (т.к. "скрипт" в данном конкретном случае подразумевает именно JavaScript). Можно реализовывать практически любые сценарии проверок, в том числе многошаговые с промежуточными сохранениями токенов/куков/чего-ещё-надо; но, повторюсь, нужно хоть немного понимать JavaScript.
    Last edited by Kos; 29-04-2022, 09:04.

    Comment

    • Semiadmin
      Senior Member
      • Oct 2014
      • 1625

      #3
      Немного добавлю насчет версии 5.0. Типа айтема Script там еще нет, но уже есть объект CurlHttpRequest в JS. Так что возможен смешанный вариант с первым шагом типа http agent и вторым в его js-препроцессинге.
      Last edited by Semiadmin; 29-04-2022, 09:43.

      Comment

      • exor14
        Junior Member
        • Apr 2022
        • 2

        #4
        Спасибо за ответы.
        Надеялся что можно просто в значение элемента данных прикрепить к макросу. Удивлен, кончено, что нет такой возможно.
        Да буду писать javascript тогда, рабочий вариант.

        Comment

        Working...