1. 明确目标:可观测性=可度量+可追踪+可定位故障;告警体系=及时+准确+可操作。定义SLO(例:动态请求成功率99.9%、P95 响应时间 < 500ms)和错误预算。
2. 列表:列出所有海外 POP、负载均衡、源站、API 路径与动态资源。确定每个资源需要的度量:可用性(2xx/5xx)、响应时间、缓存命中率、回源率、带宽、TCP/SSL握手时延、错误码分布。
3. 在应用与边缘注入指标与追踪:使用 OpenTelemetry SDK 在应用层打点(span 包含 trace_id、cdn_pop、edge_ip、origin_latency),上报到采集层(OTLP/Jaeger/Zipkin)。边缘开启 header 注入(X-CDN-POP / X-Request-ID)。
4. 在 CDN 控制台启用访问日志并定期下发到对象存储(例如 AWS S3、阿里 OSS)。使用 Filebeat/Fluentd/Logstash 将日志导入 ELK/ClickHouse:配置解析规则匹配时间、status、url、upstream_time,并建立索引模板与字段映射。
5. 部署合成脚本:在多个第三方节点(美/欧/亚)用 curl 或浏览器式合成(Selenium)定时请求关键动态接口,记录 DNS、TCP、TLS、TTFB、Total。部署 RUM:前端注入轻量 JS 上报请求耗时与错误,按地域采样上报到后端。
6. 指标汇总到 Prometheus/Grafana:关键表达式示例:请求错误率 = sum(rate(http_requests_total{job="cdn",status=~"5.."}[5m])) / sum(rate(http_requests_total{job="cdn"}[5m])); 在 Grafana 建 P95 响应时间、错误率、回源率面板。告警示例(Prometheus alert):
7. alert rule 示例:ALERT CDN_High_ErrorRate IF (sum(rate(http_requests_total{status=~"5.."}[5m])) by (pop) / sum(rate(http_requests_total[5m])) by (pop)) > 0.01 FOR 2m LABELS {severity="critical"}
8. 将告警通过 Alertmanager 路由到 PagerDuty/企业微信/Slack/邮件,按 POP 与服务负责人分组,配置抑制与静默窗口。为每类告警编写 runbook(包含排查命令、回退步骤、回溯日志位置)。定期进行演练:手动注入故障(限流、回源失败)验证告警时效与处理流程。
9. 对常见故障实现自动化修复:如回源超时触发流量切换到备用源、自动清理热点缓存、短期扩大熔断阈值。结合 CI/CD 在自动修复前加审批链路与可回滚操作。
10. 采用异常检测:baseline + 指数平滑或 Holt-Winters,配置动态阈值减少抖动告警。对跨 POP 异常做聚合告警并关联追踪 trace_id 以定位源头。
11. 定期回顾告警噪声与误报率,调整阈值与告警级别。用 SLO/错误预算驱动优先级,按月发布可观测性健康报告。
12. 答:先通过合成检测与 RUM 判断地域影响范围,查看 CDN 日志中的 upstream_time 与回源 5xx,若多数 POP 回源耗时或 5xx 升高,优先定位源站;若仅单点 POP 增高,检查该 POP 与链路。
13. 答:使用 FOR 时长合并、动态阈值、抑制规则(Alertmanager)和分级告警;把低优先级问题改为事件追踪或日报而非实时告警。
14. 答:最小可行=合成监测 + 基础日志上传 + 应用层 trace-id 注入 + 一个可视化与告警引擎(Grafana + Prometheus/Alertmanager)。逐步扩展到 RUM、分布式追踪与自动化响应。
