网站哨兵运行逻辑文档

SYSTEM GUIDE

网站监控如何运行

本文说明网站哨兵从任务调度、页面检查到故障确认、恢复与公开统计的完整逻辑,帮助使用者正确理解页面上的每一种状态。

本文对应当前线上版本;实际判定以系统最新运行逻辑为准。
01

运行概览

所有启用中的项目共用同一套检查频率和判定规则。系统每 15 分钟寻找已到期的项目,再由异步队列执行实际检查;每个项目的常规定时检查间隔为 4 小时。

4 小时项目检查间隔
15 分钟到期任务扫描频率
90 秒异常快速复检等待
15 秒单次页面请求超时
90 次每站保留检查记录
  1. 1
    寻找任务定时扫描、立即检查或异常复检
  2. 2
    抓取页面跟随跳转并读取有限大小的 HTML
  3. 3
    分析结果检查响应、内容、基线变化与 CSS
  4. 4
    协调事件建立疑似事件、确认故障或判定恢复
  5. 5
    更新状态写入历史并刷新公开状态数据
02

页面状态定义

“正常、网站故障、CSS 异常、确认中、疑似拦截、等待”描述的是当前状态;“最近 24 小时故障”描述的是一段时间内确认过的独立事件,两者不能直接互换。

页面显示含义是否计入异常网站
正常项目已检查,当前没有已确认故障、疑似故障或监控拦截。否
网站故障页面访问、HTTP 响应、页面内容或健康基线故障已连续两次出现。是
CSS 异常样式表消失、加载失败或返回了错误内容;与网站本身的访问故障分开展示。是
确认中第一次发现真实故障迹象,系统已安排约 90 秒后的快速复检。否,复检确认后才计入
疑似拦截监控端只取得限流、防火墙或整页人机验证响应,无法检查真实业务页面。否,单独统计
等待检查项目已经启用,但尚未完成首次检查。归入“等待 / 暂停”
已暂停项目被人为暂停,不再参加定时检查和整体可用率计算。归入“等待 / 暂停”
“疑似拦截”不等于网站故障

它只说明监控请求未能越过防火墙、限流或整页验证。系统会单独展示这一状态,不将它计入当前异常、故障事件或可用率分母。

追踪标识状态不等同于页面状态

GA4 / GTM 监控保存为站点级追踪状态,不会把“新增待确认”直接算作网站故障。normal 表示当前标识集合与基准一致;change_pending 表示只发现新增标识,后台可点击“忽略变更”建立新基准;anomaly_missing 表示基准中的标识缺失;anomaly_replaced 表示标识被替换。后两者会生成 tracking_identifier_anomaly 高严重度异常标记,并沿用现有的故障确认与恢复流程;首次尚无基准时的 scan_error,或已有基准本轮的解析未完成,都只表示扫描不完整,不直接认定追踪代码缺失。

03

故障确认与恢复

系统使用故障指纹区分不同事件。指纹会综合故障类型、相关资源地址和 HTTP 状态等信息;只有同一个指纹再次出现,才会确认原来的疑似故障。

确认故障
第一次发现建立疑似事件
确认中约 90 秒后复检
第二次仍出现确认为异常
排除偶发
第一次发现建立疑似事件
确认中约 90 秒后复检
未再次出现直接恢复正常
确认恢复
已确认异常故障事件仍开放
第一次健康继续保持异常并复检
第二次健康事件标记为已恢复

防火墙、限流或整页验证会立即显示为“疑似拦截”并安排复检,但不会被当成真实网站故障;一旦取得完整健康页面,拦截状态会立即解除。

04

当前检查范围

每次任务会检查页面本身,并在条件允许时抽查少量样式资源。下列问题会形成真实故障发现:

01网站无法访问

网络错误、连接失败或请求超过 15 秒。

02HTTP 响应错误

最终响应状态低于 200 或达到 400 以上。

03页面类型或内容异常

首页不是 HTML、内容为空或显示常见程序错误页。

04软 404

虽然返回 HTTP 200,但内容与该网站学习到的 404 页面高度相似。

05内容大幅坍缩

页面 HTML 和文字量相对近期健康基线同时显著减少。

06样式资源故障

原有样式表全部消失,或抽查到 CSS 无法加载、内容类型错误;资源请求会携带原页面来源以兼容常见防盗链规则。

07GA4 / GTM 标识变化

从 HTML 收集 GA4 与 GTM 标识,并对每页最多 3 个 GTM 容器解析最多 512 KB 的 gtm.js;不执行脚本。新增标识等待后台确认,既有标识缺失或替换会形成异常标记。

GA4 / GTM 追踪标识监控的完整逻辑

这项检查只针对可取得的正常 HTML 页面运行;系统不要求用户预先填写 Measurement ID,而是从页面和 GTM 容器中建立、保存并比较实际发现的标识集合。

发现什么

从原始 HTML 静态提取 G-...(GA4 Measurement ID)和 GTM-...(GTM 容器 ID);对 HTML 中发现的 GTM 容器请求公开的 https://www.googletagmanager.com/gtm.js?id=...,再从返回的 JavaScript 文本中提取可能的 GA4 ID。相同 ID 去重后按 ga4:G-...、gtm:GTM-... 的类型化形式保存。

资源上限

每个页面最多请求 3 个 GTM 容器,容器请求并行执行,单个请求超时为 10 秒,单个 gtm.js 最多读取 512 KB;因此最多增加 3 个有界的公开资源请求,不启动浏览器,也不执行页面或 GTM JavaScript。

完整扫描

只有页面本身是正常的 2xx HTML,且所有发现的容器均成功返回非空、未超限的脚本,容器数量和标识总量也在上限内,才会把本轮结果作为完整扫描用于比较。首次完整扫描自动建立基准。

集合比较

当前集合与基准相同为正常;只有新增标识时进入“新增待确认”;基准标识有缺失时进入追踪异常,同数量的新旧标识替换会单独标记为“替换异常”。系统记录完整 ID 和新增 / 移除列表,便于区分“增加”与“被覆盖”。

后台操作

“忽略变更”只对完整扫描且没有移除旧标识的“新增待确认”生效:它会把当前观察到的集合写成新的基准并恢复正常。缺失或替换异常不能通过该按钮静默确认。

数据范围

这项逻辑保存用于差异比较的 GA4 / GTM 标识、扫描结果和异常证据;标识本身来自公开页面配置,不是 GA4 数据或 API 密钥。系统不主动采集 GA4 事件、Cookie、用户标识,也不执行浏览器运行时埋点。

整页验证与普通 CAPTCHA 组件会区别处理

系统先判断是否已经取得 HTTP 2xx、正常标题和足量业务正文;完整正常内容优先判定为正常。页面仅仅包含 reCAPTCHA、hCaptcha、Turnstile 或“captcha”字样,不足以触发拦截。只有 HTTP 403/429、异常的极短 202 响应、挑战标题或文案、Cloudflare 挑战令牌和页面内容极少等证据形成可信组合时,才会显示“疑似拦截”。

正常内容优先

拿到完整业务页面时,即使联系表单内嵌验证码,也按正常页面继续执行错误页、软 404、内容基线和 CSS 检查。

组合证据判定

不会依赖单个关键词;状态码、挑战特征、标题、正文与页面体积会共同决定是否属于整页拦截。

如实单列状态

只能取得挑战响应时显示“疑似拦截”,表示监控能力受限,不表示网站已经宕机。

05

历史色块与统计口径

历史色块

每个色块是一条实际检查记录,最新结果位于最右侧。绿色代表正常,红色代表网站故障,紫色代表 CSS 异常,红紫双色表示两类问题同时存在,橙色代表疑似拦截,灰色代表尚无记录。

追踪代码统计

“监控概况”中的“追踪代码变更”统计纯新增标识的启用站点;“追踪代码异常”统计基准标识缺失的启用站点,同数量的标识替换也属于异常。解析未完成时沿用上次完整扫描的追踪状态;暂停站点不计入这两项。

站点名称提示

追踪代码变更时名称显示为橙色,追踪代码异常时显示为红色;悬停名称可查看说明。历史色块只呈现页面、CSS 与拦截检查;仅有追踪异常的检查不会把色块涂成网站故障色。追踪异常仍按现有普通故障事件和可用率口径统计。

单站可用率

最近最多 90 次检查中,正常检查数除以正常与各类故障检查总数。无法确认的检查不进入分母。

整体可用率

所有启用项目最近最多 90 次有效检查合并计算;暂停项目和无法确认的检查不参与。

最近 24 小时故障

按确认时间统计独立故障事件,包括仍在异常和已经恢复的事件。同一个故障反复检查失败仍只算一件,不等于异常网站数或失败检查数。

示例

当前异常网站为 0,但最近 24 小时故障为 2,表示这两件故障已在统计窗口内确认,随后均已恢复。

06

调度、历史与数据更新

  • 新建项目加入后立即排入首次检查,不必等待下一轮 4 小时周期。
  • 修改名称保留原有检查历史、故障事件和健康基线。
  • 修改网址清空旧目标的历史、故障状态和健康基线,并立即检查新网址。
  • 定时任务Cron 每 15 分钟扫描到期项目;实际网络检查由 Cloudflare Queue 异步处理。
  • 额外复检定时或手动检查需要确认时,最多安排一次约 90 秒后的额外检查;复检本身不会继续派生复检。
  • 追踪基准首次完整 HTML + GTM.js 扫描自动建立 GA4/GTM 标识基准;系统记录类型化 ID、数量以及新增 / 移除差异。仅新增标识进入“新增待确认”,后台点击“忽略变更”后才把当前集合确认为新基准;缺失或替换既有标识会生成追踪异常。修改监控网址会删除旧追踪基准,由新网址重新建立。
  • 历史保留每个网站最多保留最近 90 条检查结果;较旧结果和相关证据会被清理。
  • 公开页面浏览器每 15 分钟自动重新读取状态;检查或项目变化后会切换到新的缓存版本。
07

能力边界

网站哨兵是一套轻量的静态可用性与页面完整性监控,不等同于真实用户浏览器或完整的端到端测试。

  • 不会执行页面 JavaScript,因此无法验证登录、结账、表单提交等交互流程。
  • 会跟随 HTTP 跳转,但主要判断最终页面的静态响应与内容。
  • 单次只读取有限大小的 HTML,并最多轮换抽查少量 CSS 资源。
  • GTM.js 仅做有限大小的静态文本解析;无法获取、超出读取上限或容器过多时标记为解析未完成,保留上一份基准,不直接判定 GA4 缺失。
  • 这不是 GTM 管理 API 或浏览器运行检查:运行时拼接、接口下发、服务端 GTM 或未出现在 HTML / 返回脚本文本中的 ID 可能无法发现;发现不到 ID 也不等于 GA4 实际一定没有生效。
  • 页面被拦截、返回非正常 HTML 或已有其他页面故障时,不把不完整的追踪结果拿来覆盖基准;本功能只对能稳定取得的页面源码尽力判断。
  • 系统记录完整标识而不只是数量,因此同数量的 ID 替换也能被识别;标识只用于追踪配置差异,不代表 GA4 后台的实际收数状态。
  • 健康基线来自近期成功检查;新项目需要积累样本后,内容坍缩判断才会生效。
  • 监控端可访问不代表所有地区、网络和真实用户均可访问。
  • “正常”表示当前规则没有发现异常证据,不是对网站所有业务功能的保证。