1.
初步确认与信息收集
- 确认影响范围:单一路流/频道、某个区域(US-East/West)还是全站故障;
- 收集时间点、日志、报警(Grafana/Prometheus)的告警ID与截图;
- 检查平台状态页与第三方CDN或云服务的公告(如AWS、Cloudflare 状态页)。
2.
网络连通性与路径诊断
- 本地到接入点检查:ping -c 10 ingest.example.com,查看丢包与RTT;
- 路径追踪:traceroute -n ingest.example.com 或 mtr -rwz -c 100 ingest.example.com,定位哪一跳出现丢包/延迟;
- 若怀疑骨干/ISP问题,使用多个出口(不同VPC/机房/家宽)对比结果,或使用第三方Looking Glass与bgp.he.net核验路由。
3.
编码器与推流端快速验证
- 检查编码器设置:分辨率、码率、GOP(keyframe)与编码器CPU占用;将码率临时降至合理值(如降低20%-50%)测试;
- 本地推流测试:使用ffmpeg推送测试流并观察上游接收情况:
ffmpeg -re -i test.mp4 -c:v libx264 -b:v 5000k -maxrate 5000k -bufsize 10000k -g 50 -c:a aac -f flv rtmp://ingest.example.com/live/TESTKEY;
- 若推流失败,检查本地防火墙/端口(1935/443/80),运行 netstat -tunlp | grep LISTEN 与 ss 命令。
4.
CDN 与边缘节点排查
- 登录CDN控制台检查节点健康、缓存命中率与最近的错误率;
- 对问题流使用curl或wget从不同边缘节点拉取播放端URL,确认是否为边缘不可用:curl -I https://edge-us.examplecdn.com/stream.m3u8;
- 如边缘异常,触发回源或清理缓存(CDN purge),并检查回源带宽/并发限制是否达到阈值。
5.
源站与服务端恢复步骤
- 检查源站服务日志(nginx/rtmp/relay),定位报错;
- 快速恢复:有序重启服务(systemctl restart nginx / docker restart rtmp-server),先重启非关键节点再核心节点;
- 若发现进程泄露或内存溢出,执行滚动重启或自动扩容:启动备用实例并切换流量(DNS或负载均衡),确保会话平滑迁移。
6.
抓包与深度分析
- 在疑点主机关抓包:tcpdump -i eth0 host
and port 1935 -w /tmp/stream.pcap;
- 用Wireshark或tshark分析RTMP/HTTP分片丢失、重传与TLS握手失败;
- 若为丢包或MTU问题,临时调整MTU或开启TCP MSS Clamping;如为TLS证书错误,检查证书链与SNI配置。
7.
Q1: 若观众报告卡顿但推流端显示正常,我首先该查什么?
问:观众端卡顿、缓冲但推流端无错误,我该首先检查哪些点?
答:先确认播放端的平均下载速率与CDN边缘负载:从不同区域拉取播放片段测速;检查边缘-to-origin延时与丢包;确认播放器缓冲设置和ABR策略是否过 Aggressive;如边缘正常,排查回源带宽或视频分片生成延迟。
8.
Q2: 如果CDN边缘宕机,如何快速恢复用户播放?
问:出现CDN边缘节点批量不可用,如何在几分钟内恢复播放?
答:立即触发回源策略并清空影响节点缓存;临时切换到备用CDN或启用多CDN流量分发;降低DNS TTL并通过负载均衡把流量导向健康机房;若有备用静态镜像或多分辨率低码率流,优先下发以降低带宽压力。
9.
Q3: 有没有快速预防与常用恢复清单?
问:面对类似事件,有没有一份可直接执行的快速恢复清单?
答:有。1) 收集日志与报警截图;2) 验证推流端/编码器;3) 路径追踪与抓包;4) 切换至备用Ingress/Region;5) 清理CDN并触发回源;6) 重启关键服务并扩容;7) 通知用户并持续更新状态。保持必要的脚本(自动重启、自动切流)和备用资源可将恢复时间缩短至分钟级。
来源:美国大带宽直播平台常见问题排查与快速恢复流程