7 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 场景:
- 前往:数据采集 → 主机(或 模板)
- 在主机/模板所在行中点击 Web
- 点击右侧的 创建 web 场景(或点击场景名称以编辑现有场景)
- 在表单中输入场景参数
场景 选项卡允许你配置 web 场景的常规参数。

所有必填输入字段都以红色星号标记。
场景参数:
| 参数 | 说明 |
|---|---|
| 名称 | 唯一的场景名称。 支持用户宏。请注意,如果使用了用户宏,这些宏在 web 监控项 名称中将保持未解析状态。 |
| 更新间隔 | 场景执行的频率。 支持时间后缀,例如 30s、1m、2h、1d。 支持用户宏。请注意,如果使用了用户宏且其值发生变化(例如 5m → 30s),下一次检查仍将按照之前的值执行(以上述示例值来说,会在更靠后的时间执行)。 新的 web 场景将在创建后的 60 秒内进行检查。 |
| 尝试次数 | 执行 web 场景步骤的尝试次数。如果出现网络问题(超时、无连接等),Zabbix 可以多次重复执行某个步骤。设置的数值将同等作用于场景中的每个步骤。最多可指定 10 次尝试,默认值为 1。 注意:如果是由于错误的响应代码或必需字符串不匹配,Zabbix 不会重复执行该步骤。 |
| Agent | 选择一个客户端 agent。 Zabbix 将模拟为所选浏览器。这在网站针对不同浏览器返回不同内容时非常有用。 此字段中可以使用用户宏。 |
| HTTP proxy | 你可以指定要使用的 HTTP proxy,格式为 [protocol://][username[:password]@]proxy.example.com[:port]。这将设置 cURL 选项 CURLOPT_PROXY。 可选的 protocol:// 前缀可用于指定其他 proxy 协议(协议前缀支持是在 cURL 7.21.7 中添加的)。如果未指定协议,则该 proxy 将被视为 HTTP proxy。默认将使用 1080 端口。 如果已指定,该 proxy 将覆盖与 proxy 相关的环境变量,例如 http_proxy、HTTPS_PROXY。如果未指定,则不会覆盖与 proxy 相关的环境变量。输入的值将按“原样”传递,不会进行合理性检查。 你也可以输入 SOCKS proxy 地址。如果指定了错误的协议,连接将失败,监控项将变为不支持。 注意,HTTP proxy 仅支持简单认证。 此字段中可以使用用户宏。 |
| 变量 | 可在场景步骤中使用的变量(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 proxy 字段留空,使用 HTTP proxy 的另一种方式是设置与 proxy 相关的环境变量。
对于 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 中,因为它们会解析为 "******"。
配置步骤

步骤参数:
| 参数 | 描述 |
|---|---|
| Name | 唯一的步骤名称。 支持使用User macros(用户宏)Note 如果使用用户宏,那么这些宏在web monitoring item名称中将处于未解析的状态。 |
| URL | URL用于连接和检索数据。例如: https://www.example.com http://www.example.com/download 域名可以使用Unicode字符指定。在执行web场景步骤时,域名会自动转换为ASCII格式。 Parse按钮可以用于分离可选查询字段(like ?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(场景)界别的变量描述。 变量在用于查询字段或用于发布变量的表单数据时会自动进行 URL 编码,但在原始发布或直接在 URL 中使用时必须手动进行 URL 编码。 |
| Headers | 执行请求时将发送的自定义 HTTP 标头。 数据的属性和数值会对应显示 步骤级别的标头将覆盖为场景指定的标题。 应该注意的是,在步骤级别定义标头会自动丢弃所有先前定义的标头,但通过从场景级别的下拉列表中选择“用户代理”来分配的默认标头除外。 但无论如何,即使'User-Agent' 默认标头也可以通过在步骤级别指定它来覆盖。 _例如,设置没有值的 'User-Agent' 属性将删除在场景级别设置的 User-Agent 值。 支持用户宏和{HOST.*} 宏。 设定CURLOPT_HTTPHEADER cURL选项。 |
| Follow redirects | 标记复选框以遵循 HTTP 重定向。 设定CURLOPT_FOLLOWLOCATION cURL选项。 |
| 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) 与所需的模式匹配,否则该步骤将失败。如果为空,则不检查所需的字符串。 例如: Zabbix主页 Welcome.*admin Note: 根据regular expressions原则,不支持引用在 Zabbix 前端创建。 支持User macros(用户宏)。 |
| Required status codes | 预期的 HTTP 状态代码列表。如果 Zabbix 获得不在列表中的代码,则该步骤将失败 如果为空,则不检查状态代码。 例如:200,201,210-299 支持 用户宏。 |
Web 场景步骤中的任何更改只有在保存整个场景时才会保存。
更多有关Web 配置监控步骤的信息,可以查看real-life example (真实案例)。
标签配置
Tags(标签)配置选项允许定义场景级别的标签。

标签允许过滤 Web 场景和 Web的监控项。
配置认证
Authentication 选项卡允许您配置场景认证选项。选项卡名称旁边的绿色圆点表示已启用某种类型的 HTTP 认证。

认证参数:
| Parameter | Description |
|---|---|
| HTTP authentication | 选择认证选项: None - 不使用认证; Basic - 使用基本认证; NTLM - 使用 NTLM(Windows NT LAN Manager)认证; Kerberos - 使用 Kerberos 认证(另请参见:使用 Zabbix 配置 Kerberos); Digest - 使用 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 场景,请转到Monitoring → Hosts(监控→主机)在列表中找到主机并单击最后一列中的 Web 超链接。 单击方案名称以获取详细信息。

Web 场景的概述也可以通过 Web 监控部件显示在Dashboards 中。
Web 场景执行的最新结果可在Monitoring → Latest data (监控→最新数据)中找到。
扩展监控
有时需要记录接收到的 HTML 页面内容。
如果某个 web 场景步骤失败,这一点尤其有用。
调试级别 5(trace)可用于此目的。
此级别可在 server 和 proxy 配置文件中设置,或使用 运行时控制 选项(-R log_level_increase="http poller,N",其中 N 为进程编号)进行设置。
以下示例演示了在调试级别 4 已经设置的情况下,如何启动扩展监控:
# 提高所有 http poller 的日志级别:
zabbix_server -R log_level_increase="http poller"
# 提高第二个 http poller 的日志级别:
zabbix_server -R log_level_increase="http poller,2"
如果不需要扩展 web 监控,可使用
-R log_level_decrease 选项将其停止。

