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

Обзор

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

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

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

Параметр Описание
Имя Уникальное имя шага.
Поддерживаются пользовательские макросы. Обратите внимание, что если используются пользовательские макросы, эти макросы останутся неразрешенными в именах элементов данных веб-мониторинга.
URL URL-адрес для подключения и получения данных. Например:
https://www.example.com
http://www.example.com/download
Доменные имена можно указывать с использованием символов Unicode. При выполнении шага веб-сценария они автоматически преобразуются из punycode в ASCII.
Кнопка Разобрать позволяет отделить необязательные поля запроса (например, ?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 можно переопределить с помощью параметра конфигурации сервера или прокси Zabbix SSLCALocation.
Устанавливает параметр cURL CURLOPT_SSL_VERIFYPEER.
Проверять имя узла сети SSL Установите флажок, чтобы проверить соответствие поля Common Name или Subject Alternate Name в сертификате веб-сервера.
Устанавливает параметр cURL CURLOPT_SSL_VERIFYHOST.
Файл SSL-сертификата Имя файла SSL-сертификата, используемого для аутентификации клиента. Файл сертификата должен быть в формате PEM1. Если файл сертификата также содержит закрытый ключ, оставьте поле Файл SSL-ключа пустым. Если ключ зашифрован, укажите пароль в поле Пароль SSL-ключа. Каталог, содержащий этот файл, задается параметром конфигурации сервера или прокси Zabbix SSLCertLocation.
В этом поле можно использовать макросы HOST.* и пользовательские макросы.
Устанавливает параметр cURL CURLOPT_SSLCERT.
Файл SSL-ключа Имя файла закрытого SSL-ключа, используемого для аутентификации клиента. Файл закрытого ключа должен быть в формате PEM1. Каталог, содержащий этот файл, задается параметром конфигурации сервера или прокси Zabbix 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

Отображение

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

  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.