1. 日志覆盖边缘与源站;2. 关键指标实时告警;3. 请求链路可追踪与自动化演练
当出现CDN“没反应”或“响应超时”的情况,最致命的问题是没有可用的证据链。本文以实战视角,告诉你如何布置日志与监控,做到一眼看穿根因——是DNS、边缘故障、缓存击穿、源站连通性、还是TLS/WAF限流导致的无响应。
第一步:确保边缘与源站都有结构化的日志。日志字段至少包含:时间戳、请求ID、客户端IP、Host、URI、方法、HTTP状态码、边缘响应时间、源站响应时间、缓存命中标记(HIT/MISS/EXPIRED)、字节数、TLS信息与User-Agent。优先输出JSON格式,便于消费与解析。
第二步:日志采集与归档策略。边缘日志按小时切割并推送到集中系统(如Stack/ELK/Opensearch、ClickHouse或对象存储),源站日志也同步入库。对故障时间段做100%采集;平时对请求做1%采样并对所有错误(>=500或超时)做全量采集,能在异常爆发时保留关键证据。
第三步:把关键信息变成可视化指标。将日志转换为指标:5xx率、4xx率、P50/P95/P99延迟、缓存命中率、源站耗时、边缘队列长度、TLS握手失败率、带宽利用率。推荐把这些指标暴露给Prometheus,用Grafana做仪表盘与SLO视图。
第四步:告警策略要既严格又聪明。设置阈值告警(如5分钟内< b>5xx率>2%,P95延迟>1s),并启用异常检测(基于历史模型或机器学习)。对< b>缓存命中率、源站时延、DNS解析失败和TLS错误分别设独立告警,并把告警与Runbook关联,方便一键查证。
第五步:请求链路追踪与关联。必须在边缘注入或透传唯一的请求ID(如x-request-id),并在源站、日志与追踪系统中保留该ID,支持从告警跳转到完整请求链日志。部署分布式追踪(支持traceparent)能快速定位是边缘阻塞还是源站慢。
第六步:合并主动监测(Synthetic)与被动监测(RUM)。主动探测模拟用户请求到各个POP点,检测DNS、TCP握手、TLS、HTTP响应;同时部署RUM收集真实用户端的失败与时延数据,两个数据源结合能更快判定是否为地域性或运营商问题。
第七步:快速排障清单(Runbook)——当接到“CDN无响应”告警,按序执行:1) 检查告警面板确定受影响边缘/地域;2) 用curl并带Host头直接请求边缘IP,观察是否有响应与响应头;3) 检查DNS解析与解析链(是否指向正确IP);4) 查看边缘与源站日志中对应< b>请求ID;5) 检查源站是否被防火墙/WAF/限流拦截;6) 检查证书是否过期或握手失败;7) 若为缓存问题,执行灰度回源或临时绕过缓存;8) 如果是配置下发问题,回滚或回避最新策略。
第八步:自动化与演练。把常用排查命令与日志查询写成脚本或Grafana按键(Playbook),并定期做故障演练(Chaos/ChaosMonkey),验证监控、告警与回退流程是否可靠。
第九步:治理建议与优化闭环。对每次故障做Postmortem,写清根因、指标变化曲线、缺失的日志点与改进动作。加强对缓存策略、长尾请求的分析,优化TTL与压缩规则,降低源站压力。

作者声明:笔者多年从事大规模CDN与监控系统建设,曾主导多次生产级故障响应与SRE演练。本指南基于实战经验,提供可落地的日志、监控与告警策略,帮助团队在CDN“没反应”时把故障缩短为分钟级恢复时间。