Обложка канала

ServerAdmin.ru

12437 @srv_admin

Авторская информация о системном администрировании.

ServerAdmin.ru

3 года назад
Открыть в
​​Некоторое время назад полностью решил одну задачу по мониторингу, о которой хочу вам рассказать в общих чертах, чтобы у вас было понимание, какие задачи и как можно решить с помощью Zabbix. Была задача мониторить состояние платёжных терминалов в распределённой торговой сети. Данные о них можно получать из API сервиса iikko. Основная сложность была в том, что токен для доступа к API выдаётся временный, его нужно постоянно обновлять. Я решил это следующим образом. Взял обычный bash скрипт в котором получал токен к API iiko, а потом его с помощью API Zabbix сервера записывал в макрос соответствующего шаблона. Выглядит это примерно так: #!/bin/sh # Zabbix API token ZTOKEN=204279d9d06bb9c7df0527107bef8e5d75b0f7e823a8dc6 # Get iiko token ITOKEN=`curl -sk --location -X POST 'https://api-ru.iiko.services/api/1/access_token' \ -H 'Content-Type: application/json' \ --data-raw '{"apiLogin": "n8457fd4"}' | jq -r '.token'` # Update macros curl --location -X POST 'https://zb.server.ru/api_jsonrpc.php' \ -H 'Content-Type: application/json' \ --data-raw '{   "jsonrpc": "2.0",   "method": "template.update",   "params": {     "templateid": "10630",     "macros": [       {"macro": "{$TOKEN}","value": "'$ITOKEN'"},       {"macro": "{$ID_ORG}","value": ""},       {"macro": "{$ID_TERM}","value": ""}     ]   },   "id": 1,   "auth": "'$ZTOKEN'" }' Скрипт положил на Zabbix Server и запускал по CRON. Эту же задачу можно было бы решить более красиво через JavaScript сразу в шаблоне Zabbix. Он поддерживает такую обработку в айтеме. Но я не захотел тратить на это время. Если на bash я сразу понимаю, как сделать, то с JavaScript надо разбираться и отлаживать. Свободно программировать на нём я не умею. Далее сделал шаблон с айтемами типа HTTP Agent, настроил заголовки аутентификации с макросом, куда записывается токен, и POST запросы на извлечение нужных данных. С помощью предобработки айтемов вычленил нужные мне данные. Использовал несколько шагов: 1. JsonPath для того, чтобы выбрать нужную строку с данными. 2. Обрезал квадратные скобки [ ], которые остаются от json строк. 3. Сделал преобразование значений true и false, которые приходят в ответ на запрос, в 1 и 0 соответственно, чтобы хранить в базе не строковые значения, а числовые. Затем сделал простые триггеры на основе значения айтема. Шаблон достаточно прикрепить к хосту, указать макросы {$ID_ORG} и {$ID_TERM}, которые соответствуют ID организации и терминала в системе iikko и мониторинг заработает. Такая вот нетривиальная задача решается относительно просто с помощью Zabbix. Изначально думал, что придётся привлечь программистов, чтобы реализовать всю эту логику перед передачей данных в Zabbix. Была такая возможность. Но потом чуть повнимательнее посмотрел и понял, что можно всё это через Zabbix сделать практически штатным функционалом. #zabbix