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

Обзор

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Параметр Описание
Имя Уникальное имя сценария.
Поддерживаются пользовательские макросы. Обратите внимание, что при использовании пользовательских макросов эти макросы останутся нераскрытыми в именах элементов данных веб-мониторинга.
Интервал обновления Как часто будет выполняться сценарий.
Поддерживаются суффиксы времени, например 30s, 1m, 2h, 1d.
Поддерживаются пользовательские макросы. Обратите внимание, что если используется пользовательский макрос и его значение изменяется (например, 5m → 30s), следующая проверка будет выполнена в соответствии с предыдущим значением (в приведенном примере — позже).
Новые веб-сценарии будут проверены в течение 60 секунд после создания.
Попытки Количество попыток выполнения шагов веб-сценария. В случае сетевых проблем (тайм-аут, отсутствие соединения и т. д.) Zabbix может повторить выполнение шага несколько раз. Указанное значение применяется одинаково к каждому шагу сценария. Можно указать до 10 попыток, значение по умолчанию — 1.
Примечание: Zabbix не будет повторять шаг из-за неправильного кода ответа или несоответствия требуемой строки.
Агент Выберите клиентский агент.
Zabbix будет имитировать выбранный браузер. Это полезно, если веб-сайт возвращает разное содержимое для разных браузеров.
В этом поле можно использовать пользовательские макросы.
HTTP-прокси Можно указать используемый HTTP-прокси в формате [protocol://][username[:password]@]proxy.example.com[:port].
Это устанавливает параметр cURL CURLOPT_PROXY.
Необязательный префикс protocol:// можно использовать для указания альтернативных протоколов прокси (поддержка префикса протокола добавлена в cURL 7.21.7). Если протокол не указан, прокси будет считаться HTTP-прокси.
По умолчанию используется порт 1080.
Если прокси указан, он переопределяет переменные окружения, связанные с прокси, например http_proxy и HTTPS_PROXY. Если прокси не указан, он не переопределяет переменные окружения, связанные с прокси. Введенное значение передается «как есть», без проверки корректности.
Также можно указать адрес SOCKS-прокси. Если указать неправильный протокол, соединение завершится ошибкой, а элемент данных станет неподдерживаемым.
Обратите внимание, что для HTTP-прокси поддерживается только простая аутентификация.
В этом поле можно использовать пользовательские макросы.
Переменные Переменные, которые можно использовать в шагах сценария (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-переменных, но при использовании в необработанном post-запросе или непосредственно в URL их необходимо кодировать в URL вручную.
Заголовки 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.*} макросы.
Включен Сценарий активен, если этот флажок установлен; в противном случае он отключен.

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

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

Если поле HTTP-прокси оставить пустым, для использования 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

Отображение

Чтобы просмотреть веб-сценарии, настроенные для узла сети:

  1. Перейдите в раздел Мониторинг > Узлы сети.
  2. Найдите узел сети в списке и нажмите ссылку Web в последнем столбце.
  3. Нажмите имя сценария, чтобы просмотреть подробную информацию.

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

Последние результаты выполнения веб-сценария доступны в разделе Мониторинг > Последние данные.

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

Иногда необходимо записывать полученное содержимое 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.