某些原因,一开始没有设计网站的统计模块
如今需要加上,只能借助于百度统计或者阿里云的cdn日志文件,阿里云cdn的日志文件是web的访问信息
log
[9/Mar/2016:00:00:16 +0800] 222.171.7.89 - 62113 "http://cloud.insta360.com/post/5e7b029d8ed7e3c4b23006a71bab73c8?e=true&m=true" "GET http://cloud.insta360.com/public/media/mp4/5e7b029d8ed7e3c4b23006a71bab73c8_960x480.mp4" 206 509 20516390 HIT "Mozilla/5.0 (iPhone; CPU iPhone OS 8_4_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12H321 NewsApp/5.3.2" "video/mp4"
fileds
时间
访问IP
回源IP
responsetime
referer
method
访问URL
httpcode
requestsize
responsesize
cache命中状态
UA头
文件类型
re
# 将单条记录转换为Dict对象
def line2dict(line):
# Snippet, thanks to http://www.seehuhn.de/blog/52
parts = [
r'\[(?P
script
AliyunLog.py
# coding=utf-8
import fileinput
import re
import os
try:
import simplejson as json
except ImportError:
import json
# 读取输入文件并返回Dict对象
def readfile(file):
filecontent = {}
index = 0
statinfo = os.stat(file)
# just a guestimate. I believe a single entry contains atleast 150 chars
if statinfo.st_size < 150:
print "Not a valid log file. It does not have enough data"
else:
for line in fileinput.input(file):
index = index + 1
if line != "\n": # don't read newlines
filecontent[index] = line2dict(line)
fileinput.close()
return filecontent
# 将单条记录转换为Dict对象
def line2dict(line):
# Snippet, thanks to http://www.seehuhn.de/blog/52
parts = [
r'\[(?P
main.py
#!/usr/bin/env python
# coding=utf-8
import sys
from AliyunLog import *
def main():
if len(sys.argv) < 3:
print "Incorrect Syntax. Usage: python main.py -f "
sys.exit(2)
elif sys.argv[1] != "-f":
print "Invalid switch '" + sys.argv[1] + "'"
sys.exit(2)
elif os.path.isfile(sys.argv[2]) == False:
print "File does not exist"
sys.exit(2)
print toJson(sys.argv[2])
if __name__ == "__main__":
main()
result
run script
python main.py -f data
terminal
{
"6432": {
"res_time": "1728",
"res_ip": "118.114.213.118",
"req_size": "768",
"req_url": "GET http://cloud.insta360.com/public/media/mp4/f9e4bf15d452440c2884b234854d089c_audio.mp3",
"origin_ip": "-",
"referer": "http://cloud.insta360.com/post/f9e4bf15d452440c2884b234854d089c?m=true&from=timeline&isappinstalled=0",
"content_type": "audio/mpeg",
"time": "9/Mar/2016:00:59:58 +0800",
"ua": "Mozilla/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13C75 MicroMessenger/6.3.13 NetType/WIFI Language/zh_CN",
"http_code": "206",
"res_size": "5290084",
"cache_status": "HIT"
},
...
}
more
参考了github上apache log的解析方法
原文地址:parse-aliyun-cdn-log-file-with-python