Ad Widget

Collapse

HTTP agent and JSONPath

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • YevgeniyYatsenko
    Junior Member
    • Jun 2021
    • 7

    #1

    HTTP agent and JSONPath

    Всем здравствуйте.


    Имеется вопрос по настройке заббикса, стоит следующая задача:
    - есть веб-сервер с которого нужно считывать данные в json формате о кол-ве покупок по каждому покупателю, к примеру вывод будет такой:


    user@laptop:~$ curl -s 192.168.0.2:80/counters | jq .
    [
    {
    "user": "user1",
    "count": 74,
    "error": 2
    },
    {
    "user": "user2",
    "count": 3,
    "error": 0
    }
    ]


    Хочу сделать шаблон в заббиксе для этих целей потому что в будущем кол-во сервер будет возрастать. Для этих целей хочу использовать discovery и HTTP agent.


    В discovery rule прописываю след. параметры:
    • Name: Customers
    • Type: HTTP agent
    • Key: Customers
    • URL: {HOST.IP}:80/counters
    • Request type: GET


    Делаю “TEST” настроек и получаю вывод который приведен выше, мне кажется что все норм.


    В Item prototype прописываю след. настройки:
    • Name: INDEX_
    • Type: HTTP agent
    • Key: INDEX_[{#INDEXMA}]
    • URL: {HOST.IP}:80/counters
    • Request type: GET
    Preprocessing:
    • JSONPath: $.[:].user


    Делаю “TEST” настроек и получаю вывод: ["use1","user2"]


    После перехожу в Configuration – Hosts – Discovery и вижу след. вывод :


    Cannot create item: item with the same key "INDEX_[{#INDMA}]" already exists.
    Cannot create item: item with the same key "INDEX_[{#INDMA}]" already exists.
  • Hamardaban
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • May 2019
    • 2713

    #2
    Key: INDEX_[{#INDEXMA}] а в сообщении об ошибке макрос {#INDMA}
    а такого нет и соответственно в значение не преобразуется

    Comment

    • lioncub
      Member
      • May 2011
      • 39

      #3
      Originally posted by YevgeniyYatsenko
      Cannot create item: item with the same key "INDEX_[{#INDMA}]" already exists.
      уже используется данный ключ в другом шаблоне, либо повторяется в этом

      Comment

      • YevgeniyYatsenko
        Junior Member
        • Jun 2021
        • 7

        #4
        Наконец решил эту задачу, возможно будет другой способ, если он есть, то напишите.

        Мой варинат следующий:
        1. Создаем новый шаблон Configuration → Templates → Create template
        - Template name: Template Probe
        - Groups: Linux servers
        - Add

        2. Заходим заново Configuration → Templates → нажимаем на Discovery в созданном нами шаблоне → Create discovery rule (верхний правый угол экрана)
        - Name: Discovery Probe
        - Type: External check
        - Key: http-agent-api.sh[{HOST.IP}] (Это название нашего скрипта и параметр который мы в него передаюм через системный макрос).
        - Update interval: {$UPDATE_TIME} (Это пользовательский макрос который мы созданим чуть позже)
        - Add/Update

        3. Заходим заново Configuration → Templates → нажимаем на Discovery в созданном нами шаблоне → Item prototypes → Create Item prototypes
        - Name: NICs_{#USER} (Макрос {#USER} будем брать из скрипта который мы создадим позже)
        - Type: External check
        - Key: http-agent-api.sh[{HOST.IP}, {#USER}] (Заново будем обращаться на наш скрипт, но тут нужно уже добавить уникальное имя, поэтому выбрал {#USER} чтобы легче потом в выводе их различать)
        - Type of information: Numeric (Будем получить значения в цифрах и строить графики)
        - Units:
        - Update interval: {$UPDATE_TIME}

        3.1. Переходим на закладку PREPROCESSING
        - JSON Path: $.data.[{#INDEX}].COUNT (будем извлекать данные из подготовленного вывода который формирует наш скрипт)
        - Change per second
        - Custom multiplier: 8
        - Add/Update

        4. Создаем хост который мы будем мониторить, Configuration → Hosts → Create host
        - Host name: Наименование хоста
        - Groups: Linux servers
        - Interfaces: (можете выбрать через агента и указать адрес сервера и порт 10050, в данной задачи мы все равно этим не будем пользоваться, просто стоит звездочка поэтому нужно что то указать.)

        4.1. Переходим в закладку Template
        - Link new templates: (выбираем наш шаблон “Template Probe”)
        4.2. Переходим в закладку Macros
        - {$UPDATE_TIME}: 5m
        - Add/Update

        Настройка сервера закончена. Осталось только сделать скрипт и поместить его в каталог заббикс-сервера.

        5. Через SSH заходим на сервер заббикс и проверяем на какой каталог ссылаются настройки сервера где должны лежать скрипты
        - grep -i external /etc/zabbix/zabbix_server.conf
        ExternalScripts=/usr/lib/zabbix/externalscripts
        - заходим в этот каталог cd /usr/lib/zabbix/externalscripts
        - получаем через утилиту curl данные которые мы хотим получить
        curl -s 192.168.0.2:5010/counters | jq .

        [
        {
        "index": 0,
        "user": "user1",
        "count": 74,
        "error": 2
        },
        {
        "index": 1,
        "user": "user2",
        "count": 3,
        "error": 0
        }
        ]

        - Нужно привести эти данные к тем которые понимает LLD zabbix discovery, поэтому эти данные нужно чуть изменить поэтому пишем скрипт:

        vim http-agent-api.sh

        #!/bin/bash
        VARIABLE=`curl -s $1:5010/counters | jq . | tr a-z A-Z | grep -viE '(\[|\])' | sed -e 's/USER/{#USER}/g' | sed -e 's/INDEX/{#INDEX}/g'`

        echo "{
        "data": [
        $VARIABLE
        ]
        }"
        - Даем скрипту права на выполнение chmod +x http-agent-api.sh

        - Запускаем скрипт и проверяем что он нам выводит
        ./http-agent-api.sh 192.168.0.2

        {
        "data": [
        {
        "{#INDEX}": 0,
        "{#USER}": “user1”,
        "count": 74,
        "error": 2
        },
        {
        "{#INDEX}": 1,
        "{#USER}": “user2”,
        "count": 3,
        "error": 0
        }
        ]
        }

        6. Переходим в Monitoring → Latest data
        - Выбираем в поле (вверху) Hosts: (Пишем название нашего хоста который мы создали)
        - Через минут 5 должны пойти данные.
        Last edited by YevgeniyYatsenko; 14-07-2021, 09:25.

        Comment

        Working...