对访问日志数据进行读取,清洗,分析,绘图和储存

要求的日志格式为七牛cdn日志格式

110.110.110.110 HIT 10 [19/Apr/2016:00:00:00 +0800] "GET http://example.qiniu.info/in/2016/02/04/F01A9B39-45BF-AFF4-DB19-F85B9E4BD142.jpg?imageMogr2/format/png/thumbnail/480x%320E/quality/80! HTTP/1.1" 200 5136 "-" "Dalvik/1.6.0 (Linux; U; Android 4.4.4; 1105 Build/KTU84P)"

或满足下列标准格式。

ip 命中 响应时间 请求时间 请求方法 请求URL 请求协议 状态码 响应大小 referer UA
14.163.128.14 HIT 1 2017-07-12 22:38:18 GET http://aaa.bbb.com/cc.jpg - 200 1024 www.baidu.com “Mozilla/5.0 (Linux; Android ……


注意:如果满足则is_qiniu参数设置为f,如果不满足且不是七牛日志格式仍设置为f,会报KeyError: ‘request_time’。

github链接地址

函数名 API_PATH 数据类型
get_data_by_factor get_total_data 根据限制条件返回清洗后的日志数据(不支持绘图)
get_url_traffic get_url_traffic 根据url返回对应的流量
get_url_count get_url_count 根据url返回对应的访问次数
get_ip_traffic get_ip_traffic 根据ip返回对应的流量
get_ip_count get_ip_count 根据ip返回对应的访问次数
get_code_count get_code_count 根据状态码返回对应的访问次数
get_ip_url_code_count get_ip_url_code_count 根据ip、url返回不同状态码对应的访问次数
get_url_code_count get_url_code_count 根据url和状态码返回对应的访问次数
get_ip_code_count get_ip_code_count 根据ip和状态码返回对应的访问次数
get_time_traffic get_time_traffic 返回指定时间段产生的流量
get_time_count get_time_count 返回指定时间段对应的访问次数

1.配置日志路径和环境变量

# log_files指定日志的绝对路径
[log_files]
file_path:/Users/berniey/Documents/fun/Qiniu-cdnLog/log_path/aaa.bbb.com_2017-07-12-14_part-00000

# log_Path指定日志所在目录的绝对路径
[log_Path]
log_path:/Users/berniey/Documents/fun/Qiniu-cdnLog/log_path

注意:数据库名称默认为cdnlog。

name Value 涵义
mysql_role work mysql数据库用户
mysql_password 123 mysql数据库密码
pg_role work pg数据库用户
pg_password 123 pg数据库密码

2.命令行调用

在data.py调用实例d的函数,通过命令python3 data.py获得指定的数据

Todo看情况支持命令行参数

3.接口调用

python3 api.py 启动flask实例,用接口调用

请求格式:

http://127.0.0.1/api_path?=&=...
参数名 值格式 备注
limit x:y 正则表达式为r”^[0-9]:[0-9]“,如果不指定或不匹配,返回全部数据,:100返回top100数据,1000:返回1000之后数据,10:20返回11到20之间的数据
code ddd或dxx 返回指定状态码的数据,ddd<404>指定准确的状态码,dxx<4xx>指定某个类型的状态码
ip d.d.d.d 正则表达式为r”^\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}$”,目前仅支持ipv4
url http://aaa.bbb.com/ccc.jpg 必须是完整的链接
referer 无限制 必须准确完整
start_time 2017-03-02 18:43:24 正则表达式r”^\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}$” 返回指定时间之的数据
end_time 2017-03-02 18:43:24 正则表达式r”^\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}$” 返回指定时间之的数据
save mysql/pg/postgresql/csv/excel 存储的类型,不指定则不存储
pg table_name/Users/user/Documents/d:\doc 表名或路径,不指定表名默认为API_PATH+当前时间戳,路径为项目的目录
is_show 任意字符 存在值则对返回的数据绘图
kind ‘line’, ‘hist’, ‘area’, ‘bar’, ‘barh’, ‘kde’, ‘area’, ‘pie’ 图像的形式
use_index boolean, default True 使用index作为x轴
dis_tick x/y 默认显示刻度值,指定x则不显示x轴刻度,指定y轴则不显示y轴刻度

示例:

  1. http://127.0.0.1:5000/get_total_data?limit=:100
    查找前10000条数据里某一ip某一url的数据
    对访问日志数据进行读取,清洗,分析,绘图和储存_第1张图片


  2. http://127.0.0.1:5000/get_url_traffic?limit=:100&is_show=t&kind=bar&dis_tick=x
    对前100条数据绘图,生成bar,隐藏x轴刻度
    对访问日志数据进行读取,清洗,分析,绘图和储存_第2张图片


    3.http://127.0.0.1:5000/get_time_traffic?limit=:1000&start_time=2017-07-12%2022:00:00&end_time=2017-07-12%2022:16:47&is_show=t&kind=line
    前1000条数据中从2017-07-12 22:00:00到2017-07-12 22:16:47流量的线形图
    对访问日志数据进行读取,清洗,分析,绘图和储存_第3张图片


    4.http://127.0.0.1:5000/get_code_count?is_show=t&kind=pie
    不同状态码数量的pie图
    对访问日志数据进行读取,清洗,分析,绘图和储存_第4张图片



5.http://127.0.0.1:5000/get_ip_url_code_count?limit=:1000&save=mysql&pt=ip_url_code_count
将每个ip的每个url的状态码的统计数量中的前1000条保存在mysql,表名为ip_url_code_count

对访问日志数据进行读取,清洗,分析,绘图和储存_第5张图片


6.http://127.0.0.1:5000/get_url_code_count?limit=:1000&save=csv&pt=/Users/l2017006/Documents/rm/test/get_url_code_count.csv
将每个url的每个状态码的统计数量中的前1000条保存为csv文件,路径为/Users/l2017006/Documents/rm/test/get_url_code_count.csv
对访问日志数据进行读取,清洗,分析,绘图和储存_第6张图片

你可能感兴趣的:(python,数据)