7 Веб-мониторинг

Обзор

С помощью Zabbix вы можете проверять несколько аспектов доступности веб-сайтов.

Для выполнения веб-мониторинга сервер Zabbix должен быть сначала настроен с поддержкой cURL (libcurl).

Чтобы включить веб-мониторинг, необходимо определить веб-сценарии. Веб-сценарий состоит из одного или нескольких HTTP-запросов, или "шагов". Шаги периодически выполняются сервером Zabbix в заранее заданном порядке. Если узел сети мониторится через прокси, шаги выполняются прокси.

Веб-сценарии привязываются к узлам сети/шаблонам так же, как элементы данных, триггеры и т. д. Это означает, что веб-сценарии также можно создавать на уровне шаблона, а затем применять к нескольким узлам сети за один раз.

В любом веб-сценарии собирается следующая информация:

  • средняя скорость загрузки в секунду для всех шагов всего сценария
  • номер шага, на котором произошел сбой
  • последнее сообщение об ошибке

В любом шаге веб-сценария собирается следующая информация:

  • скорость загрузки в секунду
  • время отклика
  • код ответа

Подробнее см. элементы данных веб-мониторинга.

Данные, собранные при выполнении веб-сценариев, сохраняются в базе данных. Эти данные автоматически используются для графиков, триггеров и уведомлений.

Zabbix также может проверять, содержит ли полученная HTML-страница заранее заданную строку. Он может выполнять имитацию входа в систему и следовать по пути имитируемых щелчков мышью на странице.

Веб-мониторинг Zabbix поддерживает HTTP и HTTPS. При выполнении веб-сценария Zabbix при необходимости будет следовать перенаправлениям (см. параметр Follow redirects ниже). Максимальное число перенаправлений жестко задано равным 10 (с использованием параметра cURL CURLOPT_MAXREDIRS). Все cookies сохраняются в течение выполнения одного сценария.

Настройка веб-сценария

Чтобы настроить веб-сценарий:

  • Перейдите в: Сбор данных → Узлы сети (или Шаблоны)
  • Нажмите Web в строке узла сети/шаблона
  • Нажмите Создать веб-сценарий справа (или на имени сценария, чтобы изменить существующий сценарий)
  • Введите параметры сценария в форме

Вкладка Сценарий позволяет настроить общие параметры веб-сценария.

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

Параметры сценария:

Parameter Description
Name Уникальное имя сценария.
Поддерживаются пользовательские макросы. Примечание: если используются пользовательские макросы, эти макросы останутся неразрешенными в именах элементов данных веб-мониторинга.
Update interval Как часто будет выполняться сценарий.
Поддерживаются суффиксы времени, например 30s, 1m, 2h, 1d.
Поддерживаются пользовательские макросы. Примечание: если используется пользовательский макрос и его значение изменяется (например, 5m → 30s), следующий опрос будет выполнен в соответствии с предыдущим значением (в примере — позже).
Новые веб-сценарии будут проверены в течение 60 секунд после создания.
Attempts Количество попыток выполнения шагов веб-сценария. В случае сетевых проблем (тайм-аут, отсутствие соединения и т. д.) Zabbix может повторить выполнение шага несколько раз. Указанное значение одинаково влияет на каждый шаг сценария. Можно указать до 10 попыток, значение по умолчанию — 1.
Примечание: Zabbix не будет повторять шаг из-за неверного кода ответа или несоответствия требуемой строки.
Agent Выберите клиентский агент.
Zabbix будет имитировать выбранный браузер. Это полезно, когда веб-сайт возвращает разное содержимое для разных браузеров.
В этом поле можно использовать пользовательские макросы.
HTTP proxy Можно указать HTTP-прокси для использования в формате [protocol://][username[:password]@]proxy.example.com[:port].
Это задает опцию cURL CURLOPT_PROXY.
Необязательный префикс protocol:// можно использовать для указания альтернативных протоколов прокси (поддержка префикса протокола была добавлена в cURL 7.21.7). Если протокол не указан, прокси будет считаться HTTP-прокси.
По умолчанию будет использоваться порт 1080.
Если значение указано, прокси переопределит связанные с прокси переменные окружения, такие как http_proxy, HTTPS_PROXY. Если не указано, прокси не будет переопределять связанные с прокси переменные окружения. Введенное значение передается "как есть", без какой-либо проверки корректности.
Также можно указать адрес SOCKS-прокси. Если указан неверный протокол, соединение завершится неудачей, и элемент данных станет неподдерживаемым.
Примечание: с HTTP-прокси поддерживается только простая аутентификация.
В этом поле можно использовать пользовательские макросы.
Variables Переменные, которые можно использовать в шагах сценария (URL, переменные POST).
Они имеют следующий формат:
{macro1}=value1
{macro2}=value2
{macro3}=regex:<regular expression>
{macro4}=jsonpath:<jsonpath>
{macro5}=xmlxpath:<xmlxpath>
{macro6}={{macro}.function()} (см. функции макросов)
Например:
{username}=Alexei
{password}=kj3h5kJ34bd
{hostid}=regex:hostid is ([0-9]+)
{url}=jsonpath:$.host_url
{status}=xmlxpath://host/response/status
{newvar}={{myvar}.btoa()}
Затем на эти макросы можно ссылаться в шагах как {username}, {password}, {hostid} и т. д. Zabbix автоматически заменит их фактическими значениями. Обратите внимание, что для переменных с regex: требуется один шаг, чтобы получить значение регулярного выражения, поэтому извлеченное значение можно применить только к следующему шагу.
Если часть значения начинается с regex:, то часть после нее рассматривается как регулярное выражение, которое выполняет поиск на веб-странице и, если совпадение найдено, сохраняет его в переменной. Должна присутствовать как минимум одна подгруппа, чтобы можно было извлечь совпавшее значение.
Поддерживаются пользовательские макросы и макросы}.
Переменные автоматически URL-кодируются при использовании в полях запроса или данных формы для переменных POST, но должны быть закодированы вручную при использовании в raw post или непосредственно в URL.
Headers HTTP-заголовки используются при выполнении запроса. Можно использовать стандартные и пользовательские заголовки.
Заголовки будут назначаться с использованием настроек по умолчанию в зависимости от типа Agent, выбранного из раскрывающегося списка на уровне сценария, и будут применяться ко всем шагам, если только они не определены как пользовательские на уровне шага.
Следует отметить, что определение заголовка на уровне шага автоматически отменяет все ранее определенные заголовки, кроме стандартного заголовка, который назначается путем выбора 'User-Agent' из раскрывающегося списка на уровне сценария.
Однако даже стандартный заголовок 'User-Agent' можно переопределить, указав его на уровне шага.
Чтобы снять заголовок на уровне сценария, заголовок следует указать по имени и оставить без значения на уровне шага.
Заголовки следует перечислять в том же синтаксисе, в каком они представлены в протоколе HTTP, при необходимости используя дополнительные возможности, поддерживаемые опцией cURL CURLOPT_HTTPHEADER.
Например:
Accept-Charset=utf-8
Accept-Language=en-US
Content-Type=application/xml; charset=utf-8
Поддерживаются пользовательские макросы и макросы}.
Enabled Сценарий активен, если этот флажок установлен, в противном случае — отключен.

Обратите внимание, что при редактировании существующего сценария в форме доступны две дополнительные кнопки:

Создать еще один сценарий на основе свойств существующего.
Удалить историю и тренды для сценария. Это заставит сервер немедленно выполнить сценарий после удаления данных.

Если поле 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.

Вкладка Шаги позволяет настроить шаги веб-сценария. Чтобы добавить шаг веб-сценария, нажмите Добавить в блоке Шаги.

Секретные пользовательские макросы не должны использоваться в URL, так как они будут преобразованы в "******".

Настройка шагов

Параметры шага:

Параметр Описание
Имя Уникальное имя шага.
Поддерживаются пользовательские макросы. Обратите внимание, что если используются пользовательские макросы, эти макросы останутся неразрешёнными в именах элементов данных веб-мониторинга.
URL URL для подключения и получения данных. Например:
https://www.example.com
http://www.example.com/download
Доменные имена могут быть указаны символами Unicode. При выполнении шага веб-сценария они автоматически преобразуются в punycode и затем в ASCII.
Кнопка Parse может использоваться для отделения необязательных полей запроса (например, ?name=Admin&password=mypassword) от URL, перемещая атрибуты и значения в Поля запроса для автоматического URL-кодирования.
В URL можно использовать переменные в синтаксисе {macro}. Переменные можно кодировать вручную с помощью синтаксиса {{macro}.urlencode()}.
Поддерживаются пользовательские макросы и макросы}.
Ограничено 2048 символами.
Поля запроса Переменные HTTP GET для URL.
Указываются как пары атрибут-значение.
Значения автоматически URL-кодируются. Значения из переменных сценария, пользовательских макросов или макросов {HOST.*} разрешаются, а затем автоматически URL-кодируются. Использование синтаксиса {{macro}.urlencode()} приведёт к двойному URL-кодированию.
Поддерживаются пользовательские макросы и макросы}.
Post Переменные HTTP POST.
В режиме Form data указываются как пары атрибут-значение.
Значения автоматически URL-кодируются. Значения из переменных сценария, пользовательских макросов или макросов {HOST.*} разрешаются, а затем автоматически URL-кодируются.
В режиме Raw data атрибуты/значения отображаются в одной строке и объединяются символом &.
Необработанные значения можно кодировать/декодировать вручную с помощью синтаксиса {{macro}.urlencode()} или {{macro}.urldecode()}.
Например: id=2345&userid={user}
Если {user} определён как переменная веб-сценария, при выполнении шага он будет заменён своим значением. Если вы хотите URL-кодировать переменную, замените {user} на {{user}.urlencode()}.
Поддерживаются пользовательские макросы и макросы}.
Переменные Переменные уровня шага, которые могут использоваться для функций GET и POST.
Указываются как пары атрибут-значение.
Переменные уровня шага переопределяют переменные уровня сценария или переменные из предыдущего шага. Однако значение переменной уровня шага влияет только на следующий шаг (а не на текущий шаг).
Они имеют следующий формат:
{macro}=value
{macro}=regex:<regular expression>
Дополнительную информацию см. в описании переменных на уровне сценария.
Переменные автоматически URL-кодируются при использовании в полях запроса или данных формы для post-переменных, но должны URL-кодироваться вручную при использовании в raw post или непосредственно в URL.
Заголовки Пользовательские HTTP-заголовки, которые будут отправлены при выполнении запроса.
Указываются как пары атрибут-значение.
Заголовок, определённый на уровне шага, будет использоваться только для этого конкретного шага.
Следует отметить, что определение заголовка на уровне шага автоматически отменяет все ранее определённые заголовки, за исключением заголовка по умолчанию, который назначается выбором 'User-Agent' из выпадающего списка на уровне сценария.
Однако даже заголовок 'User-Agent' по умолчанию может быть переопределён, если указать его на уровне шага.
Например, если задать имя заголовка, но не указывать значение, это снимет заголовок по умолчанию, заданный на уровне сценария.
Поддерживаются пользовательские макросы и макросы {HOST.*}.
Это задаёт параметр cURL CURLOPT_HTTPHEADER.
Следовать перенаправлениям Установите флажок, чтобы следовать HTTP-перенаправлениям.
Это задаёт параметр cURL CURLOPT_FOLLOWLOCATION.
Режим получения Выберите режим получения:
Body — получать только тело из HTTP-ответа
Headers — получать только заголовки из HTTP-ответа
Body and headers — получать тело и заголовки из HTTP-ответа
Тайм-аут Zabbix не будет тратить на обработку URL больше заданного времени (от одной секунды до максимум 1 часа). Фактически этот параметр определяет максимальное время для установления соединения с URL и максимальное время для выполнения HTTP-запроса. Следовательно, Zabbix не будет тратить на шаг более 2 x Timeout секунд.
Поддерживаются суффиксы времени, например 30s, 1m, 1h. Поддерживаются пользовательские макросы.
Обязательная строка Обязательный шаблон регулярного выражения.
Если полученное содержимое (HTML) не соответствует обязательному шаблону, шаг завершится ошибкой. Если поле пустое, проверка обязательной строки не выполняется.
Например:
Homepage of Zabbix
Welcome.*admin
Примечание: Ссылки на регулярные выражения, созданные в веб-интерфейсе Zabbix, в этом поле не поддерживаются.
Поддерживаются пользовательские макросы и макросы}.
Обязательные коды состояния Список ожидаемых HTTP-кодов состояния. Если Zabbix получает код, которого нет в списке, шаг завершится ошибкой.
Если поле пустое, проверка кодов состояния не выполняется.
Например: 200,201,210-299
Поддерживаются пользовательские макросы.

Любые изменения в шагах веб-сценария будут сохранены только после сохранения всего сценария.

См. также пример из реальной жизни того, как можно настроить шаги веб-мониторинга.

Настройка тегов

Вкладка Теги позволяет задать теги уровня сценария.

Теги позволяют фильтровать веб-сценарии и элементы данных веб-мониторинга.

Настройка аутентификации

Вкладка Authentication позволяет настроить параметры аутентификации сценария. Зеленая точка рядом с названием вкладки указывает, что включен какой-либо тип HTTP-аутентификации.

Параметры аутентификации:

Parameter Description
HTTP authentication Выберите вариант аутентификации:
None - аутентификация не используется;
Basic - используется базовая аутентификация;
NTLM - используется аутентификация NTLM (Windows NT LAN Manager);
Kerberos - используется аутентификация Kerberos (см. также: Настройка Kerberos в Zabbix);
Digest - используется аутентификация Digest.
User Введите имя пользователя (до 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 key file пустым. Если ключ зашифрован, укажите пароль в поле SSL key password. Каталог, содержащий этот файл, задается параметром конфигурации Zabbix server или proxy SSLCertLocation.
В этом поле можно использовать макросы HOST.* и макросы пользователя.
Это задает опцию cURL CURLOPT_SSLCERT.
SSL key file Имя файла закрытого SSL-ключа, используемого для аутентификации клиента. Файл закрытого ключа должен быть в формате PEM1. Каталог, содержащий этот файл, задается параметром конфигурации Zabbix server или proxy SSLKeyLocation.
В этом поле можно использовать макросы HOST.* и макросы пользователя.
Это задает опцию cURL CURLOPT_SSLKEY.
SSL key password Пароль файла закрытого SSL-ключа.
В этом поле можно использовать макросы пользователя.
Это задает опцию cURL CURLOPT_KEYPASSWD.

[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

Zabbix server подхватывает изменения в сертификатах без перезапуска.

Если у вас клиентский сертификат и закрытый ключ находятся в одном файле, просто укажите его в поле "SSL certificate file" и оставьте поле "SSL key file" пустым. Сертификат и ключ по-прежнему должны быть в формате PEM. Объединить сертификат и ключ просто:

cat client.crt client.key > client.pem

Отображение

Чтобы просмотреть веб-сценарии, настроенные для узла сети, перейдите в Monitoring → Hosts, найдите узел сети в списке и нажмите гиперссылку Web в последнем столбце. Нажмите на имя сценария, чтобы получить подробную информацию.

Обзор веб-сценариев также можно отобразить в Dashboards с помощью виджета мониторинга веба.

Последние результаты выполнения веб-сценария доступны в разделе Monitoring → Latest data.

Расширенный мониторинг

Иногда необходимо записывать полученное содержимое HTML-страницы.
Это особенно полезно, если какой-либо шаг веб-сценария завершается с ошибкой.
Для этого предназначен уровень отладки 5 (trace).
Этот уровень можно задать в файлах конфигурации сервер и прокси или с помощью опции управления во время выполнения (-R log_level_increase="http poller,N", где N — номер процесса).
Следующие примеры демонстрируют, как можно запустить расширенный мониторинг, если уже установлен уровень отладки 4:

# Increase log level of all http pollers:
zabbix_server -R log_level_increase="http poller"

# Increase log level of second http poller:
zabbix_server -R log_level_increase="http poller,2"

Если расширенный веб-мониторинг не требуется, его можно остановить с помощью опции -R log_level_decrease.