Это перевод страницы документации с английского языка. Помогите нам сделать его лучше.

17 HTTP агент

Обзор

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

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

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

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

Смотрите также известные проблемы при использовании HTTPS протокола.

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

Настройка

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

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

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

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

Тип Выберите здесь HTTP агент.
Ключ Введите уникальный ключ элемента данных.
URL URL для подключения и получения данных. Например:
https://www.google.com
http://www.zabbix.com/download
Имена доментов можно указывать Юникод символами. Они автоматически конвертируются методом punycode в ASCII при выполнении шага веб-сценария.
Кнопку Анализ можно использовать чтобы отделить из URL опциональные поля запроса (например, ?name=Admin&password=mypassword), переместив атрибуты и значения в Поля запроса, чтобы URL кодировка выполнялась автоматически.
Ограничено 2048 символами.
Поддерживаемые макросы: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, пользовательские макросы, макросы низкоуровневого обнаружения.
Это поле задает CURLOPT_URL [en] опцию cURL.
Поля запроса Переменные для URL (см. выше).
Задаются в виде пар атрибутов и значений.
Значения URL кодируются автоматически. Значения с макросов раскрываются и затем URL кодируются автоматически.
Поддерживаемые макросы: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, пользовательские макросы, макросы низкоуровневого обнаружения.
Это поле задает CURLOPT_URL [en] опцию cURL.
Тип запроса Выберите тип метода запроса: GET, POST, PUT или HEAD
Время ожидания Zabbix не будет тратить более указанного времени при обработке URL (максимум 1 минута). В действительности же этот параметр определяет максимальное время содания подключения к 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}, пользовательские макросы, макросы низкоуровневого обнаружения.
Заголовки Пользовательские HTTP заголовки, которые будут отправлены при выполнении запроса.
Задаются в виде пар атрибутов и значений.
Поддерживаемые макросы: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, пользовательские макросы, макросы низкоуровневого обнаружения.
Это поле задает 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 прокси, следуя следующему формату: http://[имя пользователя[:пароль]@]прокси.mycompany.com[:порт]
По умолчанию будет использоваться порт 1080.
Если указан, прокси заменит переменные окружения связанные с прокси такие как http_proxy, HTTPS_PROXY. Если не указан, переменные окружения не будут заменены. Введённое значение передается "как есть", проверка правильности не производится.
Вы также можете указать адрес SOCKS прокси. Если вы укажите ошибочный протокол, подключение провалится и элемент данных станет неподдерживаемым. Если протокол не указан, прокси будет считаться HTTP прокси.
Примечание: Для HTTP прокси поддерживается только простая аутентификация.
Поддерживаемые макросы: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, пользовательские макросы, макросы низкоуровневого обнаружения.
Это поле задает CURLOPT_PROXY [en] опцию cURL.
HTTP Аутентификация Тип аутентификации:
Пусто - без использования аутентификации.
Простая аутентификация - с использованием простой аутентификации.
NTLM аутентификация - с использованием NTLM (Windows NT LAN Manager) аутентификации.
Выбрав какой-либо метод аутентификации, будут доступны доступны два дополнительных поля для ввода имени пользователя и пароля, в которых поддерживаются пользовательские макросы и макросы низкоуровневого обнаружения.
Это поле задает 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. Если файл сертификата также содержит и приватный ключ, оставьте поле Файл SSL ключа пустым. Если ключ зашифрован, укажите пароль в поле Пароль к SSL ключу. Папка, содержащая этот файл указывается в параметре конфигурации SSLCertLocation Zabbix сервера или прокси.
Поддерживаемые макросы: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, пользовательские макросы, макросы низкоуровневого обнаружения.
Это поле задает CURLOPT_SSLCERT [en] опцию cURL.
Файл SSL ключа Имя файла приватного SSL ключа, который используется для аутентификации клиента. Файл приватного ключа должен быть в формате PEM1. Папка, содержащая этот файл указывается в параметре конфигурации SSLKeyLocation Zabbix сервера или прокси.
Поддерживаемые макросы: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, пользовательские макросы, макросы низкоуровневого обнаружения.
Это поле задает CURLOPT_SSLKEY [en] опцию cURL.
Пароль к SSL ключу Пароль к файлу приватного ключа.
Поддерживаемые макросы: пользовательские макросы, макросы низкоуровневого обнаружения.
Это поле задает CURLOPT_KEYPASSWD [en] опцию cURL.
Активировать трапы При наличии этой опции, элемент данных будет работать как траппер элемент данных и будет принимать данные, которые отправляются на этот элемент данных при помощи Zabbix sender или с использованием протокола Zabbix sender.
Разрешенные хосты Видимо только, если выбрана опция Активировать трапы.
Список разделенных запятыми IP адресов, опционально в CIDR представлении, или имена узлов сети.
Если задано, входящие подключения будут приниматься только с перечисленных здесь узлов сети.
Если включена поддержка 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.

Пример: Server=127.0.0.1,192.168.1.0/24,::1,2001:db8::/32,zabbix.domain
В этом поле разрешены пробелы и пользовательские макросы.

Если поле 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 поддерживает файлы сертификатов и приватных ключей только в 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

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

  • Настройка примера зависимого элемента данных для запросов в секунду:

  • Настройка предобработки значений зависимого элемента данных при помощи регулярного выражения:

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