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-проверки они автоматически преобразуются в ASCII с использованием punycode. Кнопка Разобрать позволяет отделить необязательные поля запроса (например, ?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 |
| Тип тела запроса | Выберите тип тела запроса: Необработанные данные — пользовательское тело HTTP-запроса; макросы подставляются, но кодирование не выполняется Данные JSON — тело HTTP-запроса в формате JSON. Макросы можно использовать как строки, числа, true и false; макросы, используемые как строки, необходимо заключать в двойные кавычки. Значения макросов сначала подставляются, а затем автоматически экранируются. Если в заголовках не указан "Content-Type", по умолчанию используется "Content-Type: application/json" Данные XML — тело 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; см. документацию; поддержка префикса протокола добавлена в 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 — используется дайджест-аутентификация. Задается параметр cURL CURLOPT_HTTPAUTH. |
| Имя пользователя | Введите имя пользователя (до 255 символов). Это поле доступно, если для параметра HTTP-аутентификация выбрано значение Basic, NTLM, Kerberos или Digest. Поддерживаются пользовательские макросы и макросы обнаружения низкого уровня. |
| Пароль | Введите пароль пользователя (до 255 символов). Это поле доступно, если для параметра HTTP-аутентификация выбрано значение Basic, NTLM, Kerberos или Digest. Поддерживаются пользовательские макросы и макросы обнаружения низкого уровня. |
| Проверять SSL-сертификат узла | Установите флажок, чтобы проверять SSL-сертификат веб-сервера. Сертификат сервера проверяется по сертификатам доверенных центров сертификации (CA) из общесистемного расположения CA. Расположение файлов CA можно переопределить с помощью параметра конфигурации сервера Zabbix или прокси SSLCALocation. Задается параметр cURL CURLOPT_SSL_VERIFYPEER. |
| Проверять имя узла SSL | Установите флажок, чтобы проверять соответствие поля Common Name или Subject Alternate Name сертификата веб-сервера. Задается параметр cURL CURLOPT_SSL_VERIFYHOST. |
| Файл SSL-сертификата | Имя файла SSL-сертификата, используемого для аутентификации клиента. Файл сертификата должен быть в формате PEM1. Если файл сертификата также содержит закрытый ключ, оставьте поле файла SSL-ключа пустым. Если ключ зашифрован, укажите пароль в поле пароля SSL-ключа. Каталог, содержащий этот файл, задается параметром конфигурации сервера Zabbix или прокси 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 или прокси 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.Дополнительную информацию о параметре Тайм-аут см. в разделе общие атрибуты элементов данных. |
| Включить прием данных | Если этот флажок установлен, элемент данных также будет работать как элемент данных-траппер и принимать данные, отправленные на сервер Zabbix или прокси с помощью утилиты Zabbix sender или протокола Zabbix sender, либо принимать данные, отправленные на сервер Zabbix с помощью метода API history.push. Дополнительную информацию об отправке данных см. в разделе: Элементы данных-трапперы. |
| Разрешенные узлы сети | Отображается только если установлен флажок Включить прием данных. Список 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-совместимые IPv6-адреса» (префикс 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 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 в соответствии с официальным руководством.
- Настройте главный элемент данных для пакетного сбора данных:

Пример вывода статуса 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]+):

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

