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

Обзор

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Параметр Описание
Имя Уникальное имя сценария.
Поддерживаются пользовательские макросы. Обратите внимание, что если используются пользовательские макросы, эти макросы останутся неразрешёнными в именах элементов данных веб-мониторинга.
Интервал обновления Как часто будет выполняться сценарий.
Поддерживаются суффиксы времени, например 30s, 1m, 2h, 1d.
Поддерживаются пользовательские макросы. Обратите внимание, что если используется пользовательский макрос и его значение изменяется (например, 5m → 30s), следующая проверка будет выполнена в соответствии с предыдущим значением (в приведённом примере — позже).
Новые веб-сценарии будут проверены в течение 60 секунд после их создания.
Попытки Количество попыток выполнения шагов веб-сценария. В случае проблем с сетью (тайм-аут, отсутствие соединения и т. д.) Zabbix может повторить выполнение шага несколько раз. Указанное значение одинаково влияет на каждый шаг сценария. Можно указать до 10 попыток, значение по умолчанию — 1.
Обратите внимание: Zabbix не будет повторять шаг из-за неверного кода ответа или несоответствия требуемой строки.
Агент Выберите клиентский агент.
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-прокси поддерживается только простая аутентификация.
В этом поле можно использовать пользовательские макросы.
Переменные Переменные, которые могут использоваться в шагах сценария (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-переменных, но должны быть URL-кодированы вручную при использовании в raw post или непосредственно в 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 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}. Переменные можно URL-кодировать вручную, используя синтаксис {{macro}.urlencode()}.
Поддерживаются пользовательские макросы и макросы}.
Ограничено 2048 символами.
Поля запроса Переменные HTTP GET для URL.
Указываются как пары атрибут-значение.
Значения автоматически URL-кодируются. Значения из переменных сценария, пользовательских макросов или макросов {HOST.*} сначала разрешаются, а затем автоматически URL-кодируются. Использование синтаксиса {{macro}.urlencode()} приведёт к двойному URL-кодированию.
Поддерживаются пользовательские макросы и макросы}.
Post Переменные HTTP POST.
В режиме Form data указываются как пары атрибут-значение.
Значения автоматически URL-кодируются. Значения из переменных сценария, пользовательских макросов или макросов {HOST.*} сначала разрешаются, а затем автоматически URL-кодируются.
В режиме Raw data атрибуты/значения отображаются в одной строке и объединяются символом &.
Необработанные значения можно URL-кодировать/декодировать вручную, используя синтаксис {{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
Поддерживаются пользовательские макросы.

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

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

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

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

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

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

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

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

Параметр Описание
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 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 SSLCertLocation.
В этом поле можно использовать макросы HOST.* и пользовательские макросы.
Устанавливает параметр cURL CURLOPT_SSLCERT.
SSL key file Имя файла закрытого ключа SSL, используемого для аутентификации клиента. Файл закрытого ключа должен быть в формате PEM1. Каталог, содержащий этот файл, задается параметром конфигурации сервера или прокси Zabbix 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

Отображение

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

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

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

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

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

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

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

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