9. Веб-мониторинг
Обзор
Благодаря Zabbix вы можете проверять несколько аспектов доступности веб-сайтов.
Для выполнения веб-мониторинга Zabbix сервер должен быть изначально сконфигурирован с поддержкой cURL (libcurl).
Для активации веб-мониторинга вам необходимо определить веб-сценарии. Веб-сценарий состоит из одного или нескольких запросов HTTP, или «шагов». Шаги периодически выполняются Zabbix сервером в предопределённом порядке. Если узел сети наблюдается через прокси, тогда шаги выполняются этим прокси.
Веб-сценарии привязываются к узлам сети/шаблонам тем же образом, как элементы данных, триггеры и т.д. Это означает, что веб-сценарии можно создавать на уровне шаблона и далее применять к нескольким узлам сети одним движением.
Каждым веб-сценарием собирается следующая информация:
- средняя скорость загрузки в секунду для всех шагов для всего сценария
- номер шага, который завершился с ошибкой
- последнее сообщение об ошибке
На каждом шаге веб-сценария собирается следующая информация:
- скорость загрузки в секунду
- время ответа
- код ответа
Для получения более детальных сведений смотрите элементы данных веб мониторинга.
Собранные данные с выполненных веб-сценариев хранятся в базе данных. Эти данные автоматически используются для графиков, триггеров и оповещений.
Zabbix может также проверять, содержит ли полученная HTML страница заданную строку. Он может выполнить эмуляцию входа и следовать пути, эмулируя нажатия мышкой на странице.
Веб-мониторинг в Zabbix поддерживает и HTTP, и HTTPS. При выполнении веб-сценария, Zabbix сервер может следовать перенаправлениям (смотрите опцию Следовать перенаправлениям ниже). Максимальное количество перенаправлений жёстко задано в исходном коде и равно 10 (используется cURL опция CURLOPT_MAXREDIRS [en]). Все cookies запоминаются на протяжении выполнения одного сценария.
Настройка веб-сценария
Для настройки веб-сценария:
- Перейдите к: Сбор данных → Узлы сети (Data collection → Hosts) (или Шаблоны (Templates))
- Нажмите на Веб (Web) в строке с узлом сети/шаблоном
- Нажмите на Создать сценарий (Create web scenario) в верхнем правом углу (или на имени сценария для изменения существующего сценария)
- Введите в диалоге параметры сценария
Вкладка Сценарий (Scenario) позволяет вам настроить общие параметры веб-сценария.

Все обязательные поля ввода отмечены красной звёздочкой.
Параметры сценария:
| Параметр | Описание |
|---|---|
| Имя (Name) |
Уникальное имя сценария. Поддерживаются пользовательские макросы. Обратите внимание, что если используется пользовательские макросы, то эти макросы останутся нераскрытыми в именах элементов данных веб-мониторинга. |
| Интервал обновления (Update interval) |
Как часто сценарий будет выполняться. Поддерживаются суффиксы времени, например, 30s, 1m, 2h, 1d. Поддерживаются пользовательские макросы Обратите внимание, что если используется пользовательский макрос и его значение изменилось (к примеру, 5m → 30s), следующая проверка будет выполнена в соответствии с предыдущим значением (в данном примере — более далёком будущем). Новые веб-сценарии будут проверены в течение 60 секунд с момента их создания. |
| Попыток (Attempts) |
Количество попыток выполнения шагов веб-сценария. В случае сетевых проблем (превышено время ожидания, отсутствие подключения и прочее) Zabbix может повторять выполнение шагов несколько раз. Указанное количество будет одинаково действовать для каждого шага сценария. Можно указать до 10 попыток, значение по умолчанию равно 1. Примечание: Zabbix не повторит шаг из-за ошибочного кода ответа или несовпадения необходимой строки. |
| Агент (Agent) |
Выбор агента клиента. Zabbix будет представляться выбранным браузером. Полезно для мониторинга Веб-сайтов, которые генерируют различное содержимое для разных браузеров. В этом поле можно использовать пользовательские макросы. |
| HTTP прокси (HTTP proxy) |
Вы можете указать необходимый HTTP прокси, следуя формату: [протокол://][имя_пользователя[:пароль]@]прокси.example.com[:порт].Это задаёт опцию cURL CURLOPT_PROXY [en]. Можно использовать опциональный префикс протокол://, чтобы задать альтернативные протоколы прокси (поддержка префикса протокола добавлена в cURL 7.21.7). Если протокол не указан, прокси будет рассматриваться как HTTP прокси.По умолчанию будет использоваться порт 1080. Если указано, прокси заменит переменные окружения, связанные с прокси - такие как http_proxy, HTTPS_PROXY. Если не указано, переменные окружения не будут заменены. Введённое значение передается «как есть», проверка корректности данных не производится. Вы также можете указать адрес SOCKS прокси. Если вы укажете ошибочный протокол, подключение будет неуспешным и элемент данных станет неподдерживаемым. Обратите внимание, что для HTTP прокси поддерживается только простая аутентификация. В этом поле можно использовать пользовательские макросы. |
| Переменные (Variables) |
Переменные, которые можно использовать в шагах сценария (URL, переменные post). Переменные имеют следующий формат: {макрос1}=значение1 {макрос2}=значение2 {макрос3}=regex:<регулярное выражение> {макрос4}=jsonpath:<jsonpath> {макрос5}=xmlxpath:<xmlxpath> {макрос6}={{macro}.function()} (смотрите функции макросов). Обратите внимание, что использование JSONPath, XML XPath, а также функций макросов в переменных поддерживается с версии Zabbix 7.0.4. Например: {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 кодировать, когда они используются в сыром post или напрямую в URL. |
| Заголовки (Headers) |
HTTP заголовки, которые будут отправлены при выполнении запроса. Могут использоваться заголовки по умолчанию и пользовательские. Заголовки, использующие настройки по умолчанию, назначаются в зависимости от типа Агента, выбранного из выпадающего списка на уровне сценария, и будут применены ко всем шагам, если только не переопределены пользовательскими на уровне шага. Следует заметить, что определение заголовка на уровне шага автоматически уничтожает все ранее определённые заголовки, за исключением заголовка «User-Agent» по умолчанию, который назначается при выборе из выпадающего списка на уровне сценария. Тем не менее, даже заголовок «User-Agent» по умолчанию может быть переопределён путём указания его на уровне шага. Чтобы убрать заголовок, заданный на уровне сценария, следует на уровне шага указать имя заголовка, сопроводив его пустым значением. Заголовки должны быть перечислены, используя тот же синтаксис, как они могут появиться в HTTP протоколе, опционально можно использовать некоторые дополнительные возможности, поддерживаемые опциями cURL CURLOPT_HTTPHEADER [en]. Например: Accept-Charset: utf-8 Accept-Language: en-US Content-Type: application/xml; charset=utf-8 Поддерживаются пользовательские макросы и макросы}. |
| Активирован (Enabled) |
Сценарий активирован, если параметр отмечен, в противном случае - деактивирован. |
Обратите внимание, что при редактировании существующего сценария, в диалоге будут доступны две дополнительные кнопки:
(Клонировать) |
Создание другого сценария на основе свойств существующего. |
![]() (Очистить историю и динамику изменений) |
Удаление у сценария данных истории и динамики изменений. Эта опция заставит сервер выполнить сценарий сразу после удаления данных. |
Если поле HTTP прокси оставить пустым, можно воспользоваться другим способом указать HTTP прокси, для этого необходимо задать переменные окружения.
Для HTTP проверок — укажите переменную окружения http_proxy для пользователя Zabbix сервера. Например, http_proxy=http://ip_прокси:порт_прокси.
Для HTTPS проверок — укажите переменную окружения HTTPS_PROXY. Например, HTTPS_PROXY=http://ip_прокси:порт_прокси. Более подробную информацию можно получить, выполнив в shell команду # man curl.
Вкладка Шаги (Steps) позволит вам настроить шаги веб-сценария. Чтобы добавить шаг веб-сценария, нажмите на Добавить (Add) в блоке Шаги (Steps).

В 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> Дополнительную информацию см. в описании переменных на уровне сценария. При использовании в полях запроса или данных формы для переменных post переменные автоматически кодируются в URL, но при использовании в необработанных данных 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. Поддерживаются пользовательские макросы и макросы}. |
| Обязательные коды состояния | Список ожидаемых кодов состояния HTTP. Если Zabbix получает код, отсутствующий в списке, шаг завершится ошибкой. Если поле пусто, проверка кодов состояния не выполняется. Например: 200,201,210-299 Поддерживаются пользовательские макросы. |
Любые изменения в шагах веб-сценария будут сохранены только после сохранения всего сценария.
См. также пример из реальной практики настройки шагов веб-мониторинга.
Настройка тегов
Вкладка Теги (Tags) позволяет задать теги уровня сценария.

Теги позволяют фильтровать веб-сценарии и элементы данных веб-мониторинга.
Настройка аутентификации
Вкладка Аутентификация позволяет настроить параметры аутентификации сценария. Зеленая точка рядом с названием вкладки указывает на то, что включен какой-либо тип 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
Просмотр
Для просмотра веб-сценариев настроенных для узла сети, перейдите в Мониторинг → Узлы сети (Monitoring → Hosts), найдите нужный узел сети в списке и нажмите на ссылку Веб (Web) в последней колонке. Нажмите на имя сценария для просмотра подробной статистики.

Обзор сценариев веб-мониторинга можно также отобразить на Панели (Dashboard) в виджете Веб-мониторинга.
Последние результаты выполнения веб-сценария доступны в разделе Мониторинг → Последние данные (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.
(Клонировать)