nginx日志的python分析脚本
2022-09-28 19:17 第二个卿老师 阅读(545) 评论(0) 收藏 举报因为容量场景需要统计峰值时间段的业务分布情况,即是统计每个接口请求以及对应的数量,这里记录下之前的实现脚本。
nginx的日志格式如下:

代码如下:
import os,json
import pandas as pd
import datetime
'''
全局参数
'''
# 日志文件存放目录
logDir = r"C:\Users\qgc\Desktop"
# 源日志文件,3天汇总
logFile= r"C:\Users\qgc\Desktop\nginx.log"
# 清洗完的文件绝对路径
date = datetime.datetime.strftime(datetime.datetime.now(), '%H%M')
print(date)
resultName = logDir+"\\result-" + date +".xlsx"
print ('开始数据预处理')
# 定义过滤函数,过滤掉无效uri
filt = ['.js','css','images','static']
filt2 = ['/deme/']
def filter_invalid_str(s,filt):
if s.isdigit() or s == '/' or s =='/null':
return 0
for i in filt:
if i in s:
return 0
for j in filt2:
if j not in s:
return 0
else:
return 1
print('开始数据分析')
# 统计各个uri的访问量,算出日业务量,过滤掉请求次数为0的uri
def uri_statistics(time):
result = {}
count = 0
with open(logFile, 'r', encoding="utf-8") as fr:
for i in fr:
line = i.split()
if time in line[3]:
k = line[6].split("?")[0]
if filter_invalid_str(k,filt):
count+=1
if k not in result.keys():
result[k] = 1
elif k in result.keys():
result[k] += 1
else:
print("%s 存入字典时,key没有找到!"%k)
print(f"共分析{count}条数据,找到{len(result)}接口数据")
if len(result) >0:
# 将清洗完的接口统计数据写入目标文件
if os.path.exists(resultName):
os.remove(resultName)
pandas_to_excel(resultName, result)
else:
print("未生成txt数据")
def pandas_to_excel(f, data):
file_path = pd.ExcelWriter(f)
try:
df = pd.DataFrame(pd.Series(data), columns=['total'])
df = df.reset_index().rename(columns={'index': 'apiUri'})
df.to_excel(file_path, encoding='utf-8')
file_path.save()
except Exception as e:
print("Error:", e)
print("excel处理数据成功")
if __name__ == '__main__':
time = "13/Jul/2022:09" //自定义日期时间,这里是指定13日9点的一小时数据。
uri_statistics(time)
代码运行结果如下:

上面这个表格,可以用excel自带的计算公式计算下百分比,就可以得到业务的分布比例。
浙公网安备 33010602011771号