CDN日志是内容分发网络在边缘节点处理请求后留下的访问记录。不同服务商对字段命名和顺序存在差异,但核心信息通常可以归为时间、客户端、请求内容、响应结果和缓存行为五类。理解每个字段的准确含义,能帮助在排查访问异常、缓存穿透、区域调度错误时快速缩小范围。本文按一条典型边缘日志的字段顺序展开,给出字段含义、示例值和排查场景。

一、基础标识字段:时间戳与客户端、边缘节点IP
CDN日志的第一组字段通常用于回答“什么时间、谁访问了哪个节点”。时间戳常见格式有三种:ISO 8601格式如2025-06-12T08:30:15+08:00、Unix秒级或毫秒级时间戳、以及日志系统内部的本地时间。对比不同城市的日志时,要先把时间统一为同一时区,否则会把正常请求误判为延迟。
客户端IP字段记录的是发起请求的TCP连接对端地址。如果用户经过家庭宽带出口或公司NAT,该地址通常就是出口公网IP,而不是内网地址;如果用户使用了代理或CDN前置的WAF,这里也可能是代理地址。边缘节点IP字段代表实际接收请求并生成响应的节点服务器地址。通过对比客户端IP的归属地和边缘节点IP的归属地,可以判断调度是否合理。例如客户端在华南但边缘节点落在华北,且响应耗时偏高,很可能就是区域调度策略未生效。
下面这段日志展示时间、客户端IP和边缘节点IP的位置:
time=2025-06-12T08:30:15+08:00 client_ip=203.0.113.10 edge_ip=198.51.100.23
有些服务商还会加入server_ip或pop字段,用于标识节点机房或线路。排查问题时,这两个IP不要混淆:客户端IP用来定位用户侧网络,边缘节点IP用来定位CDN侧节点。
| 字段名 | 含义 | 示例值 |
|---|---|---|
| timestamp | 请求到达边缘节点的时间 | 2025-06-12T08:30:15+08:00 |
| client_ip | 客户端公网出口IP | 203.0.113.10 |
| edge_ip | 实际响应请求的CDN节点IP | 198.51.100.23 |
二、请求内容与响应结果字段拆解
请求内容字段包括请求方法、URL、协议版本和Host。请求方法最常见的是GET和POST,还有HEAD、PUT、DELETE等。URL字段记录的是请求路径和查询字符串,部分CDN默认会截断过长的查询串,这会影响按参数筛选日志。协议版本通常写作HTTP/1.1、HTTP/2或HTTP/3,能反映客户端与边缘节点之间的协议能力。
响应结果字段包括状态码、响应大小和响应耗时。状态码直接说明请求结果:200表示成功命中并返回内容;206表示部分内容,多出现在视频拖拽或断点续传;301和302通常由源站或CDN配置触发跳转;403和404需要重点看是否由防盗链或缓存未命中后源站返回;502和504一般说明回源链路或源站处理异常。
method=GET url=/assets/app.js host=www.ipipp.com proto=HTTP/2 status=200 resp_size=154233 total_time=12ms first_byte=4ms
响应大小字段一般以字节为单位,但部分厂商会输出文本形式如154.2KB,做统计时需要统一单位。响应耗时字段值得注意:完整响应时间包含首字节时间和传输时间。首字节时间长通常意味着回源或节点处理慢,传输时间长则多半与客户端带宽或大文件下载有关。把这两个时间分开观察,才能判断瓶颈在CDN侧还是用户侧。
三、缓存命中与回源行为字段
判断CDN是否真正加速,关键看缓存状态字段。不同厂商命名差异较大,常见有cache_status、x-cache、hit_status等。Squid风格的日志会输出TCP_HIT、TCP_MISS、TCP_REFRESH_HIT、TCP_REFRESH_MISS等值。HIT表示边缘节点直接返回缓存,MISS表示节点没有可用缓存,需要向源站回源。REFRESH表示缓存已过期,节点携带条件请求回源验证。
还有一种细化状态会区分缓存层级,例如edge_hit和parent_hit。边缘层命中通常最快;如果边缘未命中但上层节点命中,仍会回源到CDN内部,不会直接访问源站。日志中若同时出现origin_ip字段,可以确认实际回源地址。频繁MISS且响应耗时明显偏高,通常与缓存键配置、查询串忽略规则或源站Cache-Control头有关。
cache_status=TCP_HIT upstream_status=200 origin_ip=192.0.2.5 # 对比未命中 cache_status=TCP_MISS upstream_status=200 origin_ip=192.0.2.5
分析回源行为时,要结合请求URL的查询参数。例如/product?id=123和/product?id=456如果被当作不同缓存键,会造成相同的商品详情页反复回源。此时可检查CDN配置中的忽略查询串规则。节流和刷新预热操作也会在日志中留下痕迹,比如TCP_PURGE表示缓存被主动清除。
四、客户端与安全诊断字段
User-Agent字段记录客户端软件信息,可用于统计设备类型、浏览器版本或识别爬虫。Referer字段记录请求来源页面,常用于防盗链分析和访问路径还原。Range字段表示客户端请求的字节范围,视频播放和下载工具常见,配合206状态码可以判断是否命中分段缓存。Host字段在同一个CDN加速多个站点时尤其重要,日志筛选必须同时指定Host和时间范围。
安全相关字段有时会包含ssl_protocol、ssl_cipher和xff。X-Forwarded-For通常记录代理链中的客户端原始地址,但该字段可被伪造,不能单独作为审计依据。若日志中出现大量来自同一IP的403或高频请求,需要结合User-Agent和Referer判断是否为恶意抓取。部分CDN会输出WAF拦截标记字段,值为blocked或allowed。
ua=Mozilla/5.0 (Windows NT 10.0; Win64; x64) referer=https://www.ipipp.com/ range=bytes=0-1023 status=206 resp_size=1024 hit_status=TCP_HIT
需要注意的是,User-Agent和Referer都可能被客户端篡改,不能完全依赖。排查线上故障时,优先使用时间戳、客户端IP、URL和缓存状态这些稳定字段定位请求,再叠加User-Agent或Referer做特征分析。

