Обработка json данных в Zabbix 3.4

812 просмотра
0

Необходимо обрабатывать метрики, передаваемые из хоста по http протоколу в формате JSON. Например есть URL http://10.0.#.#:8081/metrics/:

{"memory": 198286984,
 "max_queue_length": 0,
 "connections": 1000,
 "bad_packets_counter": 26127,
 "bad_packets_counter_per_minute": 0,
 "bytes_received": 187695,
 "bytes_sent": 114262,
 "buffer_counter": 11,
 "kafka_failures_per_minute": 0,
 "kafka_failures_per_day": 0,
 "kafka_records_with_server_utc": 0}

Каким образом можно загрузить эти данные в zabbix, чтобы можно было построить графики по выбранному параметру и создать триггеры?


Добавить комментарий

5 Answers

Python Опубликовано 12.12.2018
0

Создаем item, который будет забирать json с сервера:
введите сюда описание изображения
Переходим в закладку Preprocessing и добавляем регулярку, которая будет вырезать JSON:
введите сюда описание изображения
Готово, теперь можно создавать дочерние элементы. Например memory:
введите сюда описание изображения
И настраиваем Preprocessing:
введите сюда описание изображения

Аналогично добавляем остальные элементы.

Добавить комментарий
0

Создал элемент данных

введите сюда описание изображения

Прописал шаги предобработки

введите сюда описание изображения

Возникает ошибка:

Item preprocessing step #1 failed: cannot perform regular expression
match on value "" of type "string": pattern does not match.

Добавить комментарий
0

Увы, я так и не понял как реализовать решение этой задачи без агента. Пробую через агента.

В итоге я немного изменил скрипт, положил в директорию /etc/zabbix/externalscripts. Дал соответсвующие права и т.д.

#!/bin/bash
export PYTHONENCODING=utf8
 
curl -s 'http://10.0.5.55:8081/metrics/' | \
    python3 -c "import sys, json; print(json.load(sys.stdin)['$1'])"

Если я выполню скрипт через терминал, я могу вытащить любое значение, указав интересующий ключ:

unixander@zabbix-server:/etc/zabbix/externalscripts$ ./kafka_prod.sh connections
952
unixander@zabbix-server:/etc/zabbix/externalscripts$ ./kafka_prod.sh memory
220638384

Внес изменения в конфиг сервера и агента.

zabbix_server.conf:

ExternalScripts=/etc/zabbix/externalscripts

zabbix_agentd.conf:

UnsafeUserParameters=1
UserParameter=kafka_prod[*],/etc/zabbix/externalscripts/kafka_prod.sh $1

Иду в заббикс, создаю элемент данных и тут у меня снова ступор, как и с предобработкой:

введите сюда описание изображения

введите сюда описание изображения

Для проверки, что все ОК, я хочу вытащить пока что connections и memory. Как правильно прописать поле key и шаги предобработки?

Добавить комментарий
0

Если на узле стоит zabbix-agent, то через UserParameter в zabbix-
agentd.conf

На агенте что-то вроде:

UserParameter=metric.[*],/path/to/script $1

script — дербанит JSON и забирает оттуда нужный параметр

На сервере создаете значение, для соответствуещего узла сети: Тип — zabbix agent (active); Key — metric.memory и так для каждого параметра.

Второй вариант, если нет возможности ставить агента на целевом узле, сдел замутить скрипт который дербанит JSON и пихучить параметры в zabbix, по одному, с помощью zabbix_sender.
Для узла должны быть созданы соответствующие значения.

Извиняюсь, не обратил внимания на версию. Для 3.4 смотрите тут и тут

По сути нужно настроить только свой шаблон в препроцессинге, который будет выдергивать данные из JSON. На discovery можно не обращать внимания

Если будут трудности уже в процессе настройки,пишите! Удачи!

Добавить комментарий
0

Итак, первый вопрос. Я написал несколько скриптов, какой из них более подходит для решения данной задачи?

первый: курлом возвращает результат запроса (результат возврата в шапке)

#!/bin/bash
curl -s http://10.0.#.#:8081/metrics/

второй: возращает значение connections

#!/bin/bash
export PYTHONENCODING=utf8
 
curl -s 'http://10.0.#.#:8081/metrics/' | \
    python3 -c "import sys, json; print(json.load(sys.stdin)['connections'])"

Поскольку я использовал первый вариант, то UserParameter у меня следующего вида.
UserParameter=metric.[*],/etc/zabbix/get_json.sh $1 $2

Далее в Zabbix. Создал элемент данных следующего вида:

Имя: getMetrics
Тип: Zabbix агент
Ключ: metric
Тип информации: текст
Группы элемнтов данных: Internal Items

Предобработка: Путь JSON > .connections (1 параметр) и Путь JSON > .memory (2 параметр)

В информации о состоянии пишет что неподдерживаемый элемент ключа.

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up