9 HTTP агент
Обзор
Этот тип элемента данных позволяет получать данные с использованием протокола HTTP/HTTPS.
Трапы также возможны с использованием утилиты Zabbix sender или протокола Zabbix sender (для отсылки данных на Zabbix сервер или прокси), либо с использованием метода API history.push (для отсылки данных на Zabbix сервер).
Проверка HTTP элемента данных выполняется на стороне Zabbix сервера. Однако, если узлы сети наблюдаются через Zabbix прокси, проверки HTTP элементов данных выполняются этими прокси.
Проверки HTTP элементов данных не требуют наличия какого-либо агента, запущенного на наблюдаемом узле сети.
HTTP агент поддерживает как HTTP, так и HTTPS. Zabbix будет опционально следовать перенаправлениям (смотрите ниже опцию Следовать перенаправлениям). Максимальное количество перенаправлений вшито в код и равно 10 (используется cURL опция CURLOPT_MAXREDIRS).
Zabbix сервер/прокси должны быть изначально сконфигурированы с поддержкой cURL (libcurl).
Проверки HTTP выполняются асинхронно — не требуется получать ответ на один запрос перед началом других проверок. Разрешение DNS также выполняется асинхронно.
Максимальное количество параллельных асинхронных проверок составляет 1000 (определяется параметром MaxConcurrentChecksPerPoller).
Количество асинхронных поллеров HTTP агента определяется параметром StartHTTPAgentPollers.
Функция постоянных соединений (persistent connections) cURL была добавлена в проверки HTTP-агента, начиная с версии Zabbix 7.0.
Конфигурация
Чтобы настроить элемент данных HTTP:
- Перейдите в Сбор данных > Узлы сети.
- Нажмите Элементы данных в строке узла сети.
- Нажмите Создать элемент данных.
- Введите параметры элемента данных в форме.

Все обязательные поля ввода отмечены красной звездочкой.
Поля, для которых требуется специальная информация для элементов данных HTTP:
| Parameter | Description |
|---|---|
| Type | Выберите здесь HTTP agent. |
| Key | Введите уникальный ключ элемента данных. |
| URL | URL для подключения и получения данных. Например: https://www.example.com http://www.example.com/download Доменные имена можно указывать в символах Unicode. При выполнении HTTP-проверки они автоматически преобразуются в punycode и ASCII. Кнопка Parse может использоваться для отделения необязательных полей запроса (например, ?name=Admin&password=mypassword) от URL, при этом атрибуты и значения перемещаются в Query fields для автоматического URL-кодирования. Ограничено 2048 символами. Поддерживаемые макросы: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, пользовательские макросы, макросы низкоуровневого обнаружения. Это задает опцию cURL CURLOPT_URL. |
| Query fields | Переменные для URL (см. выше). Указываются в виде пар атрибутов и значений. Значения автоматически URL-кодируются. Значения из макросов сначала подставляются, а затем автоматически URL-кодируются. Поддерживаемые макросы: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, пользовательские макросы, макросы низкоуровневого обнаружения. Это задает опцию cURL CURLOPT_URL. |
| Request type | Выберите тип метода запроса: GET, POST, PUT или HEAD |
| Request body type | Выберите тип тела запроса: Raw data - произвольное тело HTTP-запроса, макросы подставляются, но кодирование не выполняется JSON data - тело HTTP-запроса в формате JSON. Макросы можно использовать как строку, число, true и false; макросы, используемые как строки, должны быть заключены в двойные кавычки. Значения из макросов сначала подставляются, а затем автоматически экранируются. Если в заголовках не указан "Content-Type", по умолчанию будет использоваться "Content-Type: application/json" XML data - тело HTTP-запроса в формате XML. Макросы можно использовать как текстовый узел, атрибут или секцию CDATA. Значения из макросов сначала подставляются, а затем автоматически экранируются в текстовом узле и атрибуте. Если в заголовках не указан "Content-Type", по умолчанию будет использоваться "Content-Type: application/xml" Note что выбор XML data требует libxml2. |
| Request body | Введите тело запроса. Поддерживаемые макросы: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, пользовательские макросы, макросы низкоуровневого обнаружения. |
| Headers | Пользовательские HTTP-заголовки, которые будут отправлены при выполнении запроса. Указываются в виде пар атрибутов и значений. Поддерживаемые макросы: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, пользовательские макросы, макросы низкоуровневого обнаружения. Это задает опцию cURL CURLOPT_HTTPHEADER. |
| Required status codes | Список ожидаемых HTTP-кодов состояния. Если Zabbix получает код, которого нет в списке, элемент данных станет неподдерживаемым. Если поле пустое, проверка не выполняется. Например: 200,201,210-299 Поддерживаемые макросы в списке: пользовательские макросы, макросы низкоуровневого обнаружения. Использует опцию cURL CURLINFO_RESPONSE_CODE. |
| Follow redirects | Установите флажок, чтобы следовать HTTP-перенаправлениям. Это задает опцию cURL CURLOPT_FOLLOWLOCATION. |
| Retrieve mode | Выберите часть ответа, которую нужно получить: Body - только тело Headers - только заголовки Body and headers - тело и заголовки |
| Convert to JSON | Заголовки сохраняются как пары атрибутов и значений под ключом "header", если для Retrieve mode не задано значение Body. Если встречается 'Content-Type: application/json', тело сохраняется как объект, в противном случае оно хранится как строка, например: ![]() |
| HTTP proxy | Можно указать HTTP-прокси для использования в формате [protocol://][username[:password]@]proxy.example.com[:port].Необязательный префикс protocol:// можно использовать для указания альтернативных протоколов прокси (например, https, socks4, socks5; см. документацию; поддержка префикса протокола была добавлена в cURL 7.21.7). Если протокол не указан, прокси будет считаться HTTP-прокси. Если указан неверный протокол, соединение завершится ошибкой, и элемент данных станет неподдерживаемым.По умолчанию будет использоваться порт 1080. Если значение указано, прокси переопределит связанные с прокси переменные окружения, такие как http_proxy, HTTPS_PROXY. Если не указано, прокси не будет переопределять связанные с прокси переменные окружения. Введенное значение передается "как есть", без проверки корректности. Note что с HTTP-прокси поддерживается только простая аутентификация. Поддерживаемые макросы: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, пользовательские макросы, макросы низкоуровневого обнаружения. Это задает опцию cURL CURLOPT_PROXY. |
| HTTP authentication | Выберите вариант аутентификации: None - аутентификация не используется; Basic - используется базовая аутентификация; NTLM - используется аутентификация NTLM (Windows NT LAN Manager); Kerberos - используется аутентификация Kerberos (см. также: Настройка Kerberos в Zabbix); Digest - используется аутентификация Digest. Это задает опцию cURL CURLOPT_HTTPAUTH. |
| User name | Введите имя пользователя (до 255 символов). Это поле доступно, если для HTTP authentication выбрано Basic, NTLM, Kerberos или Digest. Поддерживаются пользовательские макросы и макросы низкоуровневого обнаружения. |
| Password | Введите пароль пользователя (до 255 символов). Это поле доступно, если для HTTP authentication выбрано Basic, NTLM, Kerberos или Digest. Поддерживаются пользовательские макросы и макросы низкоуровневого обнаружения. |
| SSL verify peer | Установите флажок, чтобы проверить SSL-сертификат веб-сервера. Сертификат сервера будет автоматически взят из системного расположения центра сертификации (CA). Вы можете переопределить расположение файлов CA с помощью параметра конфигурации Zabbix server или proxy SSLCALocation. Это задает опцию cURL CURLOPT_SSL_VERIFYPEER. |
| SSL verify host | Установите флажок, чтобы проверить соответствие полю Common Name или полю Subject Alternate Name сертификата веб-сервера. Это задает опцию cURL CURLOPT_SSL_VERIFYHOST. |
| SSL certificate file | Имя файла SSL-сертификата, используемого для аутентификации клиента. Файл сертификата должен быть в формате PEM1. Если файл сертификата также содержит закрытый ключ, оставьте поле SSL key file пустым. Если ключ зашифрован, укажите пароль в поле SSL key password. Каталог, содержащий этот файл, задается параметром конфигурации Zabbix server или proxy SSLCertLocation. Поддерживаемые макросы: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, пользовательские макросы, макросы низкоуровневого обнаружения. Это задает опцию cURL CURLOPT_SSLCERT. |
| SSL key file | Имя файла закрытого SSL-ключа, используемого для аутентификации клиента. Файл закрытого ключа должен быть в формате PEM1. Каталог, содержащий этот файл, задается параметром конфигурации Zabbix server или proxy SSLKeyLocation. Поддерживаемые макросы: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, пользовательские макросы, макросы низкоуровневого обнаружения. Это задает опцию cURL CURLOPT_SSLKEY. |
| SSL key password | Пароль файла закрытого SSL-ключа. Поддерживаемые макросы: пользовательские макросы, макросы низкоуровневого обнаружения. Это задает опцию cURL CURLOPT_KEYPASSWD. |
| Timeout | Zabbix не будет тратить на обработку URL больше заданного времени (1-600 секунд). Фактически этот параметр определяет максимальное время для подключения к URL и максимальное время для выполнения HTTP-запроса. Поэтому Zabbix не будет тратить на одну проверку больше, чем 2 x Timeout секунд. Это задает опцию cURL CURLOPT_TIMEOUT. Дополнительные сведения о параметре Timeout см. в разделе общие атрибуты элемента данных. |
| Enable trapping | Если этот флажок установлен, элемент данных также будет работать как элемент данных типа trapper и будет принимать данные, отправленные на сервер или прокси Zabbix с помощью утилиты Zabbix sender или протокола Zabbix sender protocol, либо будет принимать данные, отправленные на сервер Zabbix с помощью метода API history.push. Дополнительные сведения об отправке данных см. в разделе: Элементы данных trapper. |
| Allowed hosts | Отображается только если установлен флажок Enable trapping. Список IP-адресов, разделенных запятыми, при необходимости в нотации CIDR, или DNS-имен. Если указано, входящие соединения будут приниматься только от перечисленных здесь узлов. Если включена поддержка IPv6, то '127.0.0.1', '::127.0.0.1', '::ffff:127.0.0.1' считаются эквивалентными, а '::/0' разрешает любой IPv4- или IPv6-адрес. '0.0.0.0/0' можно использовать, чтобы разрешить любой IPv4-адрес. Обратите внимание, что "IPv4-compatible IPv6 addresses" (префикс 0000::/96) поддерживаются, но считаются устаревшими согласно RFC4291. Пример: 127.0.0.1, 192.168.1.0/24, 192.168.3.1-255, 192.168.1-10.1-255, ::1,2001:db8::/32, mysqlserver1, zabbix.example.com, {HOST.HOST} В этом поле разрешены пробелы и пользовательские макросы. В этом поле разрешены макросы узла сети: {HOST.HOST}, {HOST.NAME}, {HOST.IP}, {HOST.DNS}, {HOST.CONN}. |
Если поле HTTP proxy оставлено пустым, другой способ использовать HTTP-прокси — задать связанные с прокси переменные окружения.
Для HTTP - задайте переменную окружения http_proxy для пользователя сервера Zabbix. Например:
http_proxy=http://proxy_ip:proxy_port.
Для HTTPS - задайте переменную окружения HTTPS_PROXY. Например:
HTTPS_PROXY=http://proxy_ip:proxy_port. Дополнительные сведения можно получить,
выполнив команду оболочки: # man curl.
[1] Zabbix поддерживает файлы сертификатов и закрытых ключей только в формате PEM. Если у вас есть данные сертификата и закрытого ключа в файле формата PKCS #12 (обычно с расширением *.p12 или *.pfx), вы можете создать из него файл PEM с помощью следующих команд:
openssl pkcs12 -in ssl-cert.p12 -clcerts -nokeys -out ssl-cert.pem
openssl pkcs12 -in ssl-cert.p12 -nocerts -nodes -out ssl-cert.key
Примеры
Пример 1
Отправка простых GET запросов на получение данных с таких сервисов, как Elasticsearch:
- Создайте GET элемент данных с URL:
localhost:9200/?pretty - Обратите внимание на ответ:
{
"name" : "YQ2VAY-",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "kH4CYqh5QfqgeTsjh2F9zg",
"version" : {
"number" : "6.1.3",
"build_hash" : "af51318",
"build_date" : "2018-01-26T18:22:55.523Z",
"build_snapshot" : false,
"lucene_version" : "7.1.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You know, for search"
}
- Теперь извлеките номер версии, используя шаг предварительной обработки JSONPath:
$.version.number
Пример 2
Отправка простых POST запросов на получение данных с таких сервисов, как Elasticsearch:
- Создайте POST элемент данных с URL:
http://localhost:9200/str/values/_search?scroll=10s - Настройте следующее тело POST, чтобы получать загрузку процессора (среднее значение за 1 минуту по каждому ядру)
{
"query": {
"bool": {
"must": [{
"match": {
"itemid": 28275
}
}],
"filter": [{
"range": {
"clock": {
"gt": 1517565836,
"lte": 1517566137
}
}
}]
}
}
}
- Получено:
{
"_scroll_id": "DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAAAkFllRMlZBWS1UU1pxTmdEeGVwQjRBTFEAAAAAAAAAJRZZUTJWQVktVFNacU5nRHhlcEI0QUxRAAAAAAAAACYWWVEyVkFZLVRTWnFOZ0R4ZXBCNEFMUQAAAAAAAAAnFllRMlZBWS1UU1pxTmdEeGVwQjRBTFEAAAAAAAAAKBZZUTJWQVktVFNacU5nRHhlcEI0QUxR",
"took": 18,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1.0,
"hits": [{
"_index": "dbl",
"_type": "values",
"_id": "dqX9VWEBV6sEKSMyk6sw",
"_score": 1.0,
"_source": {
"itemid": 28275,
"value": "0.138750",
"clock": 1517566136,
"ns": 25388713,
"ttl": 604800
}
}]
}
}
- Теперь используйте шаг предварительной обработки JSONPath, чтобы получить значение элемента данных:
$.hits.hits[0]._source.value
Пример 3
Проверка, доступен ли Zabbix API, используя apiinfo.version.
- Настройка элемента данных:

Обратите внимание на использование метода POST с данными JSON, установку заголовков запроса и запрос на возврат только заголовков:
- Предварительная обработка значений элемента данных при помощи регулярного выражения, чтобы получить HTTP код:

- Проверка результата в Последние данные:

Пример 4
Получение информации о погоде с публичного сервиса Openweathermap.
- Настройка основного элемента данных для массового сбора данных в одном JSON:

Обратите внимание на использование макросов в полях запроса. Обратитесь к Openweathermap API [en] для получения подробных сведений о том, чем их заполнять.
Пример JSON, который вернулся в ответе HTTP агенту:
{
"body": {
"coord": {
"lon": 40.01,
"lat": 56.11
},
"weather": [{
"id": 801,
"main": "Clouds",
"description": "few clouds",
"icon": "02n"
}],
"base": "stations",
"main": {
"temp": 15.14,
"pressure": 1012.6,
"humidity": 66,
"temp_min": 15.14,
"temp_max": 15.14,
"sea_level": 1030.91,
"grnd_level": 1012.6
},
"wind": {
"speed": 1.86,
"deg": 246.001
},
"clouds": {
"all": 20
},
"dt": 1526509427,
"sys": {
"message": 0.0035,
"country": "RU",
"sunrise": 1526432608,
"sunset": 1526491828
},
"id": 487837,
"name": "Stavrovo",
"cod": 200
}
}
Следующая задача — настройка зависимых элементов данных, которые извлекут данные из JSON.
- Настройка примера зависимого элемента данных для влажности:

Другие метрики погоды, такие как «Температура», добавляются тем же способом.
- Пример предобработки значений зависимого элемента данных с использованием JSONPath:

- Проверка результата данных о погоде в Последние данные:

Пример 5
Подключение в странице состояния Nginx и получение его метрик за один запрос.
- Настройте Nginx, следуя официальному руководству.
- Настройте основной элемент данных для массового сбора данных:

Пример вывода состояния Nginx stub:
Active connections: 1 Active connections:
server accepts handled requests
52 52 52
Reading: 0 Writing: 1 Waiting: 0
Следующая задача — настроить зависимые элементы данных, которые извлекают необходимые данные.
- Настройка примера зависимого элемента данных для запросов в секунду:

- Настройка предварительной обработки значений зависимого элемента данных при помощи регулярного выражения
server accepts handled requests\s+([0-9]+) ([0-9]+) ([0-9]+):

- Проверьте полученный результат от модуля stub в Последние данные:

