使用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 ...
随机推荐
- 移动云正式发布基于龙蜥 Anolis OS 的 BC-Linux V8.2 通用版操作系统
简介: 2020年12月CentOS项目组宣布CentOS 8将于2021年12月31日结束支持,这意味着从2022年开始,使用CentOS 8的用户,将无法得到来自官方的新硬件支持.bug修复和安全 ...
- dotnet win32 使用 WIC 获取系统编解码器
在 Windows 系统上,有一个很重要的概念是 Windows Imaging Component 也就是 WIC 层,这是专门用来处理多媒体相关的系统组件,特别是用来处理图片相关,包括编码和解码和 ...
- vue3 快速入门系列 —— 状态管理 pinia
其他章节请看: vue3 快速入门 系列 pinia vue3 状态管理这里选择 pinia. 虽然 vuex4 已支持 Vue 3 的 Composition API,但是 vue3 官网推荐新的应 ...
- SQL 多表关联更新语句
A表WHERE条件来自B表查询结果集 UPDATE a SET a.is_sync = 0 FROM A表 a LEFT JOIN B表 b ON a.order_id = b.order_id AN ...
- Java中使用try代码块自动关闭各种流(IO流……)
推荐写在 try 的括号中 /** 方式一.方式二是等价的 * <li>推荐使用方式一</li> * @since 2023/5/18 0018 * @author CC ** ...
- 题解:ssy的队列
题目链接 题目描述 SSY是班集体育委员,总喜欢把班级同学排成各种奇怪的队形,现在班级里有 \(N\) 个身高互不相同的同学,请你求出这 \(N\) 个人的所有排列中任意两个相邻同学的身高差均不为给定 ...
- Splashtop Business Access 的常见问题解答
Splashtop Business Access 是一款优秀的远程访问软件,使个人和团队可以快速.简单.安全地访问远程计算机.Splashtop Business Access 是 LogMeIn ...
- 4G EPS 第四代移动通信系统
目录 文章目录 目录 4G EPS 4G EPS 4G(the 4th generation mobile communication technology,第四代移动通信技术)提供了 3G 不能满足 ...
- redis三主三从集群快速搭建
redis集群快速搭建 1 本文以redis6.2.6版本为例,快速搭建一套三主三从的redis集群,已经提前将脚本写好,只需要在节点上面进行执行即可安装 #!/bin/bash install_re ...
- sass变量的详细使用
sass变量同javascript变量,可以用来存储一些信息,并且可以重复使用. 先来对比一下css中的变量 同css变量对比 CSS 变量是由 CSS 作者定义的,它包含的值可以在整个文档或指定的范 ...