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

Обзор

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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:, то часть после нее рассматривается как регулярное выражение, которое ищет на веб-странице и, если находит, сохраняет совпадение в переменной. Должна присутствовать как минимум одна подгруппа, чтобы можно было извлечь совпавшее значение.
Поддерживаются пользовательские макросы и макросы}.
Переменные автоматически 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
Поддерживаются пользовательские макросы и макросы}.
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, так как они будут преобразованы в "******".

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

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

Параметр Описание
Имя
(Name)
Уникальное имя шага.
Поддерживаются пользовательские макросы. Обратите внимание что если используется пользовательские макросы, то эти макросы останутся нераскрытыми в именах элементов данных веб-мониторинга.
URL URL для подключения и получения данных. Например:
https://www.example.com
http://www.example.com/download
Имена доментов можно указывать Юникод символами. Они автоматически конвертируются методом punycode в ASCII при выполнении шага веб-сценария.
Кнопку Анализ можно использовать, чтобы отделить из URL опциональные поля запроса (например, ?name=Admin&password=mypassword), переместив атрибуты и значения в Поля запроса, чтобы URL кодировка выполнялась автоматически.
Переменные можно использовать в URL, воспользовавшись синтаксисом {макрос}. Переменные можно URL кодировать вручную, используя {{macro}.urlencode()} синтаксис.
Поддерживаются пользовательские макросы и макросы}.
Ограничено 2048 символами.
Поля запроса
(Query fields)
Переменные HTTP GET для URL.
Задаются в виде пар атрибутов и значений.
Значения URL кодируются автоматически. Значения из переменных сценария, пользовательских макросов или макросов {HOST.*} раскрываются и затем URL кодируются автоматически. При использовании {{макрос}.urlencode()} синтаксиса будет выполнена двойная URL кодировка этих переменных.
Поддерживаются пользовательские макросы и {HOST.*} макросы.
Post Переменные HTTP POST.
В режиме Данные формы задаются в виде пар атрибутов и значений.
Значения URL кодируются автоматически. Значения из переменных сценария, пользовательских макросов или {HOST.*} макросов раскрываются и затем URL кодируются автоматически.
В режиме Сырые данные атрибуты/значения отображаются в одной строке и объединяются через символ &.
Сырые значения можно URL кодировать/декодировать вручную, используя синтаксис {{макрос}.urlencode()} или {{макрос}.urldecode()}.
Например: id=2345&userid={user}
Если {user} задан переменной на уровне веб-сценария, он будет заменён своим значением при выполнении шага. Если вы желаете URL кодировать значение, замените {user} на {{user}.urlencode()}.
Поддерживаются пользовательские макросы и макросы}.
Переменные
(Variables)
Список переменных на уровне шага, которые можно использовать в GET и POST функциях.
Задаются в виде пар атрибутов и значений.
Переменные на уровне шага переопределяют переменные уровня сценария и переменные из предыдущих шагов. Однако, значение переменной уровня шага влияет только на последующие шаги (а не на текущий шаг).
Такие переменные имеют следующий формат:
{макрос}=значение
{макрос}=regex:<регулярное выражение>
Более подробную информацию вы найдете в описании переменных уровня сценария.
Переменные автоматически URL кодируются, когда используются в полях запросов или в данных формы для переменных post, но их необходимо вручную URL кодировать, когда они используются в сыром post или напрямую в URL.
Заголовки
(Headers)
Пользовательские HTTP заголовки, которые будут отправлены при выполнении запроса.
Задаются в виде пар атрибутов и значений.
Заголовок, заданный на уровне шага, будет использоваться для этого конкретного шага.
Следует заметить, что при задании заголовка на уровне шага автоматически уничтожаются все ранее заданные заголовки, за исключением заголовков «User-Agent» по умолчанию, назначенных при выборе из выпадающего списка на уровне сценария.
Тем не менее, даже заголовок «User-Agent» по умолчанию может быть переопределён путём назначения ему значения на уровне шага.
Например, если указать имя заголовка без указания значения, то это удалит заголовок по умолчанию, указанный на уровне сценария.
Поддерживаются пользовательские макросы и макросы {HOST.*}.
Это поле задаёт опцию cURL CURLOPT_HTTPHEADER [en].
Следовать перенаправлениям
(Follow redirects)
Отметьте для следования по HTTP перенаправлениям.
Этот параметр использует опцию cURL CURLOPT_FOLLOWLOCATION [en].
Режим получения
(Retrieve mode)
Выберите режим получения:
Тело — получение только тела из HTTP ответа
Заголовки — получение только заголовков из HTTP ответа
Тело и заголовки — получение тела и заголовков из HTTP ответа
Время ожидания
(Timeout)
Zabbix не будет тратить более указанного времени при обработке URL (от 1 секунды до максимум 1 часа). В действительности же этот параметр определяет максимальное время содания подключения к URL и максимальное время для выполнения HTTP запроса. Следовательно, Zabbix не будет тратить более 2 x Время ожидания секунд на один шаг.
Поддерживаются суффиксы времени, например, 30s, 1m, 1h.
Поддерживаются пользовательские макросы.
Требуемая строка
(Required string)
Требуемый шаблон регулярных выражений.
Если полученное содержимое (HTML) не совпадает с требуемым шаблоном, то шаг будет считаться ошибочным. Если поле не заполнено, то проверка не производится.
Например:
Homepage of Zabbix
Welcome.*admin
Обратите внимание: Ссылки на регулярные выражения, созданные в веб-интерфейсе Zabbix, в этом поле не поддерживаются.
Поддерживаются пользовательские макросы и макросы}.
Требуемые коды состояния
(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.