9 HTTP агент
Обзор
Этот тип элемента данных позволяет выполнять опрос данных по протоколу HTTP/HTTPS.
Также возможен trapping с использованием утилиты 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:
| 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" |
| 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. Если значение не указано, прокси не будет переопределять связанные с прокси переменные окружения. Введенное значение передается "как есть", без какой-либо проверки корректности.Примечание: с 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-ключа пустым. Если ключ зашифрован, укажите пароль в поле пароля 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 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, либо будет принимать данные, отправленные на сервер Zabbix с помощью метода API history.push. Дополнительные сведения об отправке данных см. в разделе: Элементы данных типа trapper. |
| Allowed hosts | Видно только если установлен флажок Enable trapping. Список 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
Проверка доступности 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.
- Настройте пример зависимого элемента для влажности:

Другие погодные показатели, такие как '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 в Последние данные:

