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

Обзор

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

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

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

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

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

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

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

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

Для получения более детальных сведений смотрите элементы данных веб мониторинга.

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

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

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

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

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

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

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

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

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

Параметр Описание
Имя Уникальное имя сценария.
Поддерживаются пользовательские макросы. Обратите внимание, что при использовании пользовательских макросов эти макросы останутся неразрешенными в именах элементов данных веб-мониторинга.
Интервал обновления Как часто будет выполняться сценарий.
Поддерживаются суффиксы времени, например 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:, то следующая за ним часть рассматривается как регулярное выражение, выполняющее поиск на веб-странице; если совпадение найдено, оно сохраняется в переменной. Для извлечения совпавшего значения должна присутствовать как минимум одна подгруппа.
Поддерживаются пользовательские макросы и макросы}.
Переменные автоматически кодируются в 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
Поддерживаются пользовательские макросы и макросы}.
Включен Сценарий активен, если этот флажок установлен; в противном случае сценарий отключен.

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

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

Если поле 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, поскольку они будут преобразованы в "******".

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

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

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

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

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

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

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

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

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

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

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

Параметр Описание
HTTP-аутентификация Выберите вариант аутентификации:
Нет - аутентификация не используется;
Basic - используется базовая аутентификация;
NTLM - используется аутентификация NTLM (Windows NT LAN Manager);
Kerberos - используется аутентификация Kerberos (см. также: Настройка Kerberos с Zabbix);
Digest - используется дайджест-аутентификация.
Пользователь Введите имя пользователя (до 255 символов).
Это поле доступно, если для параметра HTTP-аутентификация установлено значение Basic, NTLM, Kerberos или Digest. Поддерживаются пользовательские макросы.
Пароль Введите пароль пользователя (до 255 символов).
Это поле доступно, если для параметра HTTP-аутентификация установлено значение Basic, NTLM, Kerberos или Digest. Поддерживаются пользовательские макросы.
Проверять SSL-узел Установите флажок, чтобы проверять сертификат SSL веб-сервера.
Сертификат сервера проверяется по сертификатам доверенных центров сертификации (CA) из общесистемного расположения CA. Расположение файлов CA можно переопределить с помощью параметра конфигурации сервера или прокси SSLCALocation.
Устанавливает параметр cURL CURLOPT_SSL_VERIFYPEER.
Проверять SSL-узел Установите флажок, чтобы проверить соответствие поля Common Name или Subject Alternate Name сертификата веб-сервера.
Устанавливает параметр cURL CURLOPT_SSL_VERIFYHOST.
Файл SSL-сертификата Имя файла SSL-сертификата, используемого для аутентификации клиента. Файл сертификата должен быть в формате PEM1. Если файл сертификата также содержит закрытый ключ, оставьте поле Файл SSL-ключа пустым. Если ключ зашифрован, укажите пароль в поле Пароль SSL-ключа. Каталог, содержащий этот файл, задается параметром конфигурации сервера или прокси SSLCertLocation.
В этом поле можно использовать макросы HOST.* и пользовательские макросы.
Устанавливает параметр cURL CURLOPT_SSLCERT.
Файл SSL-ключа Имя файла закрытого SSL-ключа, используемого для аутентификации клиента. Файл закрытого ключа должен быть в формате PEM1. Каталог, содержащий этот файл, задается параметром конфигурации сервера или прокси SSLKeyLocation.
В этом поле можно использовать макросы HOST.* и пользовательские макросы.
Устанавливает параметр cURL CURLOPT_SSLKEY.
Пароль SSL-ключа Пароль файла закрытого 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-сертификата», а поле «Файл SSL-ключа» оставьте пустым. Сертификат и ключ по-прежнему должны быть в формате PEM. Объединить сертификат и ключ можно следующим образом:

cat client.crt client.key > client.pem

Отображение

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

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

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

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

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

# Увеличение уровня журналирования по всем http поллерам:
zabbix_server -R log_level_increase="http poller"

# Увеличение уровня журналирования по второму http поллеру:
zabbix_server -R log_level_increase="http poller,2"

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