[comment]: # translation:outdated

[comment]: # ({734ebac5-734ebac5})
# 9. Web 监控

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

[comment]: # ({5578c92c-f37bc18c})
#### 概览

可以通过 Zabbix 检查网站的几个可用性。\

::: noteimportant
要执行 web 监控，Zabbix server 的初始 [配置](/manual/installation/install#from_the_sources) 必须支持 cURL (libcurl)。
:::

启用 Web 监控需要定义 Web 场景。Web 场景由一个或多个 HTTP 请求或 “步骤” 组成。这些步骤由 Zabbix server 以预设的顺序定期执行。如果主机由 proxy 监控，则这些步骤由 proxy 执行。

Web 场景以与监控项、触发器等相同的方式附加到主机/模板上。这意味着 Web 场景也可以在模板级别上创建，然后一次性应用于多个主机。

在任何 Web 场景中都会收集以下信息：

-   整个场景所有步骤的每秒平均下载速度
-   失败的步骤编号
-   最新的错误信息

在任何 Web 场景步骤中都会收集以下信息：

-   每秒下载速度
-   响应时间
-   响应码

更多详细信息，请参见 [web 监控项](/manual/web_monitoring/items)。

执行 Web 场景收集的数据保存在数据库中。数据自动用于图表、触发器和通知。

Zabbix 还可以检查检索到的 HTML 页面是否包含预定义的字符串。它可以执行模拟登录并遵循页面上模拟鼠标点击的路径。

Zabbix web 监控同时支持 HTTP 和 HTTPS。在运行 Web 场景时，Zabbix 将选择性地跟随重定向（请参阅下面的 *Follow redirects* 选项）。最大重定向数硬编码为 10（使用 cURL 选项[CURLOPT\_MAXREDIRS](http://curl.haxx.se/libcurl/c/CURLOPT_MAXREDIRS.html)）。在单个场景的执行过程中会保留所有 cookie。

查看使用 HTTPS 协议进行 Web 监控的 [已知问题](/manual/installation/known_issues#https_checks) 。

[comment]: # ({/5578c92c-f37bc18c})

[comment]: # ({fbdfe899-f007debe})
#### 配置 Web 场景

配置 Web 场景流程：

-   *Configuration（配置） → Hosts（主机）*（或 *模板*）
-   单击 主机/模板 行中的 *Web* 
-   单击右侧的  *Create scenario（创建场景）* （或在场景名称上编辑现有场景）
-   在表格中输入场景的参数

**场景** 选项卡可以配置 Web 场景的常规参数。

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

所有必填字段都标有红色星号。

场景参数：

|参数|描述|
|---------|-----------|
|*Host*|场景所属的主机/模板的名称。|
|*Name*|场景的唯一名称。|
|*Update interval*|场景执行的频率。<br>支持 [时间后缀](/manual/appendix/suffixes) ，例如 30s、1m、2h、1d。<br>[支持用户宏](/manual/config/macros/user_macros) 。*注意*： 如果使用用户宏并更改其值 (例如 5m → 30s)，则将根据先前的值执行下一次检查（示例值在更远的将来）。|
|*Attempts*|尝试执行 Web 场景步骤的次数。如果出现网络问题（超时、无连接等），Zabbix 可以多次重复执行一个步骤。图集同样会影响场景的每个步骤。最多可以指定 10 次尝试，默认值为 1。<br>*注意*：Zabbix 不会因为响应码错误或所需字符串不匹配而重复步骤。|
|*Agent（客户端）*|选择客户端。<br>Zabbix 会伪装成被选中的浏览器。当网站为不同的浏览器返回不同的内容时，这很有用。<br>用户宏可用于该字段。|
|*HTTP proxy（HTTP 代理）*|您可以按照示例要求的格式使用 HTTP 代理 `[protocol://][username[:password]@]proxy.example.com[:port]`。<br>这将设置 [CURLOPT\_PROXY](https://curl.haxx.se/libcurl/c/CURLOPT_PROXY.html) cURL 选项。<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:<正则表达式><br>示例：<br>{username}=Alexei<br>{password}=kj3h5kJ34bd<br>{hostid}=regex:hostid is (\[0-9\]+)<br>然后可以在步骤中以  {username}, {password} 和 {hostid} 的形式引用宏。Zabbix 会自动将它们替换为实际值。注意，变量 `regex:` 需要一步来获取正则表达式的值，因此提取的值只能应用于后面的步骤。<br>如果值部分以`regex:` 然后将其后面的部分视为搜索网页的正则表达式，如果找到，则将匹配项存储在变量中。必须至少存在一个子组，以便可以提取匹配值。<br>支持用户宏和  {HOST.\*} [宏](/manual/appendix/macros/supported_by_location) 。<br>变量在用于查询字段或用于发布变量的表单数据时会自动进行 URL 编码，但在原始发布或直接在 URL 中使用时必须手动进行 URL 编码。|
|*Headers（标头）*|执行请求时将发送的自定义 HTTP 标头。可以使用默认和自定义标头。<br>标头将使用默认设置分配，具体取决于从场景级别的下拉列表中选择的代理类型，并将应用于所有步骤，除非它们是在步骤级别自定义定义的。<br>**应该注意的是，在步骤级别定义标头会自动丢弃所有先前定义的标头，但通过从场景级别的下拉列表中选择“用户代理”来分配的默认标头除外。**<br>但是，即使是“User-Agent”默认标头也可以通过在步骤级别指定它来覆盖。<br>要在场景级别取消设置标头，标头应该在步骤级别上命名并且属性不设置值。<br>标头应使用与它们在 HTTP 协议中出现的相同语法列出，可选择使用 [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>用户宏和  {HOST.\*} [宏](/manual/appendix/macros/supported_by_location) 是支持的.|
|*Enabled*|如果选中此框，则该场景处于活动状态，否则 - 禁用。|

请注意，在编辑现有场景时，表单中有两个额外的按钮可用：

|   |   |
|---|---|
|![](../../assets/en/manual/web_monitoring/buttons_clone.png)|根据现有场景的属性创建另一个场景。|
|![](../../assets/en/manual/web_monitoring/buttons_clear.png)|删除场景的历史和趋势数据。这将使服务器在删除数据后立即执行场景。|

::: notetip
如果 *HTTP 代理* 字段留空，使用 HTTP 代理的另一种方法是设置代理相关的环境变量。

对于 HTTP 检查 - 为 Zabbix server 用户设置 **http\_proxy** 环境变量。 例如，`http_proxy=http://proxy_ip:proxy_port`。

对于 HTTPS 检查 - 为 Zabbix server 用户设置 **HTTPS\_proxy** 环境变量。 例如，`HTTPS_PROXY=http://proxy_ip:proxy_port`。运行 shell 命令获得更多详细信息： *\# man curl*。
:::

**Steps（步骤）**选项卡可以配置 Web 场景步骤。要添加 Web 场景步骤，请单击 *Steps（步骤）* 块中的  *Add（添加）* 。

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

::: noteclassic
不得在 URL 中使用加密 [用户宏](/manual/config/macros/user_macros#configuration) 因为它们会被解析成 "\*\*\*\*\*\*"。
:::

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

[comment]: # ({acb9768f-74c8baab})
#### 配置步骤

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

步骤参数：

|参数|描述|
|---------|-----------|
|*Name*|唯一的步骤名称。|
|*URL*|用于连接和检索数据的 URL。例如：<br>https://www.example.com<br>http://www.example.com/download<br>域名可以用 Unicode 字符指定。 在执行 Web 场景步骤时，它们会自动转换为 ASCII 码。<br>*Parse* 按钮​​可用于将可选查询字段 （如 ?name=Admin&password=mypassword)）与 URL 分开，将属性和值移动到 *查询字段* 中以进行自动 URL 编码。<br>变量可以在 URL 中使用，使用 {macro} 语法。可以使用 {{macro}.urlencode()} 语法手动对变量进行 URL 编码。<br>支持用户宏和 {HOST.\*} [宏](/manual/appendix/macros/supported_by_location) <br>限制为 2048 个字符。|
|*Query fields*|URL 的 HTTP GET 变量。<br>指定为属性和值对。<br>值会自动进行 URL 编码。来自场景变量、用户宏或 {HOST.\*} 宏的值被解析，然后自动进行 URL 编码。使用 {{macro}.urlencode()} 语法将对它们进行双重 URL 编码。<br>支持用户宏和 {HOST.*} {HOST.\*} [宏](/manual/appendix/macros/supported_by_location) 。|
|*Post*|HTTP POST 变量。<br>在 **表单数据** 模式下，指定为属性和值对。<br>值会自动进行 URL 编码。来自场景变量、用户宏或 {HOST.\*} 宏的值被解析，然后自动进行 URL 编码。<br>在 **原始数据** 模式下，属性/值显示在单行上，并与 **&** 符号连接。<br>可以使用  {{macro}.urlencode()} 或 {{macro}.urldecode()} 语法手动对原始值进行 URL 编码/解码。<br>例如：id=2345&userid={user}<br>如果 {user} 被定义为web场景的变量，执行步骤时会被替换为它的值。如果您希望对变量进行 URL 编码，请将 {user} 替换为 {{user}.urlencode()}.<br>支持用户宏和 {HOST.*} {HOST.\*} [宏](/manual/appendix/macros/supported_by_location) 。|
|*Variables*|可用于 GET 和 POST 函数的步骤级变量。<br>指定为属性和值对。<br>步骤级变量会覆盖场景级变量或上一步中的变量。 但是，步骤级变量的值仅影响之后的步骤（而不影响当前步骤）。<br>它们具有以下格式：<br>**{macro}**=value<br>**{macro}**=regex:<regular expression><br>有关详细信息，请参阅 [场景](web_monitoring#configuring_a_web_scenario) 级别的变量描述。<br>变量在用于查询字段或用于发布变量的表单数据时会自动进行 URL 编码，但在原始发布或直接在 URL 中使用时必须手动进行 URL 编码。|
|*Headers*|执行请求时将发送的自定义 HTTP 标头。<br>指定为属性和值对。<br>步骤级别的标题将覆盖为场景指定的标题。<br>**应该注意的是，在步骤级别定义标头会自动丢弃所有先前定义的标头，但通过从场景级别的下拉列表中选择“用户代理”来分配的默认标头除外。* *<br>但是，即使是“User-Agent”默认标头也可以通过在步骤级别指定它来覆盖。<br>例如，设置没有值的 'User-Agent' 属性将删除在场景级别设置的 User-Agent 值。<br>支持用户宏和 {HOST.\*} 宏。<br>设置 [CURLOPT\_HTTPHEADER](http://curl.haxx.se/libcurl/c/CURLOPT_HTTPHEADER.html) cURL 选项。<br>*从 Zabbix 2.4 开始*支持指定自定义标头。|
|*Follow redirects*|标记复选框以遵循 HTTP 重定向。<br>设置 [CURLOPT\_FOLLOWLOCATION](http://curl.haxx.se/libcurl/c/CURLOPT_FOLLOWLOCATION.html) cURL 选项。|
|*Retrieve mode*|选择恢复模式：<br>**Body** - 从 HTTP 响应中仅检索正文<br>**Headers** - 从 HTTP 响应中仅检索标头<br>**Body and headers** - 从 HTTP 响应中检索正文和标头|
|*Timeout*|Zabbix 处理 URL 的时间不会超过设定的时间 （从 1 秒到最长 1 小时）。实际上，这个参数定义了连接到 URL 的最长时间和执行 HTTP 请求的最长时间。因此，Zabbix 在该步骤上花费的时间不会超过 **2 x Timeout** 秒。<br>[支持时间后缀](/manual/appendix/suffixes) ，例如 30s、1m、1h。支持 [用户宏](/manual/config/macros/user_macros) 。|
|*Required string*|要求正则表达式模式。<br>除非检索到的内容 (HTML) 与所需的模式匹配，否则该步骤将失败。如果为空，则不检查所需的字符串。<br>例如：<br> Zabbix<br>Welcome.\*admin 主页<br>*注意*：该字段不支持引用在 Zabbix 前端创建的 [正则表达式](regular_expressions) 。<br>支持用户宏和 {HOST.*} {HOST.\*} [宏](/manual/appendix/macros/supported_by_location) 。|
|*Required status codes*|预期的 HTTP 状态代码列表。如果 Zabbix 获得不在列表中的代码，则该步骤将失败。<br>如果为空，则不检查状态代码。<br>例如：支持 200,201,210-299<br>支持 用户宏。|

::: noteclassic
Web 场景步骤中的任何更改只有在保存整个场景时才会保存。
:::

查看配置 Web 监控步骤的 [真实案例](/manual/web_monitoring/example) 。

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

[comment]: # ({6f40ea68-6f40ea68})
#### 配置标签

**标签** 选项卡允许定义场景级别的 [标签](/manual/config/tagging)。

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

标签允许过滤 Web 场景和 Web [监控项](/manual/web_monitoring/items)。

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

[comment]: # ({c7c7a9dd-4cce2d90})
#### 配置认证

**认证** 选项卡允许配置场景身份认证选项。选项卡名称旁边的绿点表示启用了某种类型的 HTTP 身份验证。

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

认证参数：

|参数|描述|
|---------|-----------|
|*Authentication（认证）*|身份认证选项。<br>**None（无）** - 不使用身份认证。<br>**Basic（基本）** - 使用基本身份验证。<br>**NTLM** - 使用 NTLM（ [Windows NT LAN Manager](http://en.wikipedia.org/wiki/NTLM)） 身份认证。<br>**Kerberos** - 使用 Kerberos 身份验证。另请参阅：[Zabbix 配置 Kerberos 认证](/manual/appendix/items/kerberos).<br>**Digest** - 使用 Digest 身份认证。<br>选择身份认证将提供两个额外的字段用于输入用户名和密码。<br>用户宏可用于用户和密码字段。|
|*SSL verify peer（SSL验证对端）*|勾选复选框以验证 Web 服务器的 SSL 证书。<br>服务器证书将自动从系统范围的证书颁发机构 (CA) 位置获取。您可以使用 Zabbix server 或 proxy 配置参数 [SSLCALocation](/manual/appendix/config/zabbix_server) 覆盖 CA 文件的位置。<br>这将设置 [CURLOPT\_SSL\_VERIFYPEER](http://curl.haxx.se/libcurl/c/CURLOPT_SSL_VERIFYPEER.html) cURL 选项。|
|*SSL verify host（SSL验证主机）*|标记复选框以验证Web 服务器证书的 *Common Name* 字段或 *Subject Alternate Name* 字段是否匹配。<br>这将设置 [CURLOPT\_SSL\_VERIFYHOST](http://curl.haxx.se/libcurl/c/CURLOPT_SSL_VERIFYHOST.html) cURL 选项。|
|*SSL certificate file（SSL证书文件）*|用于客户端身份验证的 SSL 证书文件的名称。证书文件必须为  PEM^1^ 格式。如果证书文件还包含私钥，请将 *SSL key file（SSL秘钥文件）* 字段留空。如果密钥已加密，请在 *SSL key password（SSL秘钥密码）*字段中指定密码。包含此文件的目录由  Zabbix server 或 proxy 配置参数 [SSLCertLocation](/manual/appendix/config/zabbix_server)指定。<br>支持`HOST.*` 宏和用户宏。<br>这将设置 [CURLOPT\_SSLCERT](http://curl.haxx.se/libcurl/c/CURLOPT_SSLCERT.html) cURL 选项。|
|*SSL key file（SSL秘钥文件）*|用于客户端身份验证的 SSL 私钥文件的名称。私钥文件必须是 PEM^1^ 格式。包含此文件的目录由 Zabbix server 或 proxy 配置参数 [SSLKeyLocation](/manual/appendix/config/zabbix_server) 指定。<br>支持`HOST.*` 宏和用户宏。<br>这将设置 [CURLOPT\_SSLKEY](http://curl.haxx.se/libcurl/c/CURLOPT_SSLKEY.html) cURL 选项。|
|*SSL key password（SSL秘钥密码）*|SSL 私钥文件密码。<br>支持用户宏。<br>这将设置 [CURLOPT\_KEYPASSWD](http://curl.haxx.se/libcurl/c/CURLOPT_KEYPASSWD.html) cURL 选项。|

::: 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 server 无需重启即可获取证书中的更改。
:::

::: noteclassic
如果你在单个文件中有客户端证书和私钥，只需在 "SSL certificate file（SSL 证书文件）" 字段中指定它，并将 "SSL key file（SSL秘钥文件）" 字段留空。证书和密钥必须仍为 PEM 格式。组合证书和密钥很容易：

    cat client.crt client.key > client.pem


:::

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

[comment]: # ({634df0d5-ae869848})
#### 展示

要查看为主机配置的 Web 场景，请转到 *Monitoring（监控） → Hosts（主机）*，在列表中找到主机并单击最后一列中的 *Web* 超链接。单击方案名称以获取详细信息。

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

Web 场景的概述也可以通过 Web 监控小部件显示在 *Monitoring（监控） →
Dashboard（仪表盘）* 中。

Web 场景执行的最新结果可在 *Monitoring（监控） → Latest data（最新数据）* 中找到。

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

[comment]: # ({42ab5787-42ab5787})
#### 扩展监控

记录收到的 HTML 页面内容是有必要的，尤其是当某些 Web 场景步骤失败 。调试级别 5（跟踪）用于此目的。此级别可以在 [server](/manual/appendix/config/zabbix_server) 和 [proxy](/manual/appendix/config/zabbix_proxy) 配置文件中设置，也可以使用运行时控制选项 （`-R log_level_increase="http poller,N"`，其中 N 是进程号）。以下示例演示了如何在已设置调试级别 4 的情况下启动扩展监控：

    Increase log level of all http pollers:
    shell> zabbix_server -R log_level_increase="http poller"

    Increase log level of second http poller:
    shell> zabbix_server -R log_level_increase="http poller,2"

如果不需要扩展 Web 监控，可以使用`-R log_level_decrease` 选项。

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