windows下安装好
python3.6.2
nginx的访问日志access.log
使用清华镜像 pip安装matplotlib图库,它的依赖包也会自动安装好,我的环境python3是和python2共存的,所以3以pyhton3和pip3区别
pip3 install matplotlib==3.1.0 -i https://pypi.tuna.tsinghua.edu.cn/simple/
top10.py
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
# 定义存放日志地址
nginx_file = 'E:\\doc\\access.log'
# 定义空字典,后面要存放IP:数量键对值
ip = {}
# 筛选nginx日志中的目标IP
with open(nginx_file) as f:
for i in f.readlines():
s_ip = i.strip().split()[0]
lengh = len(ip.keys())
if s_ip in ip.keys():
ip[s_ip] = ip[s_ip] + 1
else:
ip[s_ip] = 1
# 以IP出现的次数排序返回对象为list
ip = sorted(ip.items(), key=lambda s:s[1], reverse=True)
# 排序好了截取前10数目的键值,0:10:1的意思是从0开始,以1单位增量去总共10个值
newip = ip[0:10:1]
# 转换成字典
tu = dict(newip)
# 定义 x和 y的空列表,用于分别存放tu字典的键和值
x = []
y = []
# 列车键和分别追加到x和y列表
for k in tu:
x.append(k)
y.append(tu[k])
# 打印标题
plt.title('ip access')
# 打印x标签
plt.xlabel('ip address')
# 打印y标签
plt.ylabel('PV')
# x标签旋转45°
plt.xticks(rotation=45)
# 输出图表中间的文字各种格式的定义
for a, b in zip(x, y):
plt.text(a, b, '%.0f' % b, ha='center', va='bottom', fontsize=12,)
# 以柱状形式打印图表,并打印标签名,还有其他图表格式的如饼图等,需要的text格式不同
plt.bar(x, y, label='nginx access top 10')
plt.legend()
# 图表展示
plt.show()
以上是个人理解。
python3