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场景的流程如下:

  • 前往: Data collection → Hosts (or Templates)(数据采集→主机或模板)
  • 点击位于主机/模板功能项一栏中的Web
  • 点击右侧的Create web scenario(创建场景) 或在场景名称上编辑现有场景。
  • 在表格中输入有关场景的参数。

Scenario(场景)配置选项中,允许用户配置Web场景的常规参数。

9. Web 监控 - 图1

所有必填输入字段都用红色星号标记。

场景参数:

参数描述
Name唯一的场景名称。
User macros(用户宏)支持使用。Note 如果使用用户宏,那么这些宏在web monitoring item名称中将处于未解析的状态。
Update interval场景执行的频率。
支持使用Time suffixes (时间后缀),例如,30s,1m,2h,1d。
支持使用User macros (用户宏)。Note如果使用用户宏并修改其数值(例如,5m → 30s), 则将根据先前设定的值执行下一次检查 (在下一次执行时使用示例值).
新的网络场景将在创建后60秒内进行检查。
Attempts系统尝试运行Web场景步骤的次数。如果出现网络问题(超时、无连接等),Zabbix可以多次重复执行同一个步骤。该数字集将同样影响场景的每个步骤。最多可以指定10次尝试,默认值为1。
Note: Zabbix不会因为错误的响应代码或所需字符串不匹配而进行步骤重复操作。
Agent选择一个客户端代理。
Zabbix将假装是选定的浏览器。当一个网站为不同的浏览器返回不同的内容时,这种方式将会很有用。
用户宏可以用于此字段。
HTTP proxy您可以使用以下格式指定要使用的HTTP代理[protocol://][username[:password]@]proxy.example.com[:port]
这设置了CURLOPT_PROXY cURL配置。
可选的protocol://前缀可用于指定替代的代理协议(在cURL 7.21.7中添加了对协议前缀的支持)。如果未指定任何协议,则代理将被视为HTTP代理。
默认情况下,将使用1080端口。
如果指定,代理将覆盖与代理相关的环境变量,如http_proxy、HTTPS_proxy。如果未指定,代理将不会覆盖与代理相关的环境变量。输入的值按原样传递,不会进行健全性检测。
用户也可以输入SOCKS代理地址。如果指定了错误的协议,则连接将失败,并且该项目将变得不受支持。
Note HTTP代理只支持简单的身份验证。
用户宏可以用于此字段。
Variables可以在场景步骤中使用的变量(URL、发布变量)。
它们具有以下格式:
{macro1}=value1
{macro2}=value2
{macro3}=regex:<regular expression>
举例说明:
{username}=Alexei
{password}=kj3h5kJ34bd
{hostid}=regex:hostid is ([0-9]+)
后续可以在步骤中将宏引用为{username}、{password}和{hostid}。Zabbix会自动将它们替换为实际值。请注意,带有“regex:”的变量需要一个步骤才能获得正则表达式的值,因此提取的值只能应用于下一个步骤。
如果值部分以regex:开头,则后面的部分将被视为搜索网页的正则表达式,如果找到,则将匹配项存储在变量中。必须至少存在一个子组,以便可以提取匹配的值。
支持用户宏和{HOST.} macros
当在查询变量的字段或表单数据中使用时,变量会自动进行URL编码,但在原始数据或直接在URL中使用时必须手动进行URL编码。
Headers执行请求时使用HTTP标头。可以使用默认标头和自定义标头。
标头将使用默认设置进行分配,具体取决于从方案级别的下拉列表中选择的Agent类型,并且将应用于所有步骤,除非它们是在步骤级别上自定义的。
需要注意的是,在步骤级别上定义标头会自动丢弃之前定义的所有标头,但通过从场景级别的下拉列表中选择“用户代理”分配的默认标头除外。
但是,即使是“用户代理”默认标头也可以通过在步骤级别上指定目标来实行覆盖。
要在场景级别上取消设置标头,应在步骤级别上对标头进行命名和属性化,而不配置任何值。
标头应使用与HTTP协议中显示的语法相同的语法,也可以选择使用一些由CURLOPT_HTTPHEADER提供的cURL功能。
举例说明:
Accept-Charset=utf-8
Accept-Language=en-US
Content-Type=application/xml; charset=utf-8
用户宏和{HOST.} macros 同样支持。
Enabled如果选中此框,则场景处于活动状态,否则为禁用状态。

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

9. Web 监控 - 图2根据现有场景的属性创建另一个场景。
9. Web 监控 - 图3删除场景的历史和趋势数据。这将使服务器在删除数据后立即执行场景。

如果HTTP proxy 字段空白,使用HTTP代理的另一种方式是设置HTTP代理相关的环境变量。

对 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

Steps(步骤)配置选项允许用户可以配置web场景步骤。要添加web场景步骤,单击Steps (步骤)栏中的 Add(添加)按钮进行创建。

9. Web 监控 - 图4

这里不建议用户在URLs中选择加密格式的user macros (用户宏),因为这些用户宏会被系统解析为乱码:”******“。

配置步骤

9. Web 监控 - 图5

步骤参数:

参数描述
Name唯一的步骤名称。
支持使用User macros(用户宏)Note 如果使用用户宏,那么这些宏在web monitoring item名称中将处于未解析的状态。
URLURL用于连接和检索数据。例如:
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(宏)。
PostHTTP 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 响应中检索正文和标头
TimeoutZabbix 处理 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(标签)配置选项允许定义场景级别的标签

9. Web 监控 - 图6

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

认证配置

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

9. Web 监控 - 图7

认证参数:

参数描述
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 passwordSSL 私钥文件密码。
支持用户宏。
配置CURLOPT_KEYPASSWD cURL选项。

[1] Zabbix 仅支持 PEM 格式的证书和私钥文件。 如果用户拥有PKCS #12 格式文档(通常带有扩展名*.p12 或者*.pfx)的证书和私钥数据,可以使用以下命令从中生成 PEM 文件:

  1. openssl pkcs12 -in ssl-cert.p12 -clcerts -nokeys -out ssl-cert.pem
  2. openssl pkcs12 -in ssl-cert.p12 -nocerts -nodes -out ssl-cert.key

Zabbix server 无需重启即可获取证书中的更改。

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

  1. cat client.crt client.key > client.pem

展示

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

9. Web 监控 - 图8

Web 场景的概述也可以通过 Web 监控部件显示在Dashboards 中。

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

监控扩展

记录收到的 HTML 页面内容是十分必要的。尤其是当某些 Web 场景步骤失败 。调试级别 5(跟踪)的存在便是应用于此目的。此级别可以在serverproxy 配置文件中设置,也可以使用运行控制选项 (-R log_level_increase="http poller,N", 其中 N 是进程号)。以下示例演示了如何在已设置调试级别 4 的情况下启动扩展监控:

  1. # Increase log level of all http pollers:
  2. zabbix_server -R log_level_increase="http poller"
  3. # Increase log level of second http poller:
  4. zabbix_server -R log_level_increase="http poller,2"

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