通过CDN对外提供访问服务时,CDN会针对到达加速节点的业务请求记录明细的访问日志,您可以通过分析CDN日志及时发现问题、分析问题,并有针对性的解决问题,提升CDN服务质量。CDN提供了离线日志、实时日志两种日志的对接方式,通过本文您可以了解CDN提供的日志相关的功能和产品。
准备工作
1.已经添加完成的CDN域名
2.阿里云CDN控制台。
本章节内容大纲
离线日志
- 离线日志的下载方式,字段含义。
- 常见离线日志的分析思路。
- 如何延长离线日志存储时间。
实时日志
- 实时日志的开通方式,字段含义。
- 常见实时日志的分析思路。
- 如何延长实时日志存储时间。
离线日志
阿里云CDN默认按小时颗粒度记录了域名全网访问日志,您可根据需求下载30天内指定域名某一天的日志至本地路径保存进行分析,离线日志的延迟一般在24小时内(特殊情况大于24小时)。
日志下载与字段含义
登录CDN控制台,在左侧导航栏,单击日志管理 > 离线日志,在日志下载页签,选择域名和查询时间,单击查询,根据查询结果,单击操作列下的下载,即可下载日志至本地。
说明:
日志下载默认可下载最长时间为30天的日志数据,若您有更长时间的日志存储需求,可使用离线日志转存服务,把日志转存到您名下的OSS进行长期存储,具体操作请参见下文。
日志字段含义
日志示例:
[9/Jun/2015:01:58:09 +0800] 10.10.10.10 - 1542"-""GET http://www.aliyun.com/index.html"2001912830 MISS "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://example.com/robot/)""text/html"
字段 |
描述 |
[9/Jun/2015:01:58:09 +0800] |
日志开始时间。 |
10.10.10.10 |
访问IP。 |
- |
代理IP。 |
1542 |
请求响应时间,单位为毫秒。 |
"-" |
HTTP请求头中的Referer。 |
GET |
请求方法。 |
用户请求的URL链接。 |
|
200 |
HTTP状态码。 |
191 |
请求大小,单位为字节。 |
2830 |
请求返回大小,单位为字节。 |
MISS |
命中信息。
说明:阿里云CDN目前仅提供了CDN边缘节点的日志信息,不包含CDN L2节点的回源相关信息,因此当该字段为MISS时,无法获取回源信息,因此无法直观地从日志里面看到用户请求是否回源。 |
Mozilla/5.0(compatible; AhrefsBot/5.0; +http://example.com/robot/) |
User-Agent请求头信息。 |
text/html |
文件类型。 |
离线日志分析
离线日志下载解压后,可以直接通过文本编辑器打开查看,也可以通过shell、python等进行脚本分析,以下列举常见的shell分析命令帮助您理解,您也可以参考示例命令适当修改后实现自定义分析目的。
- 示例日志文件名:example.aliyun.com_2022_08_18_100000_110000(使用命令时需替换文件名)
- 分析目标:域名example.aliyun.com在2022年8月18日10点~11点期间的访问日志
■ 响应时间较长top20的日志
cat example.aliyun.com_2022_08_18_100000_110000 | sort -rn -k 5 | head -20
■ 文件MISS大小top20的日志
cat example.aliyun.com_2022_08_18_100000_110000 | grep 'MISS' | sort -rn -k 11 | head -20
■ 502状态码的日志
cat example.aliyun.com_2022_08_18_100000_110000 | awk '{if($9==502)print $0}'
■ 客户端IP前缀为10.10.10.的日志
cat example.aliyun.com_2022_08_18_100000_110000 | grep '10.10.10.'
■ URL访问次数排序top20(忽略参数)
cat example.aliyun.com_2022_08_18_100000_110000 | awk '{print $8}' | awk -F'?' '{print$1}' |sort| uniq -c | sort -rn | head -20
■ 客户IP访问次数排序top20
sort -k 3 example.aliyun.com_2022_08_18_100000_110000 | awk '{print $3}' | uniq -c | sort -rn | head -20
■ 过滤499状态码且响应时间大于10s的日志
cat example.aliyun.com_2022_08_18_100000_110000 | awk '{if($9==499 && $5>10000)print $0}'
■ 1M以上的文件中,平均响应速度小于100KB/s慢请求
cat example.aliyun.com_2022_08_18_100000_110000 | awk '{if($5>0 && $11>1000000 && $11/$5<100)print $0}'
■ 1M以上的文件中,平均响应速度小于100KB/s慢请求出现次数按照客户端IP聚合后再排序top20
sort -k 3 example.aliyun.com_2022_08_18_100000_110000 | awk '{if($5>0 && $11>1000000 && $11/$5<100)print $0}' | awk '{print $3}' | uniq -c | sort -rn | head -20
延长离线日志存储时间
由于CDN日志在控制台只保留近30天的数据,因此如果您需要长期存储以便分析,需要对日志进行转存,常见方式:
- 通过控制台下载、API对接的方式,定期拉取服务端日志备份到本地服务器。
- 通过函数计算产品,将CDN离线日志转存到OSS中。
在这里我们主要介绍通过函数计算转存离线日志的方式,操作步骤如下:
- 在离线日志-通过函数计算转存离线日志中,前往开通函数计算产品
- 创建日志转存服务,输入服务名称,并选择转存时需要存储的OSS bucket名称。
- 点击按钮进行授权,选择需要关联函数服务的域名。
- 创建完成,当域名产生新的日志后,会通过触发器将日志存储到OSS空间。
- 等待产生新日志并验收OSS内的转存效果。
实时日志
由于离线日志的延迟时间较长,如果您期望分析更加实时的访问日志信息,可以开通实时日志服务,实时日志的数据延迟不超过3分钟,可以帮助用户您快速对访问日志进行分析,及时发现问题和决策应对。
传统的离线日志分析模式中,需要用户将日志下载,再重新上传至数据仓库,然后在数据仓库进行一系列的清洗和数据模型定义,这一系列操作处理完以后才能进行数据分析,整个过程需要的人力较多,时间较长;而CDN实时日志打通了SLS日志服务的日志转存和日志分析能力,免去传统模式下繁琐的离线日志分析流程,可以通过SLS进行便捷分析。
日志推送配置与字段含义
登录CDN控制台,在左侧导航栏,单击日志管理 > 实时日志,在实时日志推送页签,创建实时日志推送服务,选择需要开启实时日志的域名后创建。
日志字段含义
相较离线日志,实时日志推送的信息内容更加丰富。
编号 |
字段名称 |
字段含义 |
默认是否创建索引 |
1 |
unixtime |
请求时间。 |
是 |
2 |
domain |
请求的域名。 |
是 |
3 |
method |
请求方法。 |
是 |
4 |
scheme |
请求协议。 |
是 |
5 |
uri |
请求资源。 |
是 |
6 |
uri_param |
请求参数。 |
是 |
7 |
client_ip |
用户真实IP。 |
是 |
8 |
proxy_ip |
代理IP。 |
是 |
9 |
remote_ip |
和CDN节点建连IP。 |
是 |
10 |
remote_port |
和CDN节点建连客户端端口。 |
是 |
11 |
refer_protocol |
HTTP refer中的协议。 |
是 |
12 |
refer_domain |
HTTP refer中domain信息。 |
是 |
13 |
refer_uri |
HTTP refer中uri信息。 |
是 |
14 |
refer_param |
HTTP refer中的参数信息。 |
是 |
15 |
request_size |
请求大小。 |
是 |
16 |
request_time |
请求响应时间,单位:毫秒。 |
是 |
17 |
response_size |
请求返回大小,单位:字节。 |
是 |
18 |
return_code |
请求响应码。 |
是 |
19 |
sent_http_content_range |
应答头里表示的range信息(由源站创建),如bytes:0~99/200。 |
是 |
20 |
server_addr |
服务的CDN节点IP。 |
是 |
21 |
server_port |
服务的CDN节点服务端口。 |
是 |
22 |
body_bytes_sent |
实际发送body大小,单位:字节。 |
是 |
23 |
content_type |
请求的资源类型。 |
是 |
24 |
hit_info |
命中信息(直播,动态加速除外),取值为HIT(命中)、MISS(未命中)。 |
是 |
25 |
http_range |
用户请求中Header头中range字段取值,如bytes:0~100。 |
是 |
26 |
user_agent |
用户代理信息。 |
是 |
27 |
user_info |
用户信息。 |
是 |
28 |
uuid |
请求唯一标识。 |
是 |
29 |
via_info |
via头信息。 |
是 |
30 |
xforwordfor |
请求头中XForwardFor字段。 |
是 |
实时日志分析
创建投递项目后,点击对应的分析与告警,可以跳转DCDN访问中心查看报表,报表业务默认展示了常见图表,您也可以根据业务需求创建自定义图表。
日志分析分类如下:
- 基本信息:PV总数、UV总数和请求错误百分比。
- 数据分布与趋势:PV分布和PV趋势。
- TOP数据:Top10 URI和Top10 IP。
- 错误信息:错误码趋势、错误域名Top10、错误URI Top10和错误IP Top10。
- 性能指标:缓存命中率和响应时延(5分钟)。
- 客户画像:UV分布、Referer来源分布和UA分布。
左侧导航栏可以切换日志存储,点击Logstore名称打开日志分析页面。
默认DCDN在日志推送时已经创建索引,您可以展开索引字段查看聚合后的字段分布。
您也可以参考SLS的分析语句,按照需求过滤分析,如需排障或定位日志中的请求问题,可以将相应请求的日志内容复制给到售后工程师进行排查。
延长实时日志存储时间
创建实时日志服务时,默认保存时间为7天,如果您需要修改保存时间,或者永久保存,操作步骤如下:
- 打开SLS控制台内,打开CDN实时日志对应的Project。
- 右键需要修改Logstore打开修改面板,点击修改按钮后对保存时间进行调整,如需永久保存可开启永久保存开关。
- 修改完成后,点击保存即可生效。
更多边缘云产品资讯欢迎访问【阿里云边缘云】或扫码关注【阿里云Edge Plus】
边缘云 开启分布式云网融合新时代