速读摘要:WAF 监控分三层——可用性监控(外部探针检查网站能否访问)、性能监控(QPS、带宽、延迟是否正常)、安全监控(拦截数、攻击类型变化)。关键指标包括 HTTP 状态、响应时间、回源成功率、证书有效期等。本文给出完整指标清单和告警阈值建议。

一、为什么监控不能只看 WAF 控制台
WAF 控制台提供的是”WAF 视角”的数据。但你需要的是”用户视角”——从外部看你的网站到底能不能访问、快不快。这两者有时会不一致:WAF 显示正常,但用户实际访问不了(比如 DNS 问题、源站问题)。
所以要建立”外部 + 内部”结合的监控体系。
二、三层监控体系
2.1 第一层:可用性监控(最重要)
从外部多地探测你的网站,独立验证”用户能否访问”。这是最贴近真实体验的监控。
监控项:
├─ HTTP 状态码(期望 200)
├─ 响应时间(期望 < 3 秒)
├─ 首页内容校验(关键字是否存在)
├─ 多地探测(国内多城市 + 海外)
├─ 多运营商(电信/联通/移动)
└─ 探测间隔(1-5 分钟)
推荐工具:
├─ 商业:UptimeRobot、阿里云站点监控、腾讯云拨测
├─ 自建:Prometheus + blackbox_exporter
└─ 简易:crontab + curl + 告警脚本
2.2 第二层:性能监控
监控项:
├─ 总 QPS / 峰值 QPS
├─ 带宽使用(上行/下行)
├─ 并发连接数
├─ 平均响应时间 + P95/P99 分位
├─ 回源成功率
├─ 源站响应时间
└─ 缓存命中率
2.3 第三层:安全监控
监控项:
├─ 拦截请求数(总量 + 趋势)
├─ 攻击类型分布变化
├─ Top 攻击源 IP
├─ 被攻击 URI 排行
├─ 人机验证触发次数
└─ 异常规则命中
三、关键指标与告警阈值
| 指标 | 正常值 | 告警阈值 | 告警级别 |
|---|---|---|---|
| HTTP 状态 | 200 | 非 200 | P0 |
| 响应时间 | < 2s | > 5s 持续 2 分钟 | P0 |
| 回源成功率 | > 99.9% | < 99% | P1 |
| 拦截数激增 | 基线波动 | 突增 300% | P1 |
| 5xx 错误率 | < 0.5% | > 3% | P1 |
| CPU(源站) | < 60% | > 85% 持续 5 分钟 | P1 |
| 带宽 | 基线内 | > 基线 2 倍 | P2 |
| 证书有效期 | > 30 天 | < 15 天 | P1 |
| 并发连接 | 基线内 | > 基线 3 倍 | P2 |
四、自建监控脚本示例
#!/bin/bash
# 简易可用性监控脚本
# 放入 crontab,每 2 分钟执行一次
URL="https://你的域名/"
LOG="/var/log/uptime.log"
WEBHOOK="你的企业微信机器人地址"
CODE=$(curl -sk -o /dev/null -w "%{http_code}" --max-time 10 "$URL")
TIME=$(curl -sk -o /dev/null -w "%{time_total}" --max-time 10 "$URL")
if [ "$CODE" != "200" ]; then
MSG="⚠️ 站点异常!状态码:$CODE"
curl -s -X POST "$WEBHOOK" \
-H "Content-Type: application/json" \
-d "{\"msgtype\":\"text\",\"text\":{\"content\":\"$MSG\"}}"
echo "$(date) FAIL $CODE" >> $LOG
else
# 响应超 5 秒也告警
if (( $(echo "$TIME > 5" | bc -l) )); then
MSG="⚠️ 站点响应过慢:${TIME}s"
curl -s -X POST "$WEBHOOK" \
-H "Content-Type: application/json" \
-d "{\"msgtype\":\"text\",\"text\":{\"content\":\"$MSG\"}}"
fi
echo "$(date) OK $CODE ${TIME}s" >> $LOG
fi
五、监控的实施顺序
- 先上可用性监控:这是最基本的,任何站点都必须有
- 再上告警通道:企业微信/钉钉/短信,保证告警能触达
- 加性能监控:QPS、延迟、回源成功率
- 加安全监控:拦截数趋势、攻击类型变化
- 建看板:把关键指标集中展示,一眼看全貌
- 定期复盘:每周看监控数据,调整阈值
六、监控的两个误区
| 误区 | 后果 | 正确做法 |
|---|---|---|
| 只监控 WAF 控制台 | WAF 说正常但用户访问不了 | 加外部探针监控 |
| 所有指标都告警 | 告警风暴,真正重要的被忽略 | 分级告警,P0 才电话 |
| 只看平均值 | 掩盖了尖峰问题 | 看 P95/P99 分位 |
| 探测点单一 | 本地正常但外地不通发现不了 | 多地点多运营商探测 |
七、小结
WAF 监控要建立”可用性 + 性能 + 安全”三层体系,重点是从外部验证用户视角的真实体验。可用性监控(HTTP 状态 + 响应时间)是最基本的一层,必须优先建设。告警要分级,避免风暴。配合多地点探测和分位数统计,才能真正发现问题而不是被平均值蒙蔽。
