9 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场景(或点击场景名称以 编辑现有场景)
  • 在表单中输入场景的参数

Scenario 选项卡允许您配置一个 Web场景

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

场景参数:

参数 描述
Name 唯一的场景名称。
支持User macros注意,如果使用了用户宏,这些宏在web monitoring item名称中将保持未解析状态。
Update interval 场景执行的频率。
支持Time suffixes,例如30s、1m、2h、1d。
支持User macros注意:如果使用了用户宏且其值被更改(例如5m→30s),下一次检查将根据之前的值执行(以示例值为例会更晚执行)。
新建的Web场景将在创建后60秒内进行检查。
Attempts 执行Web场景步骤的尝试次数。当出现网络问题(超时、无法连接等)时,Zabbix可多次重试执行步骤。该数值将同等作用于场景的每个步骤。最多可指定10次尝试,默认值为1。
注意:Zabbix不会因响应码错误或所需string不匹配而重复执行步骤。
Agent 选择客户端 agent.
Zabbix 将模拟所选浏览器行为. 当网站针对不同浏览器返回不同内容时, 此功能非常有用.
此字段支持使用用户宏.
HTTP proxy 您可以通过[protocol://][username[:password]@]proxy.example.com[:port]格式指定要使用的HTTP proxy.
这将设置CURLOPT_PROXY cURL选项.
可选前缀protocol://可用于指定替代的proxy协议(协议前缀支持在cURL 7.21.7版本中添加). 若未指定协议, proxy将被视为HTTP proxy.
默认情况下将使用1080端口.
若指定, proxy将覆盖proxy相关环境变量如http_proxy, HTTPS_PROXY. 若未指定, proxy不会覆盖proxy相关环境变量. 输入的值将"原样"传递, 不进行完整性检查.
您也可以输入SOCKS proxy地址. 如果指定了错误的协议, 连接将失败且监控项将变为不支持状态.
注意HTTP proxy仅支持简单身份验证.
此字段可使用用户宏.
Variables 可在场景步骤中使用的变量(URL、POST变量)。
它们遵循以下格式:
{macro1}=value1
{macro2}=value2
{macro3}=regex:<正则表达式>
{macro4}=jsonpath:<jsonpath路径>
{macro5}=xmlxpath:<xmlxpath路径>
{macro6}={{macro}.function()} (参见macro functions)。
注意:从Zabbix 7.0.4开始支持在变量中使用JSONPath、XML XPath和宏函数。
例如:
{username}=Alexei
{password}=kj3h5kJ34bd
{hostid}=regex:hostid is ([0-9]+)
{url}=jsonpath:$.host_url
{status}=xmlxpath://主机/response/status
{newvar}={{myvar}.btoa()}
这些宏可在步骤中通过{username}、{password}、{hostid}等形式引用。Zabbix会自动将其替换为实际值。注意带有regex:的变量需要一个步骤来get正则表达式的值,因此提取的值只能应用于后续步骤。
若值部分以regex:开头,则其后内容将被视为在网页中搜索的正则表达式,匹配成功时将结果存入变量。必须包含至少一个子组以便提取匹配值。
支持用户宏和{主机.*} macros
当变量用于query字段或POST变量的表单数据时会被自动URL编码,但在原始POST或直接用于URL时必须手动编码。
Headers 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
支持用户宏和{主机.*} macros
Enabled 勾选此框表示场景处于活动状态,否则为禁用状态。

请注意,在编辑现有场景时,会出现两个额外的按钮 以以下形式提供:

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

如果 HTTP proxy 字段留空,另一种方式用于 使用HTTP proxy的目的是设置与proxy相关的环境变量。

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

对于HTTPS检查 - 设置HTTPS_PROXY环境变量。对于 示例,HTTPS_PROXY=http://proxy_ip:proxy_port。更多详情请见 可通过运行shell命令获取:# man curl

步骤选项卡允许您配置Web场景的步骤。要添加 在Web场景步骤中,点击Steps区块中的Add

密钥 配置 不得 在URL中使用时将解析为"******".

配置步骤

步骤参数:

Parameter Description
Name 唯一的步骤名称。
支持用户宏注意,如果使用了用户宏,这些宏在web monitoring item名称中将保持未解析状态。
URL 用于连接并检索数据的 URL。例如:
https://www.example.com
http://www.example.com/download
域名可以使用 Unicode 字符指定。在执行 web 场景步骤时,它们会自动转换为 ASCII 的 punycode。
可使用 Parse 按钮将可选查询字段(如 ?name=Admin&password=mypassword)从 URL 中分离出来,并将属性和值移到 Query fields 中,以便自动进行 URL 编码。
URL 中可以使用变量,语法为 {macro}。也可以使用 {{macro}.urlencode()} 语法手动对变量进行 URL 编码。
支持用户宏和 {HOST.*}
最多限制为 2048 个字符。
Query fields 用于该 URL 的 HTTP GET 变量。
以属性和值对的形式指定。
值会自动进行 URL 编码。来自场景变量、用户宏或 {HOST.*} 宏的值会先解析,然后自动进行 URL 编码。使用 {{macro}.urlencode()} 语法会对其进行双重 URL 编码。
支持用户宏和 {HOST.*}
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.*}
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 秒。
支持时间后缀,例如 30s、1m、1h。支持用户宏
Required string 必需的正则表达式模式。
除非检索到的内容(HTML)匹配所需模式,否则该步骤将失败。如果为空,则不执行必需字符串检查。
例如:
Homepage of Zabbix
Welcome.*admin
注意:此字段不支持引用在 Zabbix 前端中创建的正则表达式
支持用户宏和 {HOST.*}
Required status codes 期望的 HTTP 状态码列表。如果 Zabbix 获取到不在列表中的状态码,该步骤将失败。
如果为空,则不执行状态码检查。
例如:200,201,210-299
支持用户宏。

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

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

配置标签

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

标签功能允许过滤Web场景和Web监控 items

配置认证

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

认证参数:

参数 描述
HTTP authentication 选择认证选项:
- 不使用认证;
基本 - 使用基本认证;
NTLM - 使用NTLM(Windows NT LAN Manager)认证;
Kerberos - 使用Kerberos认证(另请参见:Configuring Kerberos with Zabbix);
摘要 - 使用摘要认证。
User 输入用户名(最多255个字符)。
如果HTTP认证设置为基本、NTLM、Kerberos或摘要,则此字段可用。支持用户宏。
Password 输入用户密码(最多255个字符)。
如果HTTP认证设置为基本、NTLM、Kerberos或摘要,则此字段可用。支持用户宏。
SSL verify peer 勾选此复选框以验证Web服务器的SSL证书。
服务器证书将自动从系统范围的证书颁发机构(CA)位置获取。您可以使用Zabbix server或proxy配置参数sslcalocation覆盖CA文件的位置。
这将设置CURLOPT_SSL_VERIFYPEER cURL选项。
SSL verify host 勾选此复选框以验证Web服务器证书的通用名称字段或主题备用名称字段是否匹配。
这将设置CURLOPT_SSL_VERIFYHOST cURL选项。
SSL certificate file 用于客户端认证的SSL证书file名称。证书file必须为PEM1格式。如果证书file中已包含私钥,请将SSL密钥文件字段留空。如果密钥已加密,请在SSL密钥密码字段中指定密码。包含此file的目录由Zabbix server或proxy配置参数SSLCertLocation指定。
HOST.*宏和用户宏可在该字段中使用。
这将设置CURLOPT_SSLCERT cURL选项。
SSL key file 用于客户端认证的SSL私钥file名称。私钥file必须为PEM1格式。包含此file的目录由Zabbix server或proxy配置参数SSLKeyLocation指定。
HOST.*宏和用户宏可在该字段中使用。
这将设置CURLOPT_SSLKEY cURL选项。
SSL key password SSL私钥file密码。
该字段支持用户宏。
这将设置CURLOPT_KEYPASSWD cURL选项。

[1] Zabbix仅支持PEM格式的证书和私钥文件。如果您的证书和私钥数据为PKCS #12格式file(通常扩展名为*.p12或*.pfx),您可以使用以下命令generate从中提取PEMfile:

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 server可在不重启的情况下检测证书的更改。

如果您的客户端证书和私钥位于单个file中,请仅在“SSL证书文件”字段中指定它,并将“SSL密钥文件”字段留空。证书和密钥仍必须为PEM格式。合并证书和密钥非常简单:

cat client.crt client.key > client.pem

显示

要查看为 一个主机 配置的Web场景,请转至 监控 → 主机
在列表中找到 主机,并点击最后一列中的 Web 超链接。点击
场景名称以 get 详细信息。

通过Web监控小部件,Web场景概览也可以在 仪表板 中显示。

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

扩展监控

有时需要记录接收到的HTML页面内容。 这在某些Web场景步骤失败时特别有用。 调试级别 5(trace)可用于此目的。 此级别可以在 debugleveldebuglevel 配置文件中设置,或者通过使用 运行时控制 选项(-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"

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