摘要: CDN是互联网网站、应用上极其重要的基础设施,通过CDN可有效降低访问延时、提升体验有很大帮助,也有助于源站降低负载,容应对流量高峰,保证服务的稳定。CDN日志可实时导入日志服务,基于日志服务灵活、快捷的统计分析能力,用户对于CDN的数据分析将变得极其简单和方便。
CDN(Content Delivery Network),内容分发网络)是互联网网站、应用上极其重要的基础设施,通过CDN,终端用户可直接从边缘节点访问各种图片、视频资源,避免直接访问源站。这对于降低访问延时、提升体验有很大帮助,也有助于源站降低负载,容应对流量高峰,保证服务的稳定。在(短)视频、直播等对网络流量很大需求的领域,CDN作用尤其重要。
CDN对于网站、应用如此重要,对于CDN访问的统计分析必不可少,先看一下以下几个场景:
-
当前服务状态是否正常
- 访问PV、UV是否有波动
- 带宽、访问延时是否正常
- 缓存命中率,访问健康度如何
-
有人反馈服务访问异常
- 异常来源是否有地域特性
- 是否和运营商有关
- 错误访问和终端应用版本是否有关联
-
流量上涨
- 是正常访问还是攻击
- 哪些是热点资源
- 是否有异常客户
- 是否由于客户端缓存策略导致
-
用户行为分析
- 当前在线人数、访问次数
- 热门资源
- 访问来源、agent、分布等
传统分析流程
现在各家CDN厂商,通常会提供基础的监控指标,比如请求次数、带宽等信息,然后,在进行定制化分析场景下,默认指标往往不能解决所有问题,需要对原始日志进行更深入的挖掘。以下是常见的处理方式:
- 定期下载CDN离线日志
- 将数据导入Hadoop 这样的数仓系统
- 跑各类job(或hive)对数据进行分析,将最终结果导入Mysql
- 对分析结果进行实时展示
对于报表场景,以上流程没有太大问题,可以处理海量CDN的日志,但是在实时问题定位,快速验证、试错等交互式分析强烈的场景下, 该方案的弊端就显露出来:
- 离线模式下,数据产出实时性无法保证,延时从半小时到几小时不等
- 需要维护多级Pipeline,需要有脚本或工具将其串联,有开发代价
- 环境维护,有运维代价,任意一个环节出问题,结果都不能产出
- 灵活性欠佳,无法快速响应实时交互查询需求
针对这种情况, 阿里云CDN和日志服务进行了打通,CDN日志可实时导入日志服务,使用SLS的查询和SQL分析能力,来满足用户个性化、实时、交互式的分析需求:
- CDN的访问日志,1分钟内可投递至日志服务
- 直接在日志服务控制台进行SQL查询,无需任何代码维护
- 秒级查询分析1亿~10亿数据
- 使用日志服务的Dashboard功能,制定灵活的报表
接下来,对于CDN数据各类分析需求,看看如何在日志服务上实现。在这之前,我们先看一下CDN主要的字段说明。
CDN日志格式说明
字段名字 | 类型 | 说明 |
---|---|---|
client_ip | text | 客户端ip |
content_type | text | 数据类型 |
domain | text | 域名 |
hit_info | text | 缓存命中信息 HIT 或者 MISS |
method | text | 请求方法 |
refer_domain | text | 请求来源域名 |
refe |