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

Все обязательные поля ввода отмечены красной звездочкой.
Поля, требующие специальной информации для HTTP-элементов данных:
| Параметр | Описание |
|---|---|
| Тип | Выберите здесь HTTP агент. |
| Ключ | Введите уникальный ключ элемента данных. |
| URL | URL для подключения и получения данных. Например: https://www.example.com http://www.example.com/download Доменные имена могут быть указаны символами Unicode. При выполнении HTTP-проверки они автоматически преобразуются в punycode и затем в ASCII. Кнопка Parse может использоваться для отделения необязательных полей запроса (например, ?name=Admin&password=mypassword) от URL, перемещая атрибуты и значения в Поля запроса для автоматического URL-кодирования. Ограничено 2048 символами. Поддерживаемые макросы: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, пользовательские макросы, макросы низкоуровневого обнаружения. Устанавливает параметр cURL CURLOPT_URL. |
| Поля запроса | Переменные для 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. |
| Тип запроса | Выберите тип метода запроса: GET, POST, PUT или HEAD |
| Тип тела запроса | Выберите тип тела запроса: Raw data - пользовательское тело HTTP-запроса, макросы подставляются, но кодирование не выполняется JSON data - тело HTTP-запроса в формате JSON. Макросы могут использоваться как string, number, true и false; макросы, используемые как строки, должны быть заключены в двойные кавычки. Значения из макросов сначала разрешаются, а затем автоматически экранируются. Если "Content-Type" не указан в заголовках, по умолчанию будет использоваться "Content-Type: application/json" XML data - тело HTTP-запроса в формате XML. Макросы могут использоваться как текстовый узел, атрибут или секция CDATA. Значения из макросов сначала разрешаются, а затем автоматически экранируются в текстовом узле и атрибуте. Если "Content-Type" не указан в заголовках, по умолчанию будет использоваться "Content-Type: application/xml" |
| Тело запроса | Введите тело запроса. Поддерживаемые макросы: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, пользовательские макросы, макросы низкоуровневого обнаружения. |
| Заголовки | Пользовательские HTTP-заголовки, которые будут отправлены при выполнении запроса. Указываются как пары атрибут-значение. Поддерживаемые макросы: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, пользовательские макросы, макросы низкоуровневого обнаружения. Устанавливает параметр cURL CURLOPT_HTTPHEADER. |
| Требуемые коды состояния | Список ожидаемых HTTP-кодов состояния. Если Zabbix получит код, которого нет в списке, элемент данных станет неподдерживаемым. Если поле пустое, проверка не выполняется. Например: 200,201,210-299 Поддерживаемые макросы в списке: пользовательские макросы, макросы низкоуровневого обнаружения. Использует параметр cURL CURLINFO_RESPONSE_CODE. |
| Следовать перенаправлениям | Установите этот флажок, чтобы следовать HTTP-перенаправлениям. Устанавливает параметр cURL CURLOPT_FOLLOWLOCATION. |
| Режим получения | Выберите часть ответа, которую необходимо получить: Тело - только тело Заголовки - только заголовки Тело и заголовки - тело и заголовки |
| Преобразовать в JSON | Заголовки сохраняются как пары атрибут-значение под ключом "header", если Режим получения не установлен в Тело. Если обнаружен 'Content-Type: application/json', тогда тело сохраняется как объект, в противном случае оно сохраняется как строка, например: ![]() |
| HTTP прокси | Вы можете указать HTTP-прокси для использования в формате [protocol://][username[:password]@]proxy.example.com[:port].Необязательный префикс protocol:// может использоваться для указания альтернативных протоколов прокси (например, https, socks4, socks5; см. documentation; поддержка префикса протокола была добавлена в cURL 7.21.7). Если протокол не указан, прокси будет рассматриваться как HTTP-прокси. Если вы укажете неверный протокол, соединение завершится ошибкой, и элемент данных станет неподдерживаемым.По умолчанию будет использоваться порт 1080. Если указано, прокси переопределит связанные с прокси переменные окружения, такие как http_proxy, HTTPS_PROXY. Если не указано, прокси не будет переопределять связанные с прокси переменные окружения. Введенное значение передается "как есть", без какой-либо проверки корректности. Обратите внимание, что с HTTP-прокси поддерживается только простая аутентификация. Поддерживаемые макросы: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, пользовательские макросы, макросы низкоуровневого обнаружения. Устанавливает параметр cURL CURLOPT_PROXY. |
| HTTP аутентификация | Выберите вариант аутентификации: Нет - аутентификация не используется; Basic - используется базовая аутентификация; NTLM - используется аутентификация NTLM (Windows NT LAN Manager); Kerberos - используется аутентификация Kerberos (см. также: Настройка Kerberos в Zabbix); Digest - используется аутентификация Digest. Устанавливает параметр cURL CURLOPT_HTTPAUTH. |
| Имя пользователя | Введите имя пользователя (до 255 символов). Это поле доступно, если для HTTP аутентификация установлено значение Basic, NTLM, Kerberos или Digest. Поддерживаются пользовательские макросы и макросы низкоуровневого обнаружения. |
| Пароль | Введите пароль пользователя (до 255 символов). Это поле доступно, если для HTTP аутентификация установлено значение Basic, NTLM, Kerberos или Digest. Поддерживаются пользовательские макросы и макросы низкоуровневого обнаружения. |
| Проверять SSL-сертификат узла | Установите этот флажок, чтобы проверять SSL-сертификат веб-сервера. Сертификат сервера будет автоматически взят из общесистемного расположения центра сертификации (CA). Вы можете переопределить расположение файлов CA с помощью параметра конфигурации сервера или прокси SSLCALocation. Устанавливает параметр cURL CURLOPT_SSL_VERIFYPEER. |
| Проверять SSL-имя узла | Установите этот флажок, чтобы проверять совпадение поля Common Name или поля Subject Alternate Name сертификата веб-сервера. Устанавливает параметр cURL CURLOPT_SSL_VERIFYHOST. |
| Файл SSL-сертификата | Имя файла SSL-сертификата, используемого для аутентификации клиента. Файл сертификата должен быть в формате PEM1. Если файл сертификата также содержит закрытый ключ, оставьте поле файла SSL-ключа пустым. Если ключ зашифрован, укажите пароль в поле пароля SSL-ключа. Каталог, содержащий этот файл, задается параметром конфигурации сервера или прокси SSLCertLocation. Поддерживаемые макросы: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, пользовательские макросы, макросы низкоуровневого обнаружения. Устанавливает параметр cURL CURLOPT_SSLCERT. |
| Файл SSL-ключа | Имя файла закрытого SSL-ключа, используемого для аутентификации клиента. Файл закрытого ключа должен быть в формате PEM1. Каталог, содержащий этот файл, задается параметром конфигурации сервера или прокси SSLKeyLocation. Поддерживаемые макросы: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, пользовательские макросы, макросы низкоуровневого обнаружения. Устанавливает параметр cURL CURLOPT_SSLKEY. |
| Пароль SSL-ключа | Пароль файла закрытого SSL-ключа. Поддерживаемые макросы: пользовательские макросы, макросы низкоуровневого обнаружения. Устанавливает параметр cURL CURLOPT_KEYPASSWD. |
| Тайм-аут | Zabbix не будет тратить на обработку URL больше заданного времени (1-600 секунд). Фактически этот параметр определяет максимальное время для установления соединения с URL и максимальное время для выполнения HTTP-запроса. Таким образом, Zabbix не будет тратить на одну проверку более 2 x Тайм-аут секунд. Устанавливает параметр cURL CURLOPT_TIMEOUT. Дополнительную информацию о параметре Тайм-аут см. в разделе общие атрибуты элемента данных. |
| Включить траппинг | Если этот флажок установлен, элемент данных также будет функционировать как элемент данных trapper и будет принимать данные, отправленные на сервер или прокси Zabbix с помощью утилиты Zabbix sender или протокола Zabbix sender, либо будет принимать данные, отправленные на сервер Zabbix с помощью метода API history.push. Дополнительную информацию об отправке данных см. в разделе: Элементы данных trapper. |
| Разрешенные узлы сети | Отображается только если установлен флажок Включить траппинг. Список 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 прокси оставлено пустым, другим способом использования 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, чтобы узнать, как их заполнять.
Пример 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-модуля в разделе Последние данные:

