[comment]: # ({734ebac5-734ebac5})
# 9. Веб-мониторинг

[comment]: # ({/734ebac5-734ebac5})

[comment]: # ({7966aaaa-f37bc18c})
#### Обзор

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

::: noteimportant
Для выполнения веб-мониторинга Zabbix сервер должен быть изначально [сконфигурирован](/manual/installation/install#установка-из-исходных-кодов) с поддержкой cURL (libcurl).
:::

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

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

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

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

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

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

Для получения более детальных сведений смотрите [элементы данных веб мониторинга](/manual/web_monitoring/items).

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

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

Веб-мониторинг в Zabbix поддерживает и HTTP, и HTTPS. При выполнении веб-сценария, Zabbix сервер может следовать перенаправлениям (смотрите опцию *Следовать перенаправлениям* ниже). Максимальное количество перенаправлений жёстко задано в исходном коде и равно 10 (используется cURL опция [CURLOPT\_MAXREDIRS \[en\]](http://curl.haxx.se/libcurl/c/CURLOPT_MAXREDIRS.html)). Все cookies запоминаются на протяжении выполнения одного сценария.

[comment]: # ({/7966aaaa-f37bc18c})

[comment]: # ({8cf82376-f007debe})
#### Настройка веб-сценария

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

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

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

![](../../assets/en/manual/config/scenario.png)

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

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

|Parameter|Description|
|--|--------|
|*Name*|Уникальное имя сценария.<br>Поддерживаются [пользовательские макросы](/manual/config/macros/user_macros). *Примечание*: если используются пользовательские макросы, эти макросы останутся неразрешенными в именах [элементов данных веб-мониторинга](/manual/web_monitoring/items).|
|*Update interval*|Как часто будет выполняться сценарий.<br>Поддерживаются [суффиксы времени](/manual/appendix/suffixes), например 30s, 1m, 2h, 1d.<br>Поддерживаются [пользовательские макросы](/manual/config/macros/user_macros). *Примечание*: если используется пользовательский макрос и его значение изменяется (например, 5m → 30s), следующая проверка будет выполнена согласно предыдущему значению (в примере - позже). <br> Новые веб-сценарии будут проверены в течение 60 секунд после их создания.|
|*Attempts*|Количество попыток выполнения шагов веб-сценария. В случае сетевых проблем (тайм-аут, отсутствие соединения и т. д.) Zabbix может повторить выполнение шага несколько раз. Указанное значение одинаково влияет на каждый шаг сценария. Можно указать до 10 попыток, значение по умолчанию - 1.<br>*Примечание*: Zabbix не будет повторять шаг из-за неверного кода ответа или несоответствия требуемой строки.|
|*Agent*|Выберите клиентский агент.<br>Zabbix будет имитировать выбранный браузер. Это полезно, когда сайт возвращает разное содержимое для разных браузеров.<br>В этом поле можно использовать пользовательские макросы.|
|*HTTP proxy*|Можно указать HTTP-прокси для использования в формате `[protocol://][username[:password]@]proxy.example.com[:port]`.<br>Это задает параметр cURL [CURLOPT\_PROXY](https://curl.haxx.se/libcurl/c/CURLOPT_PROXY.html).<br>Необязательный префикс `protocol://` можно использовать для указания альтернативных протоколов прокси (поддержка префикса протокола была добавлена в cURL 7.21.7). Если протокол не указан, прокси будет считаться HTTP-прокси.<br>По умолчанию будет использоваться порт 1080.<br>Если указано, прокси переопределит связанные с прокси переменные среды, такие как http\_proxy, HTTPS\_PROXY. Если не указано, прокси не будет переопределять связанные с прокси переменные среды. Введенное значение передается "как есть", без какой-либо проверки корректности.<br>Также можно указать адрес SOCKS-прокси. Если вы укажете неверный протокол, соединение завершится неудачей, и элемент данных станет неподдерживаемым.<br>*Примечание*: с HTTP-прокси поддерживается только простая аутентификация.<br>В этом поле можно использовать пользовательские макросы.|
|*Variables*|Переменные, которые можно использовать в шагах сценария (URL, POST-переменные).<br>Они имеют следующий формат:<br>**{macro1}**=value1<br>**{macro2}**=value2<br>**{macro3}**=regex:<regular expression><br>**{macro4}**=jsonpath:<jsonpath><br>**{macro5}**=xmlxpath:<xmlxpath><br>**{macro6}**={{macro}.function()} (см. [функции макросов](/manual/config/macros/macro_functions))<br>Например:<br>{username}=Alexei<br>{password}=kj3h5kJ34bd<br>{hostid}=regex:hostid is (\[0-9\]+)<br>{url}=jsonpath:$.host_url<br>{status}=xmlxpath://host/response/status<br>{newvar}={{myvar}.btoa()}<br>После этого на макросы можно ссылаться в шагах как {username}, {password}, {hostid} и т. д. Zabbix автоматически заменит их фактическими значениями. Обратите внимание, что для переменных с `regex:` требуется один шаг, чтобы получить значение регулярного выражения, поэтому извлеченное значение можно применить только к следующему шагу.<br>Если часть значения начинается с `regex:`, то часть после нее рассматривается как регулярное выражение, которое ищет на веб-странице и, если находит, сохраняет совпадение в переменной. Должна присутствовать как минимум одна подгруппа, чтобы можно было извлечь совпавшее значение.<br>Поддерживаются пользовательские макросы и [макросы](/manual/appendix/macros/supported_by_location) {HOST.\*}.<br>Переменные автоматически URL-кодируются при использовании в полях запроса или данных формы для POST-переменных, но должны быть закодированы вручную при использовании в raw post или непосредственно в URL.|
|*Headers*|HTTP-заголовки используются при выполнении запроса. Можно использовать стандартные и пользовательские заголовки.<br>Заголовки будут назначаться с использованием настроек по умолчанию в зависимости от типа агента, выбранного из раскрывающегося списка на уровне сценария, и будут применяться ко всем шагам, если только они не заданы как пользовательские на уровне шага.<br>**Следует отметить, что задание заголовка на уровне шага автоматически отменяет все ранее заданные заголовки, кроме стандартного заголовка, который назначается путем выбора 'User-Agent' из раскрывающегося списка на уровне сценария.**<br>Однако даже стандартный заголовок 'User-Agent' можно переопределить, указав его на уровне шага.<br>Чтобы снять заголовок на уровне сценария, заголовок следует назвать и указать без значения на уровне шага.<br>Заголовки следует перечислять, используя тот же синтаксис, что и в HTTP-протоколе, при необходимости с использованием дополнительных возможностей, поддерживаемых параметром cURL [CURLOPT\_HTTPHEADER](http://curl.haxx.se/libcurl/c/CURLOPT_HTTPHEADER.html).<br>Например:<br>Accept-Charset=utf-8<br>Accept-Language=en-US<br>Content-Type=application/xml; charset=utf-8<br>Поддерживаются пользовательские макросы и [макросы](/manual/appendix/macros/supported_by_location) {HOST.\*}.|
|*Enabled*|Сценарий активен, если этот флажок установлен, в противном случае - отключен.|

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

|   |   |
|--|--------|
|![](../../assets/en/manual/web_monitoring/buttons_clone.png)|Создать еще один сценарий на основе свойств существующего.|
|![](../../assets/en/manual/web_monitoring/buttons_clear.png)|Удалить историю и данные трендов для сценария. Это заставит сервер немедленно выполнить сценарий после удаления данных.|

::: notetip
Если поле *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*.
:::

Вкладка **Шаги** позволяет настроить шаги веб-сценария. Чтобы добавить
шаг веб-сценария, нажмите *Добавить* в блоке *Шаги*.

![](../../assets/en/manual/config/scenario_b.png){width="600"}

::: noteclassic
Секретные [пользовательские
макросы](/manual/config/macros/user_macros#configuration) не должны
использоваться в URL, так как они будут преобразованы в "\*\*\*\*\*\*".
:::

[comment]: # ({/8cf82376-f007debe})

[comment]: # ({c406e61a-74c8baab})
#### Настройка шагов

![](../../assets/en/manual/config/scenario_step.png){width="600"}

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

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

::: noteclassic
Любые изменения в шагах веб-сценариев будут сохранены, только если сам сценарий был также сохранён.
:::

Смотрите также [пример из реальной жизни](/manual/web_monitoring/example) о том, как можно настроить шаги веб-мониторинга.

[comment]: # ({/c406e61a-74c8baab})

[comment]: # ({6f40ea68-6f40ea68})
####  Настройка тегов

Вкладка **Теги (Tags)** позволяет задать [теги](/manual/config/tagging) уровня сценария.

![](../../assets/en/manual/config/scenario_c.png)

Теги позволяют фильтровать веб-сценарии и [элементы данных](/manual/web_monitoring/items) веб-мониторинга.

[comment]: # ({/6f40ea68-6f40ea68})

[comment]: # ({b880b77b-4cce2d90})
#### Настройка аутентификации

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

![](../../assets/en/manual/config/scenario_d.png)

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

|Параметр|Описание|
|--|--------|
|*HTTP аутентификация*<br>*(HTTP authentication)*|Выберите опцию аутентификации.<br>**Нет** — без использования аутентификации.<br>**Простая аутентификация** — с использованием простой (basic) аутентификации.<br>**NTLM аутентификация** — с использованием NTLM ([Windows NT LAN Manager)](https://ru.wikipedia.org/wiki/NTLM) аутентификации.<br>**Kerberos** — с использованием Kerberos аутентификации. Смотрите также: [Настройка Kerberos с Zabbix](/manual/appendix/items/kerberos).<br>**Digest** — с использованием Digest аутентификации.<br>После выбора какого-либо метода аутентификации будут доступны доступны два дополнительных поля для ввода имени пользователя и пароля.<br>В полях имя пользователя и пароль можно использовать пользовательские макросы.|
|*Пользователь*<br>*(User)*|Введите имя пользователя (до 255 символов).<br>Это поле доступно, если параметр *HTTP аутентификация* установлен в значение Basic, NTLM, Kerberos или Digest. Поддерживаются пользовательские макросы.|
|*Пароль*<br>*(Password)*|Введите пароль пользователя (до 255 символов).<br>Это поле доступно, если параметр *HTTP аутентификация* установлен в значение Basic, NTLM, Kerberos или Digest. Поддерживаются пользовательские макросы.|
|*Проверка SSL узла*<br>*(SSL verify peer)*|Отметьте для верификации SSL сертификата веб-сервера.<br>Сертификат сервера будет автоматически взят из местоположения центра сертификации (CA) всей системы. Вы можете переопределить расположение CA файлов, используя параметр конфигурации [SSLCALocation](/manual/appendix/config/zabbix_server#sslcalocation) Zabbix сервера или прокси.<br>Этот параметр использует опцию cURL [CURLOPT\_SSL\_VERIFYPEER \[en\]](http://curl.haxx.se/libcurl/c/CURLOPT_SSL_VERIFYPEER.html).|
|*Проверка SSL хоста*<br>*(SSL verify host)*|Отметьте для верификации, что поле *Common Name* или поле *Subject Alternate Name* сертификата веб-сервера совпадают.<br>Этот параметр использует cURL опцию [CURLOPT\_SSL\_VERIFYHOST \[en\]](http://curl.haxx.se/libcurl/c/CURLOPT_SSL_VERIFYHOST.html).|
|*Файл SSL сертификата*<br>*(SSL certificate file)*|Имя файла SSL сертификата для аутентификации клиента. Файл сертификата должен быть в формате PEM^1^. Если файл сертификата также содержит и закрытый ключ (private key), оставьте поле *Файл SSL ключа* пустым. Если ключ зашифрован, укажите пароль в поле *Пароль к SSL ключу*. Папка, содержащая этот файл, указывается в параметре конфигурации [SSLCertLocation](/manual/appendix/config/zabbix_server) Zabbix сервера и прокси.<br>В этом поле можно использовать макросы `HOST.*` и пользовательские макросы.<br>Этот параметр использует опцию cURL [CURLOPT\_SSLCERT \[en\]](http://curl.haxx.se/libcurl/c/CURLOPT_SSLCERT.html).|
|*Файл SSL ключа*<br>*(SSL key file)*|Имя файла закрытого ключа (private key) SSL, который используется для аутентификации клиента. Файл закрытого ключа должен быть в формате PEM^1^. Папка, содержащая этот файл, указывается в параметре конфигурации [SSLKeyLocation](/manual/appendix/config/zabbix_server) Zabbix сервера и прокси.<br>В этом поле можно использовать макросы `HOST.*` и пользовательские макросы.<br>Этот параметр использует опцию cURL [CURLOPT\_SSLKEY \[en\]](http://curl.haxx.se/libcurl/c/CURLOPT_SSLKEY.html).|
|*Пароль к SSL ключу*<br>*(SSL key password)*|Пароль к файлу закрытого ключа.<br>В этом поле можно использовать пользовательские макросы.<br>Этот параметр использует cURL опцию [CURLOPT\_KEYPASSWD \[en\]](http://curl.haxx.se/libcurl/c/CURLOPT_KEYPASSWD.html).|

::: noteimportant
 \[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


:::

::: noteclassic
 Zabbix сервер подхватывает изменения в сертификатах без перезапуска. 
:::

::: noteclassic
 Если сертификат клиента и закрытый ключ (private key) находятся в одном файле, просто укажите его в поле «Файл SSL сертификата» и оставьте поле «Файл SSL ключа» пустым. Сертификат и ключ всё ещё должны быть в формате PEM. Очень просто объединить сертификат и ключ:

    cat client.crt client.key > client.pem


:::

[comment]: # ({/b880b77b-4cce2d90})

[comment]: # ({f2d5e43e-ae869848})
#### Просмотр

Для просмотра веб-сценариев настроенных для узла сети, перейдите в *Мониторинг → Узлы сети (Monitoring → Hosts)*, найдите нужный узел сети в списке и нажмите на ссылку *Веб (Web)* в последней колонке. Нажмите на имя сценария для просмотра подробной статистики.

![](../../assets/en/manual/web_monitoring/scenario_details2.png){width="600"}

Обзор сценариев веб-мониторинга можно также отобразить на *Панели (Dashboard)*  в виджете Веб-мониторинга.

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

[comment]: # ({/f2d5e43e-ae869848})

[comment]: # ({1520b096-42ab5787})
#### Расширенный мониторинг

Иногда необходимо записать в журнал полученное содержимое HTML страницы. Это особенно полезно, если некоторые шаги веб-сценария завершаются с ошибкой. Для этой цели служит уровень отладки 5 (трассировка). Этот уровень можно указать в файлах конфигурации [сервера](/manual/appendix/config/zabbix_server#debuglevel) и [прокси](/manual/appendix/config/zabbix_proxy#debuglevel) или использовать опции выполнения [административных функций](/manual/concepts/server#управление-работой) (`-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`.

[comment]: # ({/1520b096-42ab5787})
