一、一个被反复忽视的事实
云上业务的可观测性这几年已经做得相当成熟。
打开一个标准云上技术栈,你大概会看到这样一套组合:CloudMonitor 监控资源指标,ARMS 做 APM 和分布式链路追踪,SLS 收集日志,再配上 Prometheus + Grafana 做自定义指标,最后用 Alertmanager 或者云监控告警把异常推给企业微信、钉钉。
这套体系在大部分时候很好用。但有一类问题,它从原理上就查不出来——
用户报障"接口超时",但你的全链路 Trace 里压根没有这条请求。
这种现象在用户基数大、地域分布广的业务里几乎一定会出现。每次发生时,研发、运维、客服会陷入一个相互甩锅的怪圈:
- 研发:监控没异常,链路追踪没记录,应用层没问题
- 运维:ECS、SLB、RDS 全绿,资源水位健康
- 客服:用户截图一大堆,确实是连不上
最后往往要折腾一两个小时,发现是某地运营商到机房入口的链路出了问题,跟整套云内监控一点关系都没有。
问题的本质是:所有云内可观测性工具,都是从「云的视角」看世界,而不是从「用户的视角」看世界。
二、云内监控的视角盲区
我们来拆解一下,一次完整的用户请求要经过多少环节:
用户设备 → 本地 Wi-Fi/4G → 用户侧 ISP → 骨干网 → 跨网穿透
→ IDC 入口 → SLB/EIP → Nginx → 应用网关 → 微服务 → DB
在云上常规可观测性体系里,SLB 之前的链路全是黑盒。
| 环节 | 云内监控能看到吗? |
|---|---|
| 用户设备性能 | ❌ |
| 本地 Wi-Fi/4G 质量 | ❌ |
| 用户侧 ISP 链路 | ❌ |
| 骨干网拥塞 | ❌ |
| 跨网穿透(电信→联通) | ❌ |
| DNS 解析正确性 | ❌(除非用 PrivateZone) |
| CDN 边缘节点调度 | 部分 ✅ |
| SLB 入口 | ✅ |
| ECS 应用 | ✅ |
| RDS/Redis | ✅ |
也就是说,链路有一大半发生在你监控的视野之外。
更严重的是,云内 ARMS 的探针、CloudMonitor 的监测点,本身都部署在云内,从云内 ping 自己的服务当然永远是健康的。这不是监控做得不好,而是物理上做不到——你不可能在每个用户的家里装一个探针。
但你可以用一种更轻量的方式补上这块拼图:用户视角的主动拨测。
三、补齐拼图:用户视角的三个监测维度
所谓"用户视角",本质上就是模拟真实用户从全国不同地理位置、不同运营商发起请求,看你的服务真实可达性怎么样。
具体落地分三个维度:
维度 1:多地多运营商的主动拨测
最基础的一层。从北京电信、上海移动、广州联通、成都电信……至少十几个不同的省份 + 运营商组合,对你的服务发起持续的连通性测试。
关注三个核心指标:
- 可达性:能不能 ping 通 / TCP 三次握手是否成功
- 延迟分布:P50、P95、P99 的延迟值
- 丢包率:1% 以内是正常抖动,5% 以上一定要告警
如果自建拨测节点,成本会非常高(要在多地买 VPS、跨运营商部署、维护采集端)。更经济的方案是用现成的多节点诊断工具,比如 BiuPing 在线 Ping 提供全国多地区多运营商的并发拨测,几秒钟就能拿到一张分布图,紧急排障时拿来即用。
如果你的服务关闭了 ICMP(云上为了安全很常见),就用 TCPing 直接对 443/80 端口发起 TCP 握手测试,逻辑等价但绕过了 ICMP 限制。
维度 2:DNS 解析的一致性与劣化监测
DNS 是云上最被低估的故障源。常见的几类问题:
- CDN 调度劣化:CDN 厂商的 DNS 把某地用户调度到了非最优节点
- DNS 缓存污染:某地公共 DNS 缓存了过期的 IP
- TTL 不生效:业务切换 IP,部分用户长时间还在打老 IP
- 解析劫持:少数地区运营商 DNS 返回错误结果
云内的 PrivateZone 解决的是 VPC 内服务发现,对公网用户访问的解析问题完全无能为力。
排查这类问题,需要的是从全国不同 LocalDNS 出口同时发起一次 dig,对比解析结果。可以用 BiuPing DNS 查询 一次拉出几十个节点的 A/AAAA/CNAME 记录,看返回的 IP 是否一致、是不是预期的 CDN 节点。
实操经验:
- CDN 调度健康时,不同地区返回的 IP 应该是地理就近的边缘节点
- 如果某地解析到一个明显不属于该区域的 IP(比如华东用户解析到华南节点),就是调度异常
- 如果某地解析失败但其他地区正常,可能是该地 DNS 出问题
- 切换 IP 后建议在 TTL 时间的 2~3 倍之内做一次全国 DNS 一致性检查
维度 3:HTTP 全链路性能瀑布
ping 通、DNS 正常、TCP 握手也通,用户还是觉得慢——这时候要拆 HTTP 请求的每段耗时。
curl 可以打印出来:
curl -o /dev/null -s -w "
DNS解析: %{time_namelookup}s
TCP连接: %{time_connect}s
TLS握手: %{time_appconnect}s
首字节(TTFB): %{time_starttransfer}s
总耗时: %{time_total}s
" https://your-domain.com/api/endpoint
四段时间分别对应不同的根因方向:
| 时间段 | 慢了说明什么 | 该找谁 |
|---|---|---|
| DNS 解析 | DNS 服务商或递归过深 | DNS 厂商 |
| TCP 连接 | 网络层 RTT 大或 SYN 队列满 | 网络/运维 |
| TLS 握手 | 证书链长、缺 OCSP Stapling、SLB 抖动 | 运维 |
| TTFB | 应用处理慢、DB 慢、缓存击穿 | 后端开发 |
要做多地视角的话,本地 curl 只能看到一个点,可以用 BiuPing 网站测速 同时拿到全国节点的瀑布图,不同地区分段时间一对比,瓶颈在哪一段、影响哪个区域非常清楚。
四、与云监控形成互补的最小可用方案
不是所有团队都要上一整套外部拨测平台。给一个 80% 场景能用的最小化建议:
拨测策略
- 频率:业务接口每 1~5 分钟一次;公司主页每 5~15 分钟一次
- 覆盖:至少 8 个省份 × 3 大运营商 = 24 个组合,重点覆盖业务用户分布密集的区域
- 协议:HTTPS HEAD 或轻量级心跳接口,避免对真实业务造成压力
- 超时阈值:连接 3s、首字节 5s、总耗时 10s(按业务调整)
告警阈值
不要用绝对值,用相对值:
- 单点连续 3 次超时 → 信息级(可能是该节点链路抖动)
- 同时 3 个以上节点超时 → 警告级(区域性问题)
- 全国 50% 以上节点同时异常 → 严重级(机房或骨干网问题)
与 ARMS / CloudMonitor 联动
理想形态是把外部拨测的数据也写一份到 SLS 或 Prometheus,跟 ARMS 的内部链路数据做关联:
外部拨测告警 → 触发企业微信通知 → 自动调取同时间段的 ARMS Trace
→ 调取 SLB/ECS 在该时间窗口的指标
→ 形成"内外双视角"的故障快照
这样下次再出问题,第一时间就能判断:"是用户侧链路问题还是云内服务问题",少打很多电话扯皮。
五、三个高价值落地场景
场景 A:CDN 厂商切换 / 灰度
切 CDN 厂商或者灰度新节点的时候,业务质量是不是真的更好?光看厂商自己的报表是不够的,要从用户视角验证。
做法:切换前后各一轮全国 DNS 解析检查 + HTTP 测速对比,明确量化"换厂商后某区域 TTFB 降低了 40ms"这种数据,决策依据才硬。
场景 B:大版本发布 / 流量切换
蓝绿发布、流量切换、跨可用区切换之后,立刻发起一轮全国拨测,确认所有地区都能正常打到新版本。
特别是 DNS 切换场景,TTL 没有完全生效之前,全国 DNS 一致性是必须监测的。
场景 C:客户投诉响应
客服群有人喊"XX 地区打不开"的时候,不要再去问"你能 ping 一下吗",直接打开多节点拨测看一眼实际情况。
如果只有该地区异常,基本可以定位到运营商链路问题;如果全国都异常,定位到机房入口;如果只有某条接口异常,回到应用层排查。5 分钟内给出初步判断,剩下的就是协调资源闭环。
六、写在最后
云上可观测性这件事,过去几年的进化方向是越来越深入云内:从资源指标,到应用 Trace,到日志关联,到拓扑可视化。但深度的反面,就是视野的局限性——你看得越精细,就越容易遗忘外面那一大块用户真实经过的链路。
「云内监控 + 用户视角拨测」这两块拼图凑在一起,才是一个完整的可观测性闭环。前者花在云厂商提供的成熟产品上即可,后者用一个免登录的多节点诊断工具就能搞定起步阶段,之后再考虑要不要上自建或者商业拨测平台。
关键是——不要等到下一次客服群炸了,才意识到这块拼图缺了。
文中提到的多节点诊断工具用的是 BiuPing,覆盖全国多地区多运营商节点,IPv4/IPv6 双栈都支持,紧急排障和日常质量巡检都很顺手。