cdn 日志文件导入 mysql 进行分析,核心用到 Python
本文需求背景
周六日出现 CDN 大量请求,现需要分析其请求频次与来源,查询是否存在被攻击问题。
本文以阿里云 CDN 日志作为辅助查询数据,其它云平台大同小异。
系统提供的离线日志如下所示。
需求落地如下
日志实例如下所示
其中相关字段的解释如下:
[9/Jun/2015:01:58:09 +0800]
:日志开始时间。10.10.10.10
:访问 IP。-
:代理 IP。1542
:请求响应时间,单位为毫秒。"-"
: HTTP 请求头中的 Referer。GET
:请求方法。http://www.aliyun.com/index.html
:用户请求的 URL 链接。200
:HTTP 状态码。191
:请求大小,单位为字节。2830
:请求返回大小,单位为字节。MISS
:命中信息。HIT
:用户请求命中了 CDN 边缘节点上的资源(不需要回源)。MISS
:用户请求的内容没有在 CDN 边缘节点上缓存,需要向上游获取资源(上游可能是 CDN L2 节点,也可能是源站)。Mozilla/5.0(compatible; AhrefsBot/5.0; +http://example.com/robot/)
:User-Agent 请求头信息。text/html
:文件类型。
按照上述字段说明创建一个 MySQL 表,用于后续通过 Python 导入 MySQL 数据,字段可以任意定义
下载全部日志之后,使用 Python 批量导入数据库中,解析代码如下,在提前开始前需要先看一下待提取的每行数据内容。
初看之下,我们会使用空格进行切片,例如下述代码
运行之后,会发现里面的开始时间位置,UA 位置都存在空格,所以该方案舍弃,接下来使用正则表达式提取。参考待提取的模板编写正则表达式如下所示
接下来进行循环读取数据,然后进行提取。
读取到数据存储到 wait_list
列表中,然后操作列表,写入 MySQL,该操作为了防止 SQL 语句过长,所以每次间隔 1000 元素进行插入。
最终的结果如下所示。
导入 MySQL 之后,就可以按照自己的需求进行排序与查询了。
自定义查询
可以通过 refer 计算请求次数
版权声明: 本文为 InfoQ 作者【梦想橡皮擦】的原创文章。
原文链接:【http://xie.infoq.cn/article/a26bab9136b4a847cefd356b6】。文章转载请联系作者。
评论