Skip to content

curljson makes http request and gets value of specified key from json response

Notifications You must be signed in to change notification settings

skokhanovskiy/curljson

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 

Repository files navigation

curljson

Curljson выполняет HTTP запрос и выводит значение указанного ключа из JSON ответа. С помощью него можно легко настроить мониторинг сервисов и приложений с REST интерфейсом, которые поддерживают отправку ответных данных в формате JSON.

Установка

Для корректной работы скрипта требуется php5 и библиотека php5-curl. В Debian их можно установить следующей командой.

# sudo apt-get install php5 php5-curl

Использование

Получение значений из HTTP запроса

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 Вычисляет среднее арифметическое всех значений

Примеры использования

Nginx

Модуль 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

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

Elasticsearch

Модуль 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.

About

curljson makes http request and gets value of specified key from json response

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages