CDN日志分析:从访问日志中看懂流量、排查异常

去年一个客户,用户投诉说“图片加载好慢”。运维查了CDN控制台,监控显示一切正常,没有告警、没有异常。但用户就是觉得慢。
最后下载了CDN访问日志,发现特定节点回源延迟偏高,而其他节点正常。进一步排查,定位到源站在某个区域的出口网络波动。这个信息在CDN控制台的全局监控中完全看不出来,只有日志里才有。
这是CDN运维中最常见的困境:控制台告诉你“一切正常”,用户告诉你“很慢”。监控看平均值,日志才能看细节。
01 日志里有什么?
CDN访问日志记录了每一次用户请求的完整信息。一条日志至少包含十几个关键字段:
时间戳:请求发生的精确时间
客户端IP:谁发起的请求
请求URL:访问了什么资源
状态码:HTTP返回码(200、404、502等)
响应大小:返回了多少字节
响应时间:从收到请求到返回完成的耗时
缓存命中状态:HIT还是MISS
Referer:从哪个页面跳转过来的
User-Agent:用的什么浏览器或设备
云服务商还提供了更完整的实时日志,包含26个以上字段,包括请求的唯一标识UUID,可以用来串联一次请求的完整路径。
02 怎么查“用户说慢”?
用户说慢,CDN控制台显示正常。这时候需要按用户维度去查日志。
查单个请求的延迟:用客户端IP和时间范围过滤日志,看该用户的每一次请求耗时。如果只有特定资源慢,可能是缓存没命中。如果所有请求都慢,可能是用户到CDN节点的链路问题。
查特定节点的延迟分布:按CDN节点IP(server_ip字段)聚合统计平均响应时间,找出响应时间偏高的异常节点。
那家客户就是通过按节点聚合,发现某几个节点回源延迟异常高。定位到源站出口网络问题后,调整了源站到CDN的链路配置,用户投诉消失。
03 怎么查“流量突然涨了”?
流量涨了,不一定坏事。可能是活动爆发,也可能是被攻击。
查热门URL:按uri分组统计请求数和流量,看是哪个资源流量暴涨。如果暴涨的是首页或活动页,大概率是业务爆发。如果暴涨的是某个小文件,且来源IP集中、User-Agent异常,大概率是恶意刷量。
查来源分布:按client_ip统计Top IP,看是否集中。按refer_domain统计来源域名,看流量从哪来。如果Referer是拼多多、淘宝等外部链接,可能是图片被外链盗刷。
查状态码:大量429(限流)、403(拒绝)、514(频控限流)可能说明配置了访问限制。大量500/502/504说明源站或CDN内部有问题。
04 怎么查“缓存没生效”?
CDN的最大价值是缓存。缓存不生效,流量全回源,成本翻倍。
查命中率:按hit_info字段统计HIT与MISS的比例。命中率低于80%,先排查热点资源是不是都缓存了。可以用按URL分组统计命中率,找出命中率低的资源。
查缓存原因:对于频繁MISS的资源,检查源站返回的Cache-Control头是否允许缓存。CDN日志里不直接展示响应头,但可以结合状态码和资源类型判断。如果状态码200但文件很小,可能是源站设置了no-cache。
查URL参数问题:如果URL带时间戳或随机参数(如?t=123456),CDN会把每个参数当成不同文件缓存。看uri_param字段是否大量重复资源带不同参数。
05 怎么用工具分析?
云厂商提供的方案:腾讯云CLS、阿里云SLS、华为云LTS都支持将CDN日志实时投递到日志服务,并提供开箱即用的分析仪表盘(基础数据、错误分析、热门资源、用户分析)。日志延迟不超过3分钟,远快于离线日志的24小时。
开源方案:下载离线日志后用awk、sed、grep做快速统计。例如统计状态码分布:awk '{print $状态码位置}' access.log | sort | uniq -c | sort -nr。也可以导入ELK或Splunk做可视化。
那家客户后来配置了实时日志投递,配合预制的错误分析仪表盘,下次再遇到用户投诉,几分钟就能定位到问题节点。
写在最后
CDN控制台看平均值,日志才能看细节。用户说慢、流量异常、缓存没生效——这些问题的答案,都在访问日志里。
云厂商的实时日志功能可以让日志延迟控制在3分钟以内,配上预制的分析仪表盘,不用自己搭系统就能开箱即用。传统离线日志分析要下载、解压、上传数据仓库,一套流程走完要24小时以上,现在已经不是唯一选项了。
下次用户说“慢”,别只看监控大屏。去日志里查一查,答案往往就在那里。