这是原厂英文文档的翻译页面. 欢迎帮助我们 完善文档.
2022 Zabbix中国峰会
2022 Zabbix中国峰会

9. Web 监控

概览

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

要执行 web 监控,Zabbix server 的初始 配置 必须支持 cURL (libcurl)。

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

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

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

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

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

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

更多详细信息,请参见 web 监控项

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

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

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

查看使用 HTTPS 协议进行 Web 监控的 已知问题

配置 Web 场景

配置 Web 场景流程:

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

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

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

场景参数:

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

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

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

如果 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(添加)

不得在 URL 中使用加密 用户宏 因为它们会被解析成 "******"。

配置步骤

步骤参数:

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

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

查看配置 Web 监控步骤的 真实案例

配置标签

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

标签允许过滤 Web 场景和 Web 监控项

配置认证

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

认证参数:

参数 描述
Authentication(认证) 身份认证选项。
None(无) - 不使用身份认证。
Basic(基本) - 使用基本身份验证。
NTLM - 使用 NTLM( Windows NT LAN Manager) 身份认证。
Kerberos - 使用 Kerberos 身份验证。另请参阅:Zabbix 配置 Kerberos 认证.
Digest - 使用 Digest 身份认证。
选择身份认证将提供两个额外的字段用于输入用户名和密码。
用户宏可用于用户和密码字段。
SSL verify peer(SSL验证对端) 勾选复选框以验证 Web 服务器的 SSL 证书。
服务器证书将自动从系统范围的证书颁发机构 (CA) 位置获取。您可以使用 Zabbix server 或 proxy 配置参数 SSLCALocation 覆盖 CA 文件的位置。
这将设置 CURLOPT_SSL_VERIFYPEER cURL 选项。
SSL verify host(SSL验证主机) 标记复选框以验证Web 服务器证书的 Common Name 字段或 Subject Alternate Name 字段是否匹配。
这将设置 CURLOPT_SSL_VERIFYHOST cURL 选项。
SSL certificate file(SSL证书文件) 用于客户端身份验证的 SSL 证书文件的名称。证书文件必须为 PEM1 格式。如果证书文件还包含私钥,请将 SSL key file(SSL秘钥文件) 字段留空。如果密钥已加密,请在 SSL key password(SSL秘钥密码)字段中指定密码。包含此文件的目录由 Zabbix server 或 proxy 配置参数 SSLCertLocation指定。
支持HOST.* 宏和用户宏。
这将设置 CURLOPT_SSLCERT cURL 选项。
SSL key file(SSL秘钥文件) 用于客户端身份验证的 SSL 私钥文件的名称。私钥文件必须是 PEM1 格式。包含此文件的目录由 Zabbix server 或 proxy 配置参数 SSLKeyLocation 指定。
支持HOST.* 宏和用户宏。
这将设置 CURLOPT_SSLKEY cURL 选项。
SSL key password(SSL秘钥密码) SSL 私钥文件密码。
支持用户宏。
这将设置 CURLOPT_KEYPASSWD cURL 选项。

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

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

cat client.crt client.key > client.pem

展示

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

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

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

扩展监控

记录收到的 HTML 页面内容是有必要的,尤其是当某些 Web 场景步骤失败 。调试级别 5(跟踪)用于此目的。此级别可以在 serverproxy 配置文件中设置,也可以使用运行时控制选项 (-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 选项。