海量CDN日志高性价比分析方案

简介: 概述 CDN产生大量日志,可以进行日志转存(https://help.aliyun.com/document_detail/88894.html)到OSS bucket中。也可以进行实时日志推送(https://help.aliyun.com/document_detail/121169.html),推送到日志服务SLS中进行实时分析,也可以在日志服务SLS中配置OSS日志投递,将海量CDN日志长期保存在OSS中。

概述

CDN产生大量日志,可以进行日志转存https://help.aliyun.com/document_detail/88894.html)到OSS bucket中。也可以进行实时日志推送https://help.aliyun.com/document_detail/121169.html),推送到日志服务SLS中进行实时分析,也可以在日志服务SLS中配置OSS日志投递,将海量CDN日志长期保存在OSS中。在OSS中的海量CDN日志,利用Data Lake Analytics进行分析。

image.png

CDN日志到日志服务的实时日志推送可以参考:https://help.aliyun.com/document_detail/121169.html
日志服务投递OSS链路和DLA的OSS日志分析可以参考:https://yq.aliyun.com/articles/705888

假设CDN的原始日志(不是进过日志服务投递OSS链路投递到OSS的,如果是日志服务投递到OSS的,请参考https://yq.aliyun.com/articles/705888),通过转存、上传,直接上传到OSS,文本下面部分介绍在DLA中建表分析的步骤。

步骤一:针对OSS上CDN日志建表

假设您已经将CDN日志传到OSS上,每行日志如下示例:

[9/Jun/2015:01:58:09 +0800] 188.165.15.75 - 1542 "-" "GET http://www.aliyun.com/index.html" 200 191 2830 MISS "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" "text/html"

其中每个字段含义为:

image

在DLA中建表,采用正则表达式的方式对CDN日志进行解析,正则表达式是对上述字段进行分别识别,每个字段和对应的正则表达式片段为:

image

为方便您复制粘贴,上述对应字段的样例和对应的正则表达式片段对应如下:

[9/Jun/2015:01:58:09 +0800] 
-> (-|\\[[^\\]]*\\])

188.165.15.75
-> ([^ ]*)

-
-> ([^ ]*) 

1542 
-> ([^ ]*)

"-"
-> ([^ \"]*|\"[^\"]*\")

"GET http://www.aliyun.com/index.html"
-> ([^ \"]*|\"[^\"]*\")

200 
-> (-|[0-9]*) 

191 
-> (-|[0-9]*)

2830
-> (-|[0-9]*)

MISS
-> ([^ ]*)

"Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)"
-> ([^ \"]*|\"[^\"]*\")

"text/html"
-> ([^ \"]*|\"[^\"]*\")

当然,上述字段的顺序可能根据实际情况有些变化,不过没有关系,可以根据上述字段对应正则进行顺序调整组合。

对于上述样例日志,对应的正则表达式为:

(-|\\[[^\\]]*\\]) ([^ ]*) ([^ ]*) ([^ ]*) ([^ \"]*|\"[^\"]*\") ([^ \"]*|\"[^\"]*\") (-|[0-9]*) (-|[0-9]*) (-|[0-9]*) ([^ ]*) ([^ \"]*|\"[^\"]*\") ([^ \"]*|\"[^\"]*\")

假设在OSS上,存储的CDN日志目录为:
oss://your_cdn_log_bucket/log/

则在DLA中建表:

CREATE EXTERNAL TABLE cdn_log (
  log_timestamp           VARCHAR,
  access_ip               VARCHAR,
  proxy_ip                VARCHAR,
  response_time           VARCHAR,
  referer                 VARCHAR,
  request                 VARCHAR,
  httpcode                SMALLINT,
  request_size            BIGINT,
  response_size           BIGINT,
  cache_hit_status        VARCHAR,
  ua_header               VARCHAR,
  file_type               VARCHAR
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
  "input.regex" = "(-|\\[[^\\]]*\\]) ([^ ]*) ([^ ]*) ([^ ]*) ([^ \"]*|\"[^\"]*\") ([^ \"]*|\"[^\"]*\") (-|[0-9]*) (-|[0-9]*) (-|[0-9]*) ([^ ]*) ([^ \"]*|\"[^\"]*\") ([^ \"]*|\"[^\"]*\")"
)
STORED AS TEXTFILE
LOCATION 'oss://your_cdn_log_bucket/log/'
TBLPROPERTIES ('recursive.directories' = 'true');

上述建表为非分区表,如果在OSS日志数据存储为分区模式,可以对应修改为分区表模式,关于分区,可以参考:https://yq.aliyun.com/articles/705888 中的“步骤四”和“步骤五”。

步骤二:查询、分析CDN日志

SELECT * FROM cdn_log;

-> 
+------------------------------+---------------+----------+---------------+---------+----------------------------------+----------+--------------+---------------+------------------+-------------------------------------------------------------+---------------------------+
| log_timestamp                | access_ip     | proxy_ip | response_time | referer | request                          | httpcode | request_size | response_size | cache_hit_status | ua_header                                                   | file_type                 |
+------------------------------+---------------+----------+---------------+---------+----------------------------------+----------+--------------+---------------+------------------+-------------------------------------------------------------+---------------------------+
| [18/Jun/2019:05:08:33 +0800] | 47.92.115.203 | -        | 777           | "-"     | "GET http://www.kalabandha.com/" |      200 |          201 |          7159 | MISS             | "Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D))" | "text/html;charset=UTF-8" |
+------------------------------+---------------+----------+---------------+---------+----------------------------------+----------+--------------+---------------+------------------+-------------------------------------------------------------+---------------------------+

可以利用DLA的系统函数,对数据字段进行分析:https://help.aliyun.com/document_detail/71065.html

例如:

SELECT date_parse(substring(log_timestamp, 2, length(log_timestamp) - 8), '%d/%b/%Y:%H:%i:%s') as log_timestamp,
       access_ip,
       proxy_ip,
       response_time,
       substring(referer, 2, length(referer) - 2) as referer,
       substring(request, 2, length(request) - 2) as request,
       httpcode,
       request_size,
       response_size,
       cache_hit_status,
       substring(ua_header, 2, length(ua_header) - 2) as ua_header,
       substring(file_type, 2, length(file_type) - 2) as file_type 
FROM cdn_log;

->

+-------------------------+---------------+----------+---------------+---------+--------------------------------+----------+--------------+---------------+------------------+-----------------------------------------------------------+-------------------------+
| log_timestamp           | access_ip     | proxy_ip | response_time | referer | request                        | httpcode | request_size | response_size | cache_hit_status | ua_header                                                 | file_type               |
+-------------------------+---------------+----------+---------------+---------+--------------------------------+----------+--------------+---------------+------------------+-----------------------------------------------------------+-------------------------+
| 2019-06-18 05:08:33.000 | 47.92.115.203 | -        | 777           | -       | GET http://www.kalabandha.com/ |      200 |          201 |          7159 | MISS             | Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D)) | text/html;charset=UTF-8 |
+-------------------------+---------------+----------+---------------+---------+--------------------------------+----------+--------------+---------------+------------------+-----------------------------------------------------------+-------------------------+
相关文章
|
4天前
|
边缘计算 网络安全 CDN
阿里云CDN服务的优劣势分析
阿里云CDN依托全球50+节点,提供高速、稳定、安全的内容分发服务,支持智能调度、灵活配置与DDoS防护,助力企业提升海外访问体验。虽价格略高,功能相对集中,但仍是全球化业务优选的可靠加速方案。
|
9天前
|
监控 安全 搜索推荐
使用EventLog Analyzer进行日志取证分析
EventLog Analyzer助力企业通过集中采集、归档与分析系统日志及syslog,快速构建“数字犯罪现场”,精准追溯安全事件根源。其强大搜索功能可秒级定位入侵时间、人员与路径,生成合规与取证报表,确保日志安全防篡改,大幅提升调查效率,为执法提供有力证据支持。
|
5月前
|
存储 运维 监控
SelectDB 实现日志高效存储与实时分析,完成任务可领取积分、餐具套装/水杯/帆布包!
SelectDB 实现日志高效存储与实时分析,完成任务可领取积分、餐具套装/水杯/帆布包!
|
5月前
|
SQL 监控 数据挖掘
SLS 重磅升级:超大规模数据实现完全精确分析
SLS 全新推出的「SQL 完全精确」模式,通过“限”与“换”的策略切换,在快速分析与精确计算之间实现平衡,满足用户对于超大数据规模分析结果精确的刚性需求。标志着其在超大规模日志数据分析领域再次迈出了重要的一步。
486 117
|
2月前
|
监控 安全 NoSQL
【DevOps】Logstash详解:高效日志管理与分析工具
Logstash是ELK Stack核心组件之一,具备强大的日志收集、处理与转发能力。它支持多种数据来源,提供灵活的过滤、转换机制,并可通过插件扩展功能,广泛应用于系统日志分析、性能优化及安全合规等领域,是现代日志管理的关键工具。
409 0
|
2月前
|
运维 监控 安全
2025 年 Splunk 的 5 大替代方案:企业日志管理工具新选择
Splunk 虽强大,但高昂成本和复杂性促使企业寻找替代方案。本文推荐 2025 年五大日志管理与安全分析工具:Log360、Elastic Security、Datadog、Graylog 和 Sumo Logic,涵盖开源、云原生与高性能方向,适配不同企业需求,助你提升安全与运维效率。
173 0
|
4月前
|
自然语言处理 监控 安全
阿里云发布可观测MCP!支持自然语言查询和分析多模态日志
阿里云可观测官方发布了Observable MCP Server,提供了一系列访问阿里云可观测各产品的工具能力,包含阿里云日志服务SLS、阿里云应用实时监控服务ARMS等,支持用户通过自然语言形式查询
524 0
阿里云发布可观测MCP!支持自然语言查询和分析多模态日志
|
3月前
|
人工智能 运维 监控
Aipy实战:分析apache2日志中的网站攻击痕迹
Apache2日志系统灵活且信息全面,但安全分析、实时分析和合规性审计存在较高技术门槛。为降低难度,可借助AI工具如aipy高效分析日志,快速发现攻击痕迹并提供反制措施。通过结合AI与学习技术知识,新手运维人员能更轻松掌握复杂日志分析任务,提升工作效率与技能水平。
|
6月前
|
存储 消息中间件 缓存
MiniMax GenAI 可观测性分析 :基于阿里云 SelectDB 构建 PB 级别日志系统
基于阿里云SelectDB,MiniMax构建了覆盖国内及海外业务的日志可观测中台,总体数据规模超过数PB,日均新增日志写入量达数百TB。系统在P95分位查询场景下的响应时间小于3秒,峰值时刻实现了超过10GB/s的读写吞吐。通过存算分离、高压缩比算法和单副本热缓存等技术手段,MiniMax在优化性能的同时显著降低了建设成本,计算资源用量降低40%,热数据存储用量降低50%,为未来业务的高速发展和技术演进奠定了坚实基础。
271 1
MiniMax GenAI 可观测性分析 :基于阿里云 SelectDB 构建 PB 级别日志系统
|
6月前
|
SQL 存储 自然语言处理
让跨 project 联查更轻松,SLS StoreView 查询和分析实践
让跨 project 联查更轻松,SLS StoreView 查询和分析实践
127 1