9. Web 监控

Overview

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

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

若要启用web监控需要用户定义web场景。Web场景由一个或者多个HTTP请求或着"steps"(步骤)组成。这些步骤由Zabbix server以预设的顺序定制执行。如果主机由proxy完成监控,则这些步骤由proxy执行。

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

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

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

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

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

更多的信息,用户可以查看 web monitoring items

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

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

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

配置Web场景

要配置Web场景:

  • 请导航至:数据收集 → 主机(或模板)
  • 在主机/模板行中点击Web
  • 点击创建Web场景右侧的按钮(或点击场景名称以编辑现有场景)
  • 在表单中输入场景参数

场景选项卡允许您配置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 您可以指定一个HTTP proxy使用,格式为[protocol://][username[:password]@]proxy.example.com[:port]
这设置了CURLOPT_PROXY cURL选项。
可选的protocol://前缀可用于指定替代proxy协议(协议前缀支持在cURL 7.21.7中添加)。没有指定协议时,proxy将被视为HTTP proxy。
默认情况下,将使用1080端口。
如果指定,proxy将覆盖与proxy相关的环境变量,如http_proxy, HTTPS_PROXY。如果没有指定,proxy将不会覆盖与proxy相关的环境变量。输入的值将“原样”传递,不进行合理性检查。
您也可以输入SOCKSproxy地址。如果您指定错误的协议,连接将失败,监控项将变得不受支持。
注意仅支持使用HTTP proxy的简单身份验证。
可以在该字段中使用用户宏。
Variables 可在场景步骤中使用的变量(URL、POST变量)。
它们具有以下格式:
{macro1}=value1
{macro2}=value2
{macro3}=regex:<regular expression>
{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://host/response/status
{newvar}={{myvar}.btoa()}
然后可以在步骤中引用这些宏,如{username}, {password}, {hostid}等。Zabbix将自动将它们替换为实际值。注意,带有regex:的变量需要一步来获取正则表达式的值,因此提取的值只能应用于后续步骤。
如果值部分以regex:开头,则其后的部分被视为在网页中搜索的正则表达式,如果找到,将匹配存储在变量中。至少必须存在一个子组,以便可以提取匹配的值。
支持用户宏和{HOST.*} macros
当在query字段或POST变量的表单数据中使用时,变量会自动进行URL编码,但在原始POST或直接在URL中使用时,必须手动进行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
支持用户宏和{HOST.*} macros
Enabled 如果选中此框,场景处于活动状态,否则处于禁用状态。

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

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

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

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

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

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

秘密user macros不得在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 身份验证。

认证参数:

参数 描述
HTTP authentication 选择认证选项:
None - 不使用认证;
Basic - 使用基本验证;
NTLM - 使用NTLM (Windows NT LAN Manager)认证方式;
Kerberos - 使用 Kerberos 验证 (更多信息,请参考: Configuring Kerberos with Zabbix);
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 server 或 proxy 配置参数SSLCALocation覆盖 CA 文件的位置。
设置CURLOPT_SSL_VERIFYPEER cURL选项。
SSL verify host 标记复选框以验证Web 服务器证书的Common Name 字段或Subject Alternate Name 字段是否匹配。
配置CURLOPT_SSL_VERIFYHOST cURL选项。
SSL certificate file 用于客户端身份验证的 SSL 证书文件的名称。证书文件必须为PEM1 格式。如果证书文件还包含私钥,请将SSL key file (SSL密钥文件)字段留空。如果密钥已加密,请在SSL key password(SSL密钥密码) 字段中指定密码。 包含此文件的目录由 Zabbix server 或 proxy 配置参数由SSLCertLocation指定。
支持HOST.* 宏和用户宏。
配置CURLOPT_SSLCERT cURL选项。
SSL key file 用于客户端身份验证的 SSL 私钥文件的名称。私钥文件必须是PEM1 格式。包含此文件的目录由 Zabbix server 或 proxy 配置参数由SSLKeyLocation指定。
支持使用HOST.*宏和用户宏。
配置CURLOPT_SSLKEY cURL选项。
SSL key password 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 监控部件显示在Dashboards 中。

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

监控扩展

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