1.
确认症状并收集初始信息
- 操作步骤:记录出现卡顿的时间段、影响区域、玩家数量与平台(PC/移动)。
- 工具:从玩家处收集客户端日志/抓包(Wireshark),获取游戏内事件时间戳与会话ID。
2.
采集并统一时间戳的日志
- 操作步骤:确保所有系统(CDN边缘、源站、LB、游戏服务器)时间同步(NTP)。
- 具体命令:在边缘/源站导出日志:scp or API 下载;检查时间:ntpstat / timedatectl。
3.
边缘日志优先查看项
- 操作步骤:查边缘日志的响应码(2xx/3xx/4xx/5xx)、cache-status 标识(HIT/MISS/EXPIRED)与响应延迟字段。
- 示例解析:grep "cache-status" edge.log | awk '{print $1,$5,$9}'。
4.
源站日志与链路追踪
- 操作步骤:在源站查看后端处理时间、队列延迟与错误率。若源站慢,查看应用日志与数据库慢查询。
- 命令示例:tail -F /var/log/app.log | grep "request_id=xxxx";使用openssl s_client -connect origin:443 检查 TLS。
5.
用抓包确定网络层问题
- 操作步骤:在疑点节点运行 tcpdump 保存 pcap(注意数据量)。
- 命令示例:tcpdump -i eth0 host <客户端IP> and port <游戏端口> -w capture.pcap;用Wireshark分析重传、延迟和丢包。
6.
利用监控指标快速定位方向
- 指标项:边缘延迟、源站响应时间、5xx 率、cache hit ratio、带宽突增。
- PromQL 示例:rate(http_requests_total{job="cdn",code=~"5.."}[5m]) / sum(rate(http_requests_total{job="cdn"}[5m]))
7.
日志关联与时间线构建
- 操作步骤:用 request_id 或 X-Request-ID 在各端日志中串联请求并绘制时间线,确认延迟发生点。
- 工具:使用 ELK/Graylog 将多源日志按 request_id 聚合,或用 jq/awk 简单合并。
8.
常用故障排查命令集合
- curl 调试:curl -v -H "Host:game.example.com" --resolve game.example.com:443:
https://game.example.com/path
- traceroute/mtr:mtr -rwzbc100 查看路由丢包与跳数延迟。
9.
配置检查要点(CDN 与源站)
- 操作步骤:核对缓存规则(路径/Query/Headers)、TTL、压缩与分片设置,确认是否误配置导致大量 MISS 或回源。
- 建议:临时提高日志级别记录每次回源原因。
10.
建立告警与自动化检测
- 操作步骤:在 Prometheus/Grafana 或云监控中设置阈值告警:边缘 95pct 延迟、cache_hit_ratio 降低 >10%、5xx 增长速率。
- 示例阈值:alert if increase(http_request_errors_total[5m]) > 50
11.
从根因得出整改与验证流程
- 操作步骤:确定根因后(配置、代码、链路),在非高峰先行改动并回放流量验证;改动后持续观察日志与监控30-60分钟确认稳定性。
- 文档化:记录故障原因、修复步骤与后续预防措施。
12.
问:CDN 卡顿先看哪一类日志可以快速定位是 CDN 还是游戏服务器问题?
答:优先看边缘访问日志的 cache-status、边缘响应延迟与回源响应码;若大量 MISS 且回源响应延迟高或出现 5xx,倾向源站问题;若边缘有高延迟/错误但回源正常,倾向 CDN 边缘或网络。
13.
问:如何用日志判断是否为缓存穿透(cache miss 导致回源压垮源站)?
答:在相同时间窗口内统计边缘的 cache-status=MISS 数量与来源 URI,若特定 URI 或 Query 参数突增且回源请求激增且源站响应时间同步上升,说明缓存穿透;结合请求 ID 可定位客户端请求样本。
14.
问:如何通过监控提前告警避免大规模卡顿?
答:设置多维告警:短期突增告警(5m 内 5xx/回源请求突增)、长期趋势告警(cache_hit_ratio 连续下降)、以及 SLO/用户体验指标(90/95pct 延迟);并在告警触发时自动抓取相关边缘与源站日志作为上下文。
来源:运维指南cdn卡游戏设置如何通过日志和监控定位问题根源