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场景的常规参数。
所有必填输入字段都用红色星号标记。
场景参数:
参数 | 描述 |
---|---|
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 | 如果选中此框,则场景处于活动状态,否则为禁用状态。 |
请注意,在编辑现有场景时,有两个额外的按钮可供使用:
根据现有场景的属性创建另一个场景。 | |
删除场景的历史和趋势数据。这将使服务器在删除数据后立即执行场景。 |
如果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(添加)按钮进行创建。
这里不建议用户在URLs中选择加密格式的user macros (用户宏),因为这些用户宏会被系统解析为乱码:”******“。
配置步骤
步骤参数:
参数 | 描述 |
---|---|
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(跟踪)的存在便是应用于此目的。此级别可以在server 和 proxy 配置文件中设置,也可以使用运行控制选项 (-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
选项。