16 HTTP агент

Обзор

Этот тип элемента данных позволяет получать данные с использованием HTTP/HTTPS протокола. Трапы также возможны с использованием Zabbix sender или протокола Zabbix sender.

Проверка HTTP элемента данных выполняется на стороне Zabbix сервера. Однако, если узлы сети наблюдаются через Zabbix прокси, проверки HTTP элементов данных выполняются этими прокси.

Проверки HTTP элементов данных не требуют наличия какого-либо агента, запущенного на наблюдаемом узле сети.

HTTP агент поддерживает как HTTP, так и HTTPS. Zabbix будет опционально следовать перенаправлениям (смотрите ниже опцию Следовать перенаправлениям). Максимальное количество перенаправлений вшито в код и равно 10 (используется cURL опция CURLOPT_MAXREDIRS).

Zabbix сервер/прокси должны быть изначально сконфигурированы с поддержкой cURL (libcurl).

Настройка

Для настройки HTTP элемента данных:

  • Перейдите в: НастройкаУзлы сети
  • Нажмите на Элементы данных в строке с узлом сети
  • Нажмите на Создать элемент данных
  • Введите параметры элемента данных в диалоге

Все обязательные поля ввода отмечены красной звёздочкой.

Поля, которые требуют специфичную информацию HTTP элементов данных:

Параметр Описание
Тип Здесь выберите HTTP агент.
Ключ Введите уникальный ключ элемента данных.
URL URL для подключения и получения данных. Например:
https://www.google.com
http://www.zabbix.com/download
Имена доменов можно указывать Юникод символами. Они автоматически конвертируются методом punycode в ASCII при выполнении HTTP проверки.
Кнопку Анализ можно использовать, чтобы отделить из URL опциональные поля запроса (например, ?name=Admin&password=mypassword), переместив атрибуты и значения в Поля запроса, чтобы URL кодировка выполнялась автоматически.
Ограничено 2048 символами.
Поддерживаемые макросы: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, пользовательские макросы, макросы низкоуровневого обнаружения.
Это поле задает CURLOPT_URL [en] опцию cURL.
Поля запроса Переменные для URL (см. выше).
Задаются в виде пар атрибутов и значений.
Значения автоматически URL-кодируются. Значения с макросов раскрываются и затем автоматически URL-кодируются.
Поддерживаемые макросы: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, пользовательские макросы, макросы низкоуровневого обнаружения.
Это поле задает CURLOPT_URL [en] опцию cURL.
Тип запроса Выберите тип метода запроса: GET, POST, PUT или HEAD
Время ожидания Zabbix не будет тратить более указанного времени при обработке URL (1-60 секунд). В действительности же этот параметр определяет максимальное время создания подключения к URL и максимальное время выполнения HTTP запроса. Следовательно, Zabbix не будет тратить более 2 x Время ожидания секунд за одну проверку.
Поддерживаются суффиксы времени, например, 30s, 1m.
Поддерживаемые макросы: пользовательские макросы, макросы низкоуровневого обнаружения.
Это поле задает CURLOPT_TIMEOUT [en] опцию cURL.
Тип тела запроса Выберите тип запроса тела:
Сырые данные - пользовательское тело HTTP запроса, макросы заменяются, но кодирование не выполняется
JSON данные - тело HTTP запроса в формате JSON. Макросы можно использовать в виде строк, чисел, true или false; макросы, которые используются в виде строки, должны быть заключены в двойные кавычки. Значения из макросов раскрываются и затем экранируются автоматически. Если в заголовках "Content-Type" не задан , тогда будет указано значение по умолчанию "Content-Type: application/json"
XML данные - тело HTTP запроса в формате XML. Макросы можно использовать в виде нод текста, атрибутов или CDATA секции. Значения из макросов раскрываются и затем экранируются автоматически в нодах текста и в атрибутах. Если в заголовках "Content-Type" не задан, тогда будет указано значение по умолчанию "Content-Type: application/xml"
Обратите внимание, что выбор XML данные требует наличия поддержки libxml2.
Тело запроса Введите тело запроса.
Поддерживаемые макросы: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, пользовательские макросы, макросы низкоуровневого обнаружения.
Заголовки Пользовательские HTTP заголовки, которые будут отправлены при выполнении запроса.
Задаются в виде пар атрибутов и значений.
Поддерживаемые макросы: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, пользовательские макросы, макросы низкоуровневого обнаружения.
Это поле задает CURLOPT_HTTPHEADER [en] опцию cURL.
Требуемые коды состояния Список ожидаемых кодов состояния HTTP. Если Zabbix получает код не из списка, то элемент данных станет неподдерживаемым. Если поле не заполнено, то проверка не производится.
Например: 200,201,210-299
Поддерживаемые макросы в этом списке: пользовательские макросы, макросы низкоуровневого обнаружения.
Это поле задает CURLINFO_RESPONSE_CODE [en] опцию cURL.
Следовать перенаправлениям Отметьте для следования HTTP перенаправлениям.
Это поле задает CURLOPT_FOLLOWLOCATION [en] опцию cURL.
Режим получения Выберите часть ответа, которую необходимо получать:
Тело - только тело
Заголовки - только заголовки
Тело и заголовки - тело и заголовки
Конвертация в JSON Заголовки сохраняются в виде пар атрибутов и значений под ключом "header".
Если встречается 'Content-Type: application/json', тогда тело сохраняется в виде объекта, в противном случае оно сохраняется в виде строки, например:
HTTP прокси Вы можете указать необходимый HTTP прокси, следуя следующему формату: [протокол://][имя пользователя[:пароль]@]прокси.mycompany.com[:порт]
Можно использовать опциональный префикс протокол://, чтобы указать альтернативные протоколы прокси (например: https, socks4, socks5; смотрите документацию; поддержка префиксов протоколов добавлена в cURL 7.21.7). Если протокол не указан, прокси будет обрабатываться как HTTP прокси. Если вы укажете ошибочный протокол, подключение завершится неудачей и элемент данных перейдёт в неподдерживаемое состояние.
По умолчанию будет использоваться порт 1080.
Если этот параметр указан, прокси заменит переменные окружения, связанные с прокси - такие как http_proxy, HTTPS_PROXY. Если не указан, переменные окружения не будут заменены. Введённое значение передается "как есть", проверка корректности ввода не производится.
Примечание: Для HTTP прокси поддерживается только простая аутентификация.
Поддерживаемые макросы: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, пользовательские макросы, макросы низкоуровневого обнаружения.
Это поле задает CURLOPT_PROXY [en] опцию cURL.
HTTP Аутентификация Тип аутентификации:
Пусто - без использования аутентификации.
Простая аутентификация - с использованием простой аутентификации.
NTLM аутентификация - с использованием NTLM (Windows NT LAN Manager) аутентификации.
Kerberos - с использованием Kerberos аутентификации. Смотрите также: Настройка Kerberos с Zabbix.
Digest - с использованием Digest аутентификации.
После выбора какой-либо метода аутентификации, будут доступны два дополнительных поля для ввода имени пользователя и пароля, в которых поддерживаются пользовательские макросы и макросы низкоуровневого обнаружения.
Это поле задает CURLOPT_HTTPAUTH [en] опцию cURL.
Проверка SSL узла Отметьте для верификации SSL сертификата веб-сервера. Сертификат сервера будет автоматически взят из места центра сертификации (CA) всей системы. Вы можете переопределить расположение CA файлов, воспользовавшись параметром конфигурации SSLCALocation на стороне Zabbix сервера или прокси.
Это поле задает CURLOPT_SSL_VERIFYPEER [en] опцию cURL.
Проверка SSL хоста Отметьте для удостоверения, что поле Common Name или поле Subject Alternate Name сертификата веб-сервера совпадают.
Это поле задает CURLOPT_SSL_VERIFYHOST [en] опцию cURL.
Файл SSL сертификата Имя файла SSL сертификата для аутентификации клиента. Файл сертификата должен быть в формате PEM1. Если файл сертификата также содержит и закрытый ключ (private key), оставьте поле Файл SSL ключа пустым. Если ключ зашифрован, укажите пароль в поле Пароль к SSL ключу. Папка, содержащая этот файл, указывается в параметре конфигурации SSLCertLocation Zabbix сервера или прокси.
Поддерживаемые макросы: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, пользовательские макросы, макросы низкоуровневого обнаружения.
Это поле задает CURLOPT_SSLCERT [en] опцию cURL.
Файл SSL ключа Имя файла закрытого ключа SSL (private key), который используется для аутентификации клиента. Файл закрытого ключа должен быть в формате PEM1. Папка, содержащая этот файл, указывается в параметре конфигурации SSLKeyLocation Zabbix сервера или прокси.
Поддерживаемые макросы: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, пользовательские макросы, макросы низкоуровневого обнаружения.
Это поле задает CURLOPT_SSLKEY [en] опцию cURL.
Пароль к SSL ключу Пароль к файлу закрытого ключа.
Поддерживаемые макросы: пользовательские макросы, макросы низкоуровневого обнаружения.
Это поле задает CURLOPT_KEYPASSWD [en] опцию cURL.
Активировать трапы При включении этой опции, элемент данных будет работать также и как траппер элемент данных и будет принимать данные, которые отправляются на этот элемент данных при помощи Zabbix sender или с использованием протокола Zabbix sender.
Разрешенные хосты Доступно только, если выбрана опция Активировать трапы.
Список разделенных запятыми 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-совместимые 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. Более подробная информация доступна при выполнении shell команды # man curl.

[1] Zabbix поддерживает файлы сертификатов и закрытых ключей (private keys) только в формате 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 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 в Последние данные: