海量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 |
+-------------------------+---------------+----------+---------------+---------+--------------------------------+----------+--------------+---------------+------------------+-----------------------------------------------------------+-------------------------+
相关文章
|
8月前
|
运维 安全 API
统一接入API赋能开发者:自动高效、灵活编排的云产品日志采集方案
随着企业对网络安全和数据安全防护水平要求的逐步提升,企业管理对企业生产运维过程中所产生的日志数据,在留存处理、权限隔离、跨境合规、数据汇总等方面提出了更高阶的需求。为了满足大客户及一些国际化客户安全合规、简单快速地接入日志、使用日志、操作日志,我们提出了一种新的解决方案——“云产品统一接入API”。统一接入API主要针对阿里云云产品日志类型,以API的方式提供企业或组织用户快速上手,编排灵活的日志采集方案。
|
20天前
|
存储 数据采集 Kubernetes
一文详解K8s环境下Job类日志采集方案
本文介绍了K8s中Job和Cronjob控制器用于非常驻容器编排的场景,以及Job容器的特点:增删频率高、生命周期短和突发并发大。文章重点讨论了Job日志采集的关键考虑点,包括容器发现速度、开始采集延时和弹性支持,并对比了5种采集方案:DaemonSet采集、Sidecar采集、ECI采集、同容器采集和独立存储采集。对于短生命周期Job,建议使用Sidecar或ECI采集,通过调整参数确保数据完整性。对于突发大量Job,需要关注服务端资源限制和采集容器的资源调整。文章总结了不同场景下的推荐采集方案,并指出iLogtail和SLS未来可能的优化方向。
|
7月前
|
存储 缓存 前端开发
两种异步日志方案的介绍
两种异步日志方案的介绍
109 0
|
20天前
|
Web App开发 监控 应用服务中间件
全新架构!日志服务 SLS 自研免登录方案发布
全新架构!日志服务 SLS 自研免登录方案发布
87552 7
|
9月前
|
存储 SQL 监控
一文解读如何落地企业级云上日志审计方案
近年来,随着云计算的广泛应用和企业上云的深度普及,许多企业或个人用户将各种日志托管在云上进行留存,从而进行查询、审计等操作。什么是日志审计?为什么要做日志审计?企业如何落地云上日志审计方案?带着这些问题出发,本文将以阿里云日志服务(SLS)旗下的日志审计服务为视角切入,带领读者从当今网络安全形势和法律法规要求出发,解读云计算背景下,如何构建、运行、实践一个标准的企业级云上审计方案,从而更好地保障企业或组织的云上资产、云上数据的安全,确保企业业务持续安全稳定地运行。
|
20天前
|
消息中间件 设计模式 Java
spdlog中的异步日志方案
spdlog中的异步日志方案
297 2
|
20天前
|
Java Linux
异步日志方案log4cpp
异步日志方案log4cpp
135 0
|
12月前
|
Java Spring
优雅处理 Spring Boot 日志文件:高效、可维护的日志管理方案详解
优雅处理 Spring Boot 日志文件:高效、可维护的日志管理方案详解
401 0
|
20天前
|
Linux
Linux日志自动清理方案
Linux日志自动清理方案
141 0
|
6月前
|
存储 SQL 监控
从 Elasticsearch 到 SelectDB,观测云实现日志存储与分析的 10 倍性价比提升
SelectDB 助力观测云完成日志数据存储和分析架构升级,实现整体性价比 10 倍提升,为日志存储和分析场景服务提供强大动力。