Zabbix是如何通过Web Scenario监控网站可用性的

2025-10-28 19:19:00
丁国栋
原创 40
摘要:本文重点介绍Zabbix是如何通过Web Scenario监控网站可用性的。

俗话说“基础不牢地动山摇“,确实是这样的。最近遇到一个问题是有一个Zabbix Agent节点总是“错误”地报告某个域名的网站无法访问,但登录这个节点后发现网站可以正常访问。通过Zabbix Web控制台查看这个监控节点的最新数据中的 Last error message of scenario  发现原因是“Couldn't resolve host name: Could not resolve host: example.com”。但在这个 Zabbix Agent节点上测试域名发现是正常(DNS解析正确、可以访问)的,而且在 Zabbix Server节点上测试域名也是正常的。这个让我一直很费解,于是我在 Zabbix 技术交流群里提问了“请教个问题,大家有没有遇到这样的情况:在主机上手动访问某个网站可以正常访问也能正确解析域名,但在Zabbix Agent的Web Scenario里就提示 Error: Couldn't resolve host name。我已经确认/etc/resolv.conf 文件没有问题,DNS服务器也没有限制。[Salute][Salute]”,当时有一位“黄舟舟”的热心大佬回复说“web页面探测隐约记得是从zabbix server上过去的”。因为当时我已经测试了 Zabbix Server 节点上的可访问性,所以当时并没有理解老师说的这句话,也没有联想到Zabbix Proxy的问题。直到后来我在 Zabbix Proxy 上执行某个操作时偶然发现这个节点竟然无法解析这个网站域名,才恍然大悟,原来问题在这里。果真如黄老师说的,是Zabbix Server/Proxy的问题。

下面是 AI 对于这个问题的一些回答,仅供参考。

Zabbix 是如何通过 Web Scenario 监控网站是否可用的?请介绍一下它的基本原理

简单来说,Zabbix 的 Web 场景监控(Web Scenario)就是模拟一个真实用户(或爬虫)的行为去访问你的网站,并根据一系列预定义的规则来检查访问结果,从而判断网站是否健康、可用以及性能如何。

它的核心思想是 “主动监控” ,即由 Zabbix Server 或 Proxy 主动向外部的 Web 应用发起请求,而不是被动地接收数据。


基本原理与流程

一个完整的 Web 场景监控包含以下几个关键步骤和组成部分:

1. 定义 Web 场景

首先,你需要在 Zabbix 前端为一个特定的网站(或一个完整的业务流程)创建一个“Web 场景”。一个场景代表一组连续的 HTTP 请求。

  • 名称: 场景的描述,如 “监控官网首页登录流程”。
  • 认证: 如果需要登录,可以在这里配置 HTTP 认证或包含登录信息的表单数据。
  • 客户端/代理: 指定由哪个 Zabbix Server 或 Proxy 来执行这个场景。
  • HTTP 请求头: 可以自定义 User-Agent 等,模拟特定浏览器。

2. 定义步骤

一个场景由一个或多个“步骤”组成。每个步骤模拟用户的一个操作,例如:

  • 步骤1: 访问首页 (https://www.example.com)
  • 步骤2: 点击登录链接,跳转到登录页 (https://www.example.com/login)
  • 步骤3: 在登录页填写用户名和密码,提交表单。

对于每个步骤,你需要配置:

  • URL: 要请求的具体地址。
  • 请求方法: GET 或 POST。
  • POST 数据: 如果是 POST 请求,需要提交的参数(如 username=admin&password=pass123)。
  • 超时时间: 等待回应的最长时间。

3. 执行场景与采集数据

Zabbix 会根据你设定的更新间隔(如每 1 分钟)自动执行整个 Web 场景。执行过程如下:

  1. 发起请求: Zabbix Server/Proxy 按照步骤顺序,依次向目标 URL 发送 HTTP 请求。
  2. 接收响应: 获取目标服务器返回的响应,包括 HTTP 状态码、响应正文、响应头、下载速度等信息。

4. 验证结果(核心环节)

这是判断网站是否“可用”的关键。Zabbix 会根据你预先设置的“触发器”条件来验证响应结果。验证点主要包括:

  • HTTP 状态码: 最基础的检查。通常要求状态码为 200(成功)。如果返回 404(未找到)、500(服务器内部错误)等,则视为失败。
  • 响应内容: 更深入的检查。你可以在响应正文中搜索一个或多个特定的字符串
    • 成功时: 检查是否存在标志性字符串,例如在登录后的页面检查是否包含 “欢迎回来,管理员”。
    • 失败时: 检查是否出现错误信息,例如 “系统错误”、“用户名或密码错误”等。
  • 响应时间: 监控整个步骤或场景的完成时间,用于性能监控。
  • 步骤数量: 确保场景执行了预期数量的步骤,防止因重定向等问题导致步骤缺失。

5. 生成监控项和触发器

在执行过程中,Zabbix 会自动为每个 Web 场景生成一系列内置的监控项,并收集数据:

  • 下载速度: 整个场景的平均下载速度。
  • 响应时间: 每个步骤以及整个场景的响应时间。
  • 响应代码: 最后一个步骤返回的 HTTP 状态码。

基于这些监控项,你可以创建触发器来定义故障条件。例如:

  • {Web scenario:www.zabbix.com.web.test.fail[Zabbix Home Page].max(#3)}>0
    • 含义: 如果在最近 3 次检查中,“Zabbix Home Page” 这个 Web 场景有任意一次失败,则触发告警。
  • {Web scenario:www.zabbix.com.web.test.time[Zabbix Home Page,Total].avg(300)}>3000
    • 含义: 如果 “Zabbix Home Page” 场景在最近 5 分钟内的平均响应时间超过 3000 毫秒(3 秒),则触发告警。

总结:基本原理的核心

Zabbix Web 场景监控的基本原理可以概括为:“模拟行为 -> 采集响应 -> 规则验证 -> 触发告警”

  1. 模拟用户行为: 通过配置多步骤场景,精准复现用户访问网站的关键路径。
  2. 全面采集指标: 不仅检查“是否通”,还检查“内容对不对”、“速度快不快”。
  3. 灵活的验证机制: 通过 HTTP 状态码和响应内容匹配,可以有效区分网络问题、服务器问题、应用逻辑问题。
  4. 与告警系统无缝集成: 监控结果直接转化为 Zabbix 的监控项和触发器,可以利用 Zabbix 强大的告警功能(邮件、短信、钉钉、微信等)及时通知管理员。

优势

  • 端到端监控: 从用户角度监控整个业务流程的可用性,而不仅仅是服务器端口是否开放。
  • 发现隐藏问题: 即使服务器进程正常(返回200状态码),但如果网页内容错误(如数据库连接失败提示),也能被发现。
  • 性能基准: 持续监控响应时间,有助于建立性能基线并在性能恶化时提前预警。

希望这个详细的介绍能帮助您理解 Zabbix 的 Web 场景监控机制!

为什么通过 web scenario 监控网站可用性是Zabbix Server/Proxy 发出的?

这是一个非常核心且重要的问题。Zabbix 的 Web Scenario 之所以由 Zabbix Server 或 Proxy 发起,是由其设计哲学、架构目标和这种监控方式的内在要求共同决定的。

简单直接的答案是:因为这是一种“主动式”监控,需要有一个中心大脑去主动执行检测任务并汇总结果。

下面我们从几个关键角度来深入解释为什么这样设计:


1. 主动式监控 vs. 被动式监控

这是最根本的原因。

  • 被动式监控:监控系统等待被监控对象上报数据。

    • 例子:监控一台服务器的 CPU 使用率。Zabbix Agent 安装在这台服务器上,主动收集本机的 CPU 数据,然后等待 Zabbix Server 来“拉取”数据,或者自己“推送”给 Server。
    • 角色:Zabbix Server 是请求方/接收方,被监控设备是数据提供方。
  • 主动式监控(Web Scenario 属于此类):监控系统主动向被监控对象发出请求,并根据响应判断状态。

    • 例子:检查网站 https://www.example.com 是否可访问。必须有一个主体去执行 pingcurl 或浏览器访问这个动作。
    • 角色:Zabbix Server/Proxy 必须成为这个主动发起检测动作的主体。它需要扮演一个“虚拟用户”的角色,从某个网络位置去访问目标网站。

如果让网站自己的 Zabbix Agent 来监控自己,就失去了“端到端”监控的意义。一个在防火墙内的 Agent 可能永远觉得网站是正常的,但这无法代表外部真实用户的体验。

2. 端到端监控视角

Web Scenario 的核心目标是模拟真实用户的体验。真实用户是从外部互联网访问你的网站的。

  • Zabbix Server/Proxy 的位置:通常被部署在一个能够代表用户访问路径的网络中。例如:
    • 公司内网:监控内网应用的可访问性。
    • 公有云上:监控从云上访问你网站的服务质量。
    • 多个地点:你可以在全球不同地区部署多个 Zabbix Proxy,分别执行同一个 Web Scenario,从而判断网站在不同地区的访问情况(例如,北京访问正常,但美国访问超时)。
  • 如果由目标网站的 Agent 执行:那么监控的只是“网站服务器本地回环访问是否正常”,这无法反映网络链路、防火墙、负载均衡器、DNS、CDN等中间环节的任何问题。

3. 集中控制与效率

由 Server/Proxy 集中执行和管理 Web Scenario 带来了显著优势:

  • 统一配置与管理:你只需要在 Zabbix 前端配置一次 Web Scenario,Zabbix Server 会负责调度和执行。如果让每个被监控主机上的 Agent 自己去执行,配置会变得极其分散和复杂。
  • 减轻目标服务器负担:Web Scenario 可能包含多个步骤,会占用一定的网络和计算资源。让外部的一个中心节点来承担这个开销,可以避免对需要被监控的关键业务服务器造成额外压力。
  • 结果汇总与关联分析:所有检测结果都集中返回到 Zabbix Server,便于进行统一的数据存储、趋势分析、聚合告警。例如,可以轻松比较从不同 Proxy 监控同一网站的性能差异。
  • 安全性:无需在对外提供服务的 Web 服务器上开放 Zabbix Agent 的端口或安装额外软件来支持复杂的 Web 检测功能,减少了攻击面。

4. Zabbix 的架构分工

Zabbix 的架构清晰地划分了职责:

  • Zabbix Server:大脑和指挥中心。负责调度监控任务、处理数据、计算触发器、发送告警。
  • Zabbix Proxy:区域代理。受 Server 指派,在特定网络区域执行监控任务(包括 Web Scenario),并将数据缓存和转发给 Server,用于分担压力和跨网络监控。
  • Zabbix Agent:安装在特定主机上的“感官神经”。主要负责收集该主机本地的系统信息(CPU、内存、磁盘、日志等)。

Web Scenario 这种需要主动“探出”去测试外部服务的任务,自然就落在了作为“中枢神经”的 Server 或“肢体代理”的 Proxy 身上,而不是落在负责收集本地信息的 Agent 身上。


总结类比

你可以用一个生动的类比来理解:

监控一个公司的客服电话是否畅通。

  • 被动式监控(类似 Agent 模式):你坐在客服中心里,听客服人员的电话交换机指示灯是否亮着。这只能知道设备通电了,但不知道外线是否通畅。
  • 主动式监控(Web Scenario 模式):你自己拿起手机,从公司外部、从家里、从不同城市拨打这个客服电话,亲身体验是否能接通、等待时间多长、服务态度如何。

Zabbix Server/Proxy 扮演的就是那个主动拿起手机从外部拨打电话的测试员。只有这样,才能得到真正反映用户体验的、端到端的监控结果。

因此,由 Zabbix Server/Proxy 发起 Web Scenario 是实现其监控目的的最合理、最有效的架构设计。

为什么如果 Zabbix Server/Proxy 节点无法解析网站域名,就会导致在Zabbix Agent的Web Scenario的测试结果显示无法解析域名呢?难道是因为 Web Scenario 不会实际在Zabbix Agent节点执行么?

您的问题问到了点子上,您的理解是完全正确的!这确实揭示了 Zabbix Web Scenario 执行机制的一个核心关键点。

是的,您猜对了。Web Scenario 根本不会在安装了 Zabbix Agent 的节点上执行。

当您在 Zabbix 前端配置一个监控项(比如监控一台服务器的 CPU 使用率)并将其关联到一个主机时,数据采集的逻辑位置是由监控项的类型决定的。

让我们来详细解释一下这个“错觉”和背后的原理:


1. 执行位置的真相

  • Web Scenario 在哪里执行? 在 Zabbix Server 或您指定的 Zabbix Proxy 上执行。

  • Zabbix Agent 在这个过程中的角色是什么? 基本上没有角色,或者只是一个“挂载点”。 您可以将 Zabbix Agent 理解为一个“幌子”或一个“逻辑容器”。

2. 配置上的“错觉”与设计逻辑

为什么我们会把 Web Scenario 关联到一个带有 Agent 的主机上?这主要是出于 Zabbix 的管理设计:

  • 统一管理模型:在 Zabbix 中,所有监控配置(监控项、触发器、图形等)都必须关联到一个“主机”对象上。这个“主机”是 Zabbix 中最核心的配置单元。
  • 逻辑归属:虽然 Web Scenario 是在 Server/Proxy 上物理执行的,但它所监控的目标(例如 www.example.com)在逻辑上属于某个业务应用。为了管理方便,Zabbix 的设计者决定将这类“主动检查”的配置挂在某一个最能代表该业务的主机上。通常,这个主机就是运行该网站的那台服务器的 Zabbix Agent 所在的主机。
  • 数据归属:这样,所有与该网站健康状况相关的监控项(如来自 Agent 的服务器 CPU 内存数据)和 Web Scenario 数据(网站响应时间、可用性)都集中在同一个“主机”界面下,便于管理员一目了然地查看该业务系统的整体状态。

3. 问题重现:域名解析失败的根本原因

现在,我们就能完美解释您遇到的情况了:

  1. 您在 Zabbix 前端操作:您创建了一个 Web Scenario,并把它关联到了“主机A”上。“主机A”的配置中指定了它的“Zabbix Agent”是 agent-node-ip
  2. Zabbix Server 调度任务:Zabbix Server 的调度器到了该执行这个 Web Scenario 的时间。
  3. Server 发起请求:Zabbix Server 自己(而不是命令 agent-node-ip 的 Agent)尝试去访问 www.example.com
  4. 关键步骤:域名解析:Zabbix Server 会使用它自己的 DNS 解析配置(即 /etc/resolv.conf 等)去解析 www.example.com 这个域名。
  5. 问题发生:如果 Zabbix Server 节点无法连接 DNS 服务器,或者 DNS 服务器里没有这条记录,那么解析就会失败。Zabbix Server 会得到一个“域名无法解析”的错误。
  6. 记录结果:Zabbix Server 将这个失败结果(包含“无法解析域名”的错误信息)写入数据库。
  7. 前端显示:当您在“主机A”的“最新数据”或“Web 场景”页面查看结果时,Zabbix 前端只是从数据库中读出 Zabbix Server 刚才写入的结果,并显示给您看。这个结果显示在了它逻辑上所归属的“主机A”下面。

所以,错误信息“无法解析域名”准确反映了 Zabbix Server 在执行检测时遇到的问题,与“主机A”的 Agent 是否配置了正确的 DNS 完全没有关系

总结

特性 由 Zabbix Server/Proxy 执行的监控(如 Web Scenario, ICMP Ping) 由 Zabbix Agent 执行的监控(如 CPU, 内存, 磁盘)
执行位置 Zabbix Server 或 Proxy 节点 被监控目标主机上的 Zabbix Agent 进程
网络视角 从监控节点到目标的外部视角(端到端) 目标主机的内部视角
依赖关系 依赖 Server/Proxy 节点 的网络、DNS、防火墙等配置 依赖 被监控主机 的系统状态和 Agent 配置
配置关联 配置关联到一个“主机”上,主要是为了逻辑管理和数据展示 配置直接关联到被监控的主机,因为数据就来自它

结论:Web Scenario 的执行和结果 100% 取决于 Zabbix Server 或 Proxy 节点自身的环境(网络、DNS 等),与它被关联到的那个“主机”的 Agent 环境无关。 您遇到的域名解析问题,必须去排查运行 Zabbix Server 或 Proxy 的那台服务器的 DNS 配置。

可用性、稳定性、可靠性等专业中文词汇翻译成对应的英文是怎样的?

当然,这些词汇在中文语境下非常接近,但在英文技术文档中有明确的侧重点。以下是它们最常用和专业的英文翻译及解释:

核心词汇翻译

  1. 可用性

    • 最佳翻译: Availability
    • 解释: 指系统或服务在需要时能够正常运作和访问的程度。通常用百分比表示,例如“99.9% 的可用性”。它关注的是“系统是否在线且可用的总时间比例”。
    • 例句: 我们云服务的可用性达到了99.99%。 -> The availability of our cloud service has reached 99.99%.
  2. 稳定性

    • 最佳翻译: Stability
    • 解释: 指系统在持续运行过程中,其性能表现是否平稳、一致,不会出现意外崩溃、性能剧烈波动或异常行为。它关注的是“系统在运行中是否平稳、可预测”。
    • 例句: 新版本软件经过测试,稳定性显著提高。 -> The new software version has been tested and its stability has significantly improved.
  3. 可靠性

    • 最佳翻译: Reliability
    • 解释: 这是一个更宽泛的概念,指系统在规定的条件下和规定的时间内,无故障地完成规定功能的能力。它综合了“可用性”和“稳定性”,并强调“正确结果”和“无故障运行”。一个可靠的系统通常是可用且稳定的。
    • 例句: 这款硬盘以其高可靠性而闻名。 -> This hard drive is known for its high reliability.

三者的关系与区别

简单来说:

  • 可用性 关心的是 “能不能用” (Uptime)。
  • 稳定性 关心的是 “用起来稳不稳” (Consistency during uptime)。
  • 可靠性 是总目标,关心的是 “值不值得信赖” (Trustworthiness to perform correctly),它包含了前两者。

一个系统可以高度可用(很少宕机)但稳定性不佳(运行时经常卡顿)——这时它的可靠性就不高。最理想的系统是三者兼备。

其他相关词汇

以下是一些与这些概念相关且常被混淆的词汇:

  1. 可维护性

    • 翻译: Maintainability
    • 解释: 指系统或软件被修改(修复缺陷、改进性能、适应新环境)的容易程度。
  2. 可扩展性 / 伸缩性

    • 翻译: Scalability
    • 解释: 指系统通过增加资源来应对负载增长的能力。
  3. 容错性

    • 翻译: Fault Tolerance
    • 解释: 指系统在部分组件发生故障时,仍能继续正常运作的能力。这是实现高可用性和高可靠性的关键技术。
  4. 鲁棒性 / 健壮性

    • 翻译: Robustness
    • 解释: 指系统在接收到无效输入、遇到意外压力或处于异常环境下,能够正常运行而不崩溃的能力。它更侧重于应对“预期之外”的情况。

总结表格

中文术语 推荐英文翻译 核心关注点
可用性 Availability 系统可以访问和使用的时间比例
稳定性 Stability 系统运行时的平稳和一致程度
可靠性 Reliability 系统无差错完成规定功能的整体能力
可维护性 Maintainability 系统被修改和修复的难易程度
可扩展性 Scalability 系统应对负载增长的能力
容错性 Fault Tolerance 系统在部分故障下继续运作的能力
鲁棒性 Robustness 系统处理异常和无效输入的能力

希望这个详细的解释能帮助您准确使用这些专业术语!

发表评论
博客分类