Curljson выполняет HTTP запрос и выводит значение указанного ключа из JSON ответа. С помощью него можно легко настроить мониторинг сервисов и приложений с REST интерфейсом, которые поддерживают отправку ответных данных в формате JSON.
Для корректной работы скрипта требуется php5 и библиотека php5-curl. В Debian их можно установить следующей командой.
# sudo apt-get install php5 php5-curl
curljson.php --url URL [--post DATA] [--username USER] [--password SECRET] [--key KEY] [--verbose]
Параметр | Псевдоним | Описание |
---|---|---|
url |
l |
URL запроса |
post |
s |
Выполнить POST запрос с указанной нагрузкой, если этот параметр не указан, выполняется GET |
username |
u |
Имя пользователя для basic аутентификации |
password |
p |
Пароль пользователя для basic аутентификации |
key |
k |
Путь до ключа в JSON ответе, значение которого необходимо получить, поля в пути разделяются символом . точки |
verbose |
v |
Включить подробный вывод для отладки |
Часто в одном единственном ответе сервера уже есть все необходимые данные для мониторинга. Делать множество однотипных запросов для того, чтобы извлечь несколько различных значений в такой ситуации избыточно. К тому же, это создает дополнительную паразитную нагрузку на сервис. Чтобы избежать такой ситуации, в curljson предусмотрено сохранение результата запроса в файл и загрузка результата из файла для дальнейшего извлечения нескольких значений.
curljson.php --url URL --output FILE [--post DATA] [--username USER] [--password SECRET] [--key KEY] [--verbose]
Параметр | Псевдоним | Описание |
---|---|---|
output |
o |
Путь до файла, в который будет сохранен результат запроса, все каталоги в указанном пути должны существовать |
curljson.php --input FILE [--age SEC] [--key KEY] [--verbose]
Параметр | Псевдоним | Описание |
---|---|---|
input |
i |
Путь до файла, из которого будет загружен результат запроса |
age |
a |
Максимальный возраст входного файл в секундах, возраст определяется по дате последнего изменения |
При получении значения из результата запроса есть возможность указать один из методов расширенной функциональности, которые изменяют вывод скрипта.
curljson.php … [--key KEY] [--feature METHOD [--macro KEY]]
Параметр | Псевдоним | Описание |
---|---|---|
key |
k |
Путь до ключа в JSON ответе, структура внутри которого будет использована в методе расширенной функциональности |
feature |
f |
Указывает метод расширенной функциональности для формирования вывода (см. ниже) |
macro |
m |
Путь до ключа в JSON ответе, значения которых будет использоваться в методе расширенной функциональности, поля в пути разделяются символом . точки, параметр может быть указан несколько раз |
Поддерживаемые методы перечислены ниже.
Метод | Описание |
---|---|
zabbix-lld |
Формирует JSON для низкоуровневого обнаружения в Zabbix |
zabbix-lld-urlencode |
Формирует JSON для низкоуровневого обнаружения в Zabbix с URL закодированными макросами |
sum |
Вычисляет сумму всех значений |
avg |
Вычисляет среднее арифметическое всех значений |
Модуль ngx_http_status_module
веб-сервера Nginx предоставляет REST интерфейс для мониторинга текущего состояния сервера и доступен как часть коммерческой подписки. В примерах REST интерфейс доступен по ссылке http://localhost:15478/status
.
Получение версии Nginx.
# curljson.php --url localhost:15478/status/nginx_version
1.7.11
Получение общего количества запросов.
# curljson.php --url localhost:15478/status --key requests.total
118068496
Получение количества 2xx ответов для зоны example.com.
# curljson.php --url localhost:15478/status/server_zones --key '"example.com".responses.2xx'
717187
Получение JSON для низкоуровневого обнаружения всех доступных зон в Zabbix.
# curljson.php --url localhost:15478/status --key server_zones --feature zabbix-lld
{"data":[{"{#NAME}":"memes.example.com"},{"{#NAME}":"boys.example.com"},{"{#NAME}":" girls.example.com"}]}
RabbitMQ Management Plugin предоставляет HTTP API для мониторинга и управления сервером. В примерах предполагается, что API доступено по ссылке http://localhost:15672/api
.
Получение общего количества опубликованных сообщений для очереди myqueue
виртуального хоста /
.
# curljson.php --url localhost:15672/api/queues///myqueue?columns=message_stats –username guest –password guest --key message_stats.publish
179617850
Сохранение статистики об очередях в файл /tmp/rabbitmq.stat
.
# curljson.php --url localhost:15672/api/queues --username guest --password guest --output /tmp/rabbitmq.stat
Получение из файла общего количества сообщений в состоянии ready во всех очередях всех виртуальных хостов.
# curljson.php --input /tmp/rabbitmq.stat --feature sum --macro messages_ready
0
Модуль HTTP предоставляет полный доступ к API Elasticsearch, в том числе доступ к данным для мониторинга. В примерах REST сервер Elasticsearch доступен по ссылке http://localhost:9200
.
Сохранение информацию о кластере в файл и вывод кода ответа.
# curljson.php --url localhost:9200/_cluster/health --output /tmp/clusterhealth; echo $?
0
Получение статуса кластера из сохраненного файла, но только в том случае, если возраст файла не более 10 минут. Перед выводом полученная строка преобразовывается в число.
# curljson.php --input /tmp/clusterhealth --age 600 --key status | { read status; echo -e "green\t0\nyellow\t1\nred\t2" | grep $status | cut -f2; }
0
Получение JSON для низкоуровневого обнаружения всех узлов кластера в Zabbix.
# curljson.php --url localhost:9200/_nodes/stats --key nodes --feature zabbix-lld --macro name
{"data":[{"{#NAME}":"es1"},{"{#NAME}":"es2"},{"{#NAME}":"logstash-logstash1-12625"}]}
Три идущих подряд косых черты ///
в строке URL заменяются на /%2f/
для поддержки очередей RabbitMQ, расположенных в виртуальном хосте /
.
В пути до ключа в JSON можно указывать пустое поле. Например, путь field1..subfield
указывает на значение в поле subfield
, которое будет расположено в первом доступном ключе внутри field1
.
"field1": {
"blahblahblah": {
"subfield": 0, << здесь
},
"blahblahblah": {
"subfield": 1,
}
}
Если поле в пути до ключа JSON содержит в себе символ точки .
, необходимо обернуть имя ключа в двойные кавычки ""
, а весь путь до ключа – в одинарные кавычки ''
.
--key '"example.com".responses.2xx'
Двойные кавычки также можно экранировать при помощи обратной косой черты \
.
--key \"example.com\".responses.2xx
При выводе булевые значения конвертируются в их числовое представление: false
в 0
, true
в 1
.