使用python解析nginx日志
性能测试时,需使用生产环境各接口请求比例分配接口请求比,nginx统计脚本如下:
import re
import pandas as pd
import xlwt obj = re.compile(
r'(?P<ip>.*?)- - \[(?P<time>.*?)\] "(?P<request>.*?)" (?P<request_time>.*?) (?P<status>.*?) (?P<bytes>.*?) "(?P<referer>.*?)" "(?P<ua>.*?)"') def load_log(path):
lst = []
error_lst = []
i = 0
with open(path, mode="r", encoding="utf-8") as f:
for line in f:
line = line.strip()
dic = parse(line)
if dic:
lst.append(dic)
else:
error_lst.append(line)
i += 1 return lst, error_lst def NumIn(s):
for char in s:
if char.isdigit():
return True
return False def parse(line):
dic = {}
try:
result = obj.match(line) time = result.group("time")
time = time.replace(" +0800", "")
time_min = time[:17]
time_10min = time[:16]
time_hour = time[:14]
dic['time'] = time
dic['time_min'] = time_min
dic['time_10min'] = time_10min
dic['time_hour'] = time_hour request = result.group("request")
a = request.split()[1].split("?")[0]
c = '/'.join(a.split('/')[:5])
b = request.split()[0]
for item in c.split('/')[4]:
if NumIn(item):
c='/'.join(a.split('/')[:4])
dic['request'] = b + " " + c return dic except:
return False def analyse(lst,project):
df = pd.DataFrame(lst)
df = df[df['request'].str.contains(project)]
request_time_count = pd.value_counts(df['time']).reset_index().rename(columns={"index": "time", "time": "count"}).iloc[:100, :]
request_time_min_count = pd.value_counts(df['time_min']).reset_index().rename(columns={"index": "time_min", "time_min": "count"}).iloc[:100, :]
request_time_10min_count = pd.value_counts(df['time_10min']).reset_index().rename(columns={"index": "time_10min", "time_10min": "count"}).iloc[:100, :]
request_time_hour_count = pd.value_counts(df['time_hour']).reset_index().rename(columns={"index": "time_hour", "time_hour": "count"}).iloc[:24, :]
request_count = pd.value_counts(df['request']).reset_index().rename(columns={"index": "request", "request": "count"}).iloc[:, :]
request_time_count_values = request_time_count.values
request_time_min_count_values = request_time_min_count.values
request_time_10min_count_values = request_time_10min_count.values
request_time_hour_count_values = request_time_hour_count.values
request_count_values = request_count.values wb = xlwt.Workbook() sheet = wb.add_sheet("url请求次数及占比")
row = 0
sheet.write(row, 0, "request_url")
sheet.write(row, 1, "request_type")
sheet.write(row, 2, "count")
sheet.write(row, 3, "百分比")
sheet.write(row, 4, "请求总数")
row += 1
sheet.write(row, 4, df.shape[0])
for item in request_count_values:
sheet.write(row, 0, item[0].split(" ")[1])
sheet.write(row, 1, item[0].split(" ")[0])
sheet.write(row, 2, item[1])
sheet.write(row, 3, "%.2f%%" % (round(float(item[1]/df.shape[0]) * 100, 2)))
row += 1 sheet = wb.add_sheet("秒级请求数top100") row = 0
sheet.write(row, 0, "time")
sheet.write(row, 1, "count")
row += 1
for item in request_time_count_values:
sheet.write(row, 0, item[0])
sheet.write(row, 1, item[1])
row += 1 sheet = wb.add_sheet("分钟请求数top100") row = 0
sheet.write(row, 0, "time_min")
sheet.write(row, 1, "count")
row += 1
for item in request_time_min_count_values:
sheet.write(row, 0, item[0]+':00'+"-"+item[0]+':59')
sheet.write(row, 1, item[1])
row += 1 sheet = wb.add_sheet("10分钟请求数top100") row = 0
sheet.write(row, 0, "time10")
sheet.write(row, 1, "count")
row += 1
for item in request_time_10min_count_values:
sheet.write(row, 0, item[0]+'0:00'+"-"+item[0]+'9:59')
sheet.write(row, 1, item[1])
row += 1 sheet = wb.add_sheet("小时级请求数") row = 0
sheet.write(row, 0, "timehour")
sheet.write(row, 1, "count")
row += 1
for item in request_time_hour_count_values:
sheet.write(row, 0, item[0]+':00:00'+"-"+item[0]+':59:59')
sheet.write(row, 1, item[1])
row += 1 wb.save("nginx_log.xls") if __name__ == '__main__':
lst, error_lst = load_log(path="D:\Desktop\\****imc.log")
analyse(lst,project='/SVC***/')
统计结果如下:
使用python解析nginx日志的更多相关文章
- python 解析nginx 日志 url
>>> import os>>> os.chdir('e:/')>>> log=open('access.log')//这两行是获取日志流> ...
- Python切割nginx日志_小组_ThinkSAAS
Python切割nginx日志_小组_ThinkSAAS Python切割nginx日志
- python解析Nginx访问日志
环境说明 python3+ pip install geoip2==2.9.0 nginx日志配置成json格式,配置如下: log_format json_log '{ "time&quo ...
- 利用python分析nginx日志
最近在学习python,写了个脚本分析nginx日志,练练手.写得比较粗糙,但基本功能可以实现. 脚本功能:查找出当天访问次数前十位的IP,并获取该IP来源,并将分析结果发送邮件到指定邮箱. 实现前两 ...
- 通过python统计nginx日志定位php网站响应慢的问题
# 公司网站反映很慢,可能是一些页面的访问方法或者页面引起,通过程序统计nginx访问日志的页面和具体的action方法访问次数以及平均响应时间可以为程序开发的同事提供参考定位具体的代码 # 默认的n ...
- Logstash使用grok插件解析Nginx日志
grok表达式的打印复制格式的完整语法是下面这样的: %{PATTERN_NAME:capture_name:data_type}data_type 目前只支持两个值:int 和 float. 在线g ...
- ELK+Redis 解析Nginx日志
一.ELK简介 Elk是指logstash,elasticsearch,kibana三件套,我们一般使用它们做日志分析. ELK工作原理图: 简单来讲ELK具体的工作流程就是客户端的logstash ...
- [日志分析]Graylog2进阶 通过正则解析Nginx日志
之前分享的 [日志分析]Graylog2采集Nginx日志 主动方式 这篇文章介绍了Graylog如何通过Graylog Collector Sidecar来采集nginx日志. 由于日志是未经处理的 ...
- Goaccess解析nginx日志备忘
参考 http://nginx.org/en/docs/http/ngx_http_log_module.html?&_ga=1.92028562.949762386.1481787781#l ...
- 使用Python 统计nginx日志前十ip访问量并以柱状图显示
脚本内容: import matplotlib.pyplot as plt # nginx_file = '10.6.11.91_access.log-2018-12-27' ip = {} #筛选n ...
随机推荐
- C++ 多态与虚拟:Class 语法语义
1.object与class:在object-oriented programming编程领域,对象(object)有更严格的定义.对象是由数据结构和用于处理该结构的过程(称为methods)组成的实 ...
- 读书笔记 为什么要有R5G6B5颜色格式
在 Windows 下,颜色的格式有很多,我好奇为什么要设计出 R5G6B5 这样的格式?通过阅读一些书和官方的文档,似乎了解了为什么,我在本文记录一下 颜色的格式上,常用的就是 16 位和 32 位 ...
- 揭露 FileSystem 引起的线上 JVM 内存溢出问题
作者:来自 vivo 互联网大数据团队-Ye Jidong 本文主要介绍了由FileSystem类引起的一次线上内存泄漏导致内存溢出的问题分析解决全过程. 内存泄漏定义(memory leak):一个 ...
- STM32 ADC使用问题
基本信息 MCU:STM32F105R8T6 库:HAL 平台:MDK 精度:12位 问题一 现象: 在测量的时候,发现采样值在 1023 ~ 1042 和 1279 ~ 1290 两个区间之间无法测 ...
- docker-compose 安装redis
一. docker 拉去最新版本的redis `docker pull redis:6.0.6` #后面可以带上tag号, 默认拉取最新版本 二. docker安装redis 执行命令: mkdir ...
- [4]自定义Lua解析器管理器-------演化脚本V0.7
[4]自定义Lua解析器管理器-------演化脚本V0.7 使用自定义委托来调用lua脚本中的多返回值函数和长参数类型的函数. 先看代码,依旧是上篇文章中所贴的脚本.新增调用两个函数testFunc ...
- 那什么是URL、URI、URN?
URI Uniform Resource Identifier 统一资源标识符 URL Uniform Resource Locator 统一资源定位符 URN Uniform Resource Na ...
- springboot 整合mail 发送邮件
springboot 整合mail 发送邮件 pom.xml <properties> <java.version>1.8</java.version> <p ...
- vue2遇到的一些错误
一.VUE中的VUEX如何调用modules里面的mutations和state ...mapMutations("workflow",['setApproverConfig' ...
- java jdbc 得到像C#里的datatable一样的表格
public ArrayList<ArrayList<String>> getDataTale2(String sql) throws SQLException { Array ...