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

Обзор

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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:, то часть после нее рассматривается как регулярное выражение, которое выполняет поиск на веб-странице и, если совпадение найдено, сохраняет его в переменной. Должна присутствовать как минимум одна подгруппа, чтобы можно было извлечь совпавшее значение.
Поддерживаются пользовательские макросы и макросы {HOST.*}.
Переменные автоматически URL-кодируются при использовании в полях запроса или данных формы для переменных POST, но должны быть закодированы вручную при использовании в raw post или непосредственно в URL.
Headers Заголовки HTTP используются при выполнении запроса. Можно использовать заголовки по умолчанию и пользовательские заголовки.
Заголовки будут назначаться с использованием настроек по умолчанию в зависимости от типа агента, выбранного из раскрывающегося списка на уровне сценария, и будут применяться ко всем шагам, если только они не заданы как пользовательские на уровне шага.
Следует отметить, что задание заголовка на уровне шага автоматически отменяет все ранее заданные заголовки, кроме заголовка по умолчанию, который назначается путем выбора 'User-Agent' из раскрывающегося списка на уровне сценария.
Однако даже заголовок по умолчанию 'User-Agent' можно переопределить, указав его на уровне шага.
Чтобы снять заголовок на уровне сценария, на уровне шага следует указать имя заголовка и оставить его без значения.
Заголовки следует перечислять в той же синтаксической форме, в которой они присутствуют в протоколе HTTP, при необходимости используя дополнительные возможности, поддерживаемые параметром cURL CURLOPT_HTTPHEADER.
Например:
Accept-Charset=utf-8
Accept-Language=en-US
Content-Type=application/xml; charset=utf-8
Поддерживаются пользовательские макросы и макросы {HOST.*}.
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, так как они будут преобразованы в "******".

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

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

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

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

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

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

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

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

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

Вкладка 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 подхватывает изменения в сертификатах без перезапуска.

Если у вас клиентский сертификат и закрытый ключ находятся в одном файле, просто укажите его в поле "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.