服务器上,Nginx的日志很常见
网络服务日志分析,是常见的一种分析。可以根据之前的访问量,预估之后的访问量,然后根据访问量决定服务器是增加配置和带宽,还是减少。并且结合用户注册以及支付还可以分析用户转化率和支付率。
我们现在就用时间序列分析一下Nginx日志
数据采集
现在是2021年,以免纠纷,我找了一个以前的2013年现在已经废弃的网站来做示例
压缩包
服务器基本都有备份功能,会按时或者按照尺寸保存一个zip(gz、tar)作为备份
Python自带 zipfile 组件,我们可以直接加载,并且可以得到压缩包里面的内容
from zipfile import ZipFile
z = ZipFile('./access.zip')
z.namelist()
这个压缩包里面只有一个access文件
['access.log']
读文件
我们使用 pandas 的 read_table 函数读取压缩包里的access数据
import pandas as pd
df = pd.read_table('acces.log', sep=' ')
sep 代表分隔符,日志是用的 空格 ,根据情况有也可能是“,”或者“;”
设置头文件
打开Nginx配置,可以找到记录日志的部分
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
总共我们统计了这些内容——
key | value |
---|---|
remote_addr | 远程地址 |
remote_user | 用户 |
time_local | 服务器时间 |
request | 请求地址 |
status | 状态 |
body_bytes_sent | 页面尺寸 |
http_referer | 来源 |
http_user_agent | 设备 |
http_x_forwarded_for | 真实地址 |
其实我们可以做很多统计,比如按照用户设备分类,按照推广地址分类,按照ip地区分类……
这次我们只做总的访问统计。
我们根据配置设置一下头文件
注意
$remote_addr - $remote_user
之间有个“-”
注意 time_local 中 datetime和zone之间有空格,读取数据时候变成了两列
import pandas as pd
from zipfile import ZipFile
names = ['remote_addr', '-', 'remote_user', 'time_local', 'time_zone', 'request', 'status', 'body_bytes_sent', 'http_referer', 'http_user_agent', 'http_x_forwarded_for' ] # 设置表头
z = ZipFile('./access.zip') # 加载压缩包
f = z.open(z.namelist()[0], 'r') # 读取压缩包中第一个文件
df = pd.read_table(f, sep=' ', header=None, names=names, encoding='unicode_escape') # 按照表头读取压缩包内文件
z.close() # 关闭压缩包
df = df.drop(columns=['-']) # 去掉多余的列
读取了log数据
remote_addr remote_user time_local time_zone request status body_bytes_sent http_referer http_user_agent http_x_forwarded_for
0 60.165.14.57 - [17/Jun/2013:14:50:18 +0800] GET /forum.php?mod=forumdisplay&fid=2 HTTP/1.1 200 12941 http://www.moli2.com/forum.php Mozilla/5.0 (compatible; MSIE 9.0; Windows NT ... -
1 60.165.14.57 - [17/Jun/2013:14:50:18 +0800] GET /uc_server/avatar.php?uid=1&size=small HTT... 301 5 http://www.moli2.com/forum.php?mod=forumdispla... Mozilla/5.0 (compatible; MSIE 9.0; Windows NT ... -
2 60.165.14.57 - [17/Jun/2013:14:50:18 +0800] GET /home.php?mod=misc&ac=sendmail&rand=137145... 200 5 http://www.moli2.com/forum.php?mod=forumdispla... Mozilla/5.0 (compatible; MSIE 9.0; Windows NT ... -
3 60.165.14.57 - [17/Jun/2013:14:50:20