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

Все обязательные поля ввода отмечены красной звездочкой.
Поля, которые требуют указания специальной информации для элементов данных HTTP:
| Параметр | Описание |
|---|---|
| Тип | Выберите здесь HTTP agent. |
| Ключ | Введите уникальный ключ элемента данных. |
| 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. |
| Тип запроса | Выберите тип метода запроса: GET, POST, PUT или HEAD |
| Тип тела запроса | Выберите тип тела запроса: 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" |
| Тело запроса | Введите тело запроса. Поддерживаемые макросы: {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. |
| Режим получения | Выберите часть ответа, которую нужно получить: Body - только тело Headers - только заголовки Body and headers - тело и заголовки |
| Преобразовать в JSON | Заголовки сохраняются как пары атрибутов и значений под ключом "header", если для Режим получения не выбрано 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. Если не указано, прокси не будет переопределять связанные с прокси переменные окружения. Введенное значение передается "как есть", без какой-либо проверки корректности.Примечание: с HTTP-прокси поддерживается только простая аутентификация. Поддерживаемые макросы: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, пользовательские макросы, макросы низкоуровневого обнаружения.Это задает параметр cURL CURLOPT_PROXY. |
| HTTP-аутентификация | Выберите вариант аутентификации: None - аутентификация не используется; 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 с помощью параметра конфигурации Zabbix server или proxy SSLCALocation. Это задает параметр cURL CURLOPT_SSL_VERIFYPEER. |
| Проверять SSL-сертификат узла по имени | Отметьте флажок, чтобы проверить соответствие полю Common Name или полю Subject Alternate Name в сертификате веб-сервера. Это задает параметр cURL CURLOPT_SSL_VERIFYHOST. |
| Файл SSL-сертификата | Имя файла SSL-сертификата, используемого для аутентификации клиента. Файл сертификата должен быть в формате PEM1. Если файл сертификата также содержит закрытый ключ, оставьте поле файла SSL-ключа пустым. Если ключ зашифрован, укажите пароль в поле пароля SSL-ключа. Каталог, содержащий этот файл, задается параметром конфигурации 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-ключа | Имя файла закрытого 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-ключа | Пароль файла закрытого 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-имен. Значение по умолчанию — пользовательский макрос {$TRAPPER.ALLOWED_HOSTS}. По умолчанию {$TRAPPER.ALLOWED_HOSTS} равно 127.0.0.1,::1. Вы можете либо ввести адреса непосредственно в поле, либо изменить значение макроса. Если поле оставить пустым, входящие соединения будут запрещены со всех узлов. Если значение указано, входящие соединения будут приниматься только от перечисленных здесь узлов.Если включена поддержка 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 prefix) поддерживаются, но считаются устаревшими согласно 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 body, чтобы получить загрузку процессора (среднее за 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
Проверка доступности API Zabbix с использованием 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.
- Настройте пример зависимого элемента для влажности:

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

- Проверьте результат данных о погоде в Latest data:

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

Пример вывода stub status Nginx:
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 в Последние данные:

