Web 监控

概述

使用 Zabbix,您可以检查网站的多个可用性方面。

要执行 web 监控,Zabbix 服务器必须先使用 cURL(libcurl)支持进行配置。

要启用 web 监控,您需要定义 web 场景。一个 web 场景由一个或多个 HTTP 请求或“步骤”组成。这些步骤由 Zabbix 服务器按预定义顺序定期执行。如果某个主机通过 proxy 监控,则这些步骤由 proxy 执行。

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

任何 web 场景都会收集以下信息:

  • 整个场景所有步骤的平均每秒下载速度
  • 失败的步骤编号
  • 最后一个错误消息

任何 web 场景步骤都会收集以下信息:

  • 每秒下载速度
  • 响应时间
  • 响应代码

更多详情,请参见web 监控监控项。

执行 web 场景时收集的数据会保存在数据库中。这些数据会自动用于图形、触发器和通知。

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

Zabbix web 监控同时支持 HTTP 和 HTTPS。运行 web 场景时,Zabbix 可选择跟随重定向(参见下方选项 Follow redirects)。重定向的最大数量硬编码为 10(使用 cURL 选项 CURLOPT_MAXREDIRS)。在单个场景的执行过程中,所有 cookie 都会被保留。

配置 Web 场景

要配置 Web 场景:

  1. 转到:数据采集 > 主机(或模板)。
  2. 在主机/模板所在行中单击 Web。
  3. 单击右侧的 创建 Web 场景(或单击场景名称以编辑现有场景)。
  4. 在表单中输入场景参数。

场景选项卡用于配置 Web 场景的常规参数。

所有必填输入字段均以红色星号标记。

场景参数:

参数 描述
名称 唯一的场景名称。
支持用户宏。注意,如果使用用户宏,这些宏将在Web 监控监控项名称中保持未解析状态。
更新间隔 场景的执行频率。
支持时间后缀,例如 30s、1m、2h、1d。
支持用户宏。注意,如果使用用户宏且其值发生更改(例如,5m → 30s),下一次检查将按照之前的值执行(使用示例值时,执行时间会更晚)。
新建的 Web 场景将在创建后的 60 秒内进行检查。
尝试次数 执行 Web 场景步骤的尝试次数。如果出现网络问题(超时、无法连接等),Zabbix 可以多次重复执行某个步骤。设置的数值将同样应用于场景中的每个步骤。最多可指定 10 次尝试,默认值为 1。
注意:Zabbix 不会因为错误的响应代码或所需字符串不匹配而重复执行步骤。
Agent 选择客户端 agent。
Zabbix 将模拟所选浏览器。这在网站针对不同浏览器返回不同内容时非常有用。
此字段中可以使用用户宏。
HTTP 代理 可以使用以下格式指定要使用的 HTTP 代理:[protocol://][username[:password]@]proxy.example.com[:port]。
这将设置 CURLOPT_PROXY cURL 选项。
可选的 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.*} 宏。
在查询字段或 post 变量的表单数据中使用变量时,变量会自动进行 URL 编码;但在原始 post 数据或直接在 URL 中使用变量时,必须手动进行 URL 编码。
标头 执行请求时使用 HTTP 标头。可以使用默认标头和自定义标头。
标头将根据场景级别下拉列表中所选的 Agent 类型,使用默认设置进行分配,并应用于所有步骤,除非在步骤级别对其进行了自定义定义。
请注意,在步骤级别定义标头会自动丢弃之前定义的所有标头,但场景级别下拉列表中选择 'User-Agent' 所分配的默认标头除外。
但是,即使是 'User-Agent' 默认标头,也可以通过在步骤级别指定它来覆盖。
要取消设置场景级别的标头,应在步骤级别指定该标头名称,并将其设置为空值。
标头应使用与其在 HTTP 协议中出现时相同的语法列出,也可以使用 CURLOPT_HTTPHEADER cURL 选项支持的其他功能。
例如:
Accept-Charset=utf-8
Accept-Language=en-US
Content-Type=application/xml; charset=utf-8
支持用户宏和 {HOST.*} 宏。
启用 选中此复选框时,场景处于活动状态;否则,场景将被禁用。

请注意,编辑现有场景时,表单中还会提供两个额外按钮:

根据现有场景的属性创建另一个场景。
删除该场景的历史数据和趋势数据。删除数据后,服务器将立即执行该场景。

如果HTTP 代理字段留空,还可以通过设置代理相关环境变量来使用 HTTP 代理。

对于 HTTP 检查 - 为 Zabbix 服务器用户设置 http_proxy 环境变量。例如: http_proxy=http://proxy_ip:proxy_port。

对于 HTTPS 检查 - 设置 HTTPS_PROXY 环境变量。例如: HTTPS_PROXY=http://proxy_ip:proxy_port。运行 shell 命令 # man curl 可获取更多详细信息。

步骤选项卡用于配置 Web 场景步骤。要添加 Web 场景步骤,请在步骤区域中单击 添加。

不得在 URL 中使用机密用户宏,因为它们将解析为 "******"。

配置步骤

步骤参数:

Parameter Description
Name 唯一的步骤名称。
支持 User macros。注意,如果使用了用户宏,这些宏在 web monitoring item 名称中将保持未解析状态。
URL 用于连接并检索数据的 URL。例如:
https://www.example.com
http://www.example.com/download
域名可以使用 Unicode 字符指定。在执行 web 场景步骤时,它们会自动转换为 punycode 并转为 ASCII。
可使用 Parse 按钮将可选查询字段(例如 ?name=Admin&password=mypassword)从 URL 中分离出来,并将属性和值移至 Query fields,以便自动进行 URL 编码。
URL 中可以使用变量,语法为 {macro}。变量也可以使用 {{macro}.urlencode()} 语法手动进行 URL 编码。
支持用户宏和 {HOST.*} macros。
最多限制为 2048 个字符。
Query fields 用于该 URL 的 HTTP GET 变量。
以属性和值对的形式指定。
值会自动进行 URL 编码。来自场景变量、用户宏或 {HOST.*} 宏的值会先解析,然后自动进行 URL 编码。使用 {{macro}.urlencode()} 语法会对其进行双重 URL 编码。
支持用户宏和 {HOST.*} macros。
Post HTTP POST 变量。
在 Form data 模式下,以属性和值对的形式指定。
值会自动进行 URL 编码。来自场景变量、用户宏或 {HOST.*} 宏的值会先解析,然后自动进行 URL 编码。
在 Raw data 模式下,属性/值会显示在单行中,并使用 & 符号连接。
原始值可使用 {{macro}.urlencode()} 或 {{macro}.urldecode()} 语法手动进行 URL 编码/解码。
例如:id=2345&userid={user}
如果 {user} 被定义为 web 场景的变量,则在执行步骤时会被其值替换。如果希望对该变量进行 URL 编码,请将 {user} 替换为 {{user}.urlencode()}。
支持用户宏和 {HOST.*} macros。
Variables 可用于 GET 和 POST 功能的步骤级变量。
以属性和值对的形式指定。
步骤级变量会覆盖场景级变量或前一步骤中的变量。不过,步骤级变量的值只会影响后续步骤,而不会影响当前步骤。
其格式如下:
{macro}=value
{macro}=regex:<regular expression>
更多信息请参见 scenario 级别的变量说明。
当在查询字段或用于 post 变量的表单数据中使用时,变量会自动进行 URL 编码;但在原始 post 数据中或直接在 URL 中使用时,必须手动进行 URL 编码。
Headers 执行请求时发送的自定义 HTTP 标头。
以属性和值对的形式指定。
在步骤级别定义的标头将仅用于该特定步骤。
需要注意的是,在步骤级别定义标头时,会自动丢弃之前定义的所有标头,除了在场景级别通过下拉列表选择 'User-Agent' 时分配的默认标头。
不过,即使是 'User-Agent' 默认标头,也可以通过在步骤级别指定它来覆盖。
例如,为标头指定名称但不设置值,将取消场景级别的默认标头。
支持用户宏和 {HOST.*} 宏。
这会设置 cURL 选项 CURLOPT_HTTPHEADER。
Follow redirects 勾选此复选框以跟随 HTTP 重定向。
这会设置 cURL 选项 CURLOPT_FOLLOWLOCATION。
Retrieve mode 选择检索模式:
Body - 仅检索 HTTP 响应体
Headers - 仅检索 HTTP 响应头
Body and headers - 检索 HTTP 响应体和响应头
Timeout Zabbix 处理该 URL 的时间不会超过设置的时长(从 1 秒到最多 1 小时)。实际上,此参数定义了建立到该 URL 连接的最大时间以及执行 HTTP 请求的最大时间。因此,Zabbix 在该步骤上花费的时间不会超过 2 x Timeout 秒。
支持 Time suffixes,例如 30s、1m、1h。支持 User macros。
Required string 必需的正则表达式模式。
除非检索到的内容(HTML)匹配所需模式,否则该步骤将失败。如果为空,则不执行必需字符串检查。
例如:
Homepage of Zabbix
Welcome.*admin
注意:此字段不支持引用在 Zabbix 前端中创建的 regular expressions。
支持用户宏和 {HOST.*} macros。
Required status codes 期望的 HTTP 状态码列表。如果 Zabbix 获取到的状态码不在列表中,该步骤将失败。
如果为空,则不执行状态码检查。
例如:200,201,210-299
支持用户宏。

对 web 场景步骤所做的任何更改,只有在保存整个场景时才会保存。

另请参见一个 实际示例,了解如何配置 web 监控步骤。

配置标签

标签选项卡允许定义场景级别的 标签。

标签功能可用于筛选 web 场景和 web 监控 监控项。

配置认证

认证 选项卡允许你配置场景的认证选项。选项卡名称旁边的绿色圆点表示已启用某种 HTTP 认证。

认证参数:

Parameter Description
HTTP authentication 选择认证选项:
None - 不使用认证;
Basic - 使用基本认证;
NTLM - 使用 NTLM (Windows NT LAN Manager) 认证;
Kerberos - 使用 Kerberos 认证(另请参见:使用 Zabbix 配置 Kerberos);
Digest - 使用摘要认证。
User 输入用户名(最多 255 个字符)。
当 HTTP authentication 设置为 Basic、NTLM、Kerberos 或 Digest 时,此字段可用。支持用户宏。
Password 输入用户密码(最多 255 个字符)。
当 HTTP authentication 设置为 Basic、NTLM、Kerberos 或 Digest 时,此字段可用。支持用户宏。
SSL verify peer 勾选此复选框以验证 Web 服务器的 SSL 证书。
服务器证书将自动从系统范围的证书颁发机构(CA)位置获取。你可以使用 Zabbix 服务器或 proxy 配置参数 SSLCALocation 覆盖 CA 文件位置。
这会设置 cURL 选项 CURLOPT_SSL_VERIFYPEER。
SSL verify host 勾选此复选框以验证 Web 服务器证书的 Common Name 字段或 Subject Alternate Name 字段是否匹配。
这会设置 cURL 选项 CURLOPT_SSL_VERIFYHOST。
SSL certificate file 用于客户端认证的 SSL 证书文件名。证书文件必须为 PEM1 格式。如果证书文件中还包含私钥,请将 SSL key file 字段留空。如果密钥已加密,请在 SSL key password 字段中指定密码。包含此文件的目录由 Zabbix 服务器或 proxy 配置参数 SSLCertLocation 指定。
此字段可使用 HOST.* 宏和用户宏。
这会设置 cURL 选项 CURLOPT_SSLCERT。
SSL key file 用于客户端认证的 SSL 私钥文件名。私钥文件必须为 PEM1 格式。包含此文件的目录由 Zabbix 服务器或 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

显示

要查看为主机配置的 Web 场景:

  1. 转到 监测 > 主机。
  2. 在列表中找到主机,然后单击最后一列中的 Web 超链接。
  3. 单击场景名称以获取详细信息。

还可以通过 Web 监测小组件在 仪表板 中显示 Web 场景概览。

Web 场景执行的最新结果可在 监测 > 最新数据 部分查看。

扩展监控

有时需要记录接收到的 HTML 页面内容。
如果某个 web 场景步骤失败,这尤其有用。
调试级别 5(trace)用于实现这一目的。
该级别可以在 服务器 和 proxy 配置文件中设置,或者使用 运行时控制 选项(-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"

如果不需要扩展 web 监控,可以使用 -R log_level_decrease 选项停止它。