python+pandas分析nginx日志的实例


Posted in Python onApril 28, 2018

需求

通过分析nginx访问日志,获取每个接口响应时间最大值、最小值、平均值及访问量。

实现原理

将nginx日志uriuriupstream_response_time字段存放到pandas的dataframe中,然后通过分组、数据统计功能实现。

实现

1.准备工作

#创建日志目录,用于存放日志
mkdir /home/test/python/log/log
#创建文件,用于存放从nginx日志中提取的$uri $upstream_response_time字段
touch /home/test/python/log/log.txt
#安装相关模块
conda create -n science numpy scipy matplotlib pandas
#安装生成execl表格的相关模块
pip install xlwt

2.代码实现

#!/usr/local/miniconda2/envs/science/bin/python
#-*- coding: utf-8 -*-
#统计每个接口的响应时间
#请提前创建log.txt并设置logdir
import sys
import os
import pandas as pd
mulu=os.path.dirname(__file__)
#日志文件存放路径
logdir="/home/test/python/log/log"
#存放统计所需的日志相关字段
logfile_format=os.path.join(mulu,"log.txt")
print "read from logfile \n"
for eachfile in os.listdir(logdir):
 logfile=os.path.join(logdir,eachfile)
 with open(logfile, 'r') as fo:
  for line in fo:
   spline=line.split()
   #过滤字段中异常部分
   if spline[6]=="-":
    pass
   elif spline[6]=="GET":
    pass
   elif spline[-1]=="-":
    pass
   else:
    with open(logfile_format, 'a') as fw:
     fw.write(spline[6])
     fw.write('\t')
     fw.write(spline[-1])
     fw.write('\n')
print "output panda"
#将统计的字段读入到dataframe中
reader=pd.read_table(logfile_format,sep='\t',engine='python',names=["interface","reponse_time"] ,header=None,iterator=True)
loop=True
chunksize=10000000
chunks=[]
while loop:
 try:
  chunk=reader.get_chunk(chunksize)
  chunks.append(chunk)
 except StopIteration:
  loop=False
  print "Iteration is stopped."
df=pd.concat(chunks)
#df=df.set_index("interface")
#df=df.drop(["GET","-"])
df_groupd=df.groupby('interface')
df_groupd_max=df_groupd.max()
df_groupd_min= df_groupd.min()
df_groupd_mean= df_groupd.mean()
df_groupd_size= df_groupd.size()
#print df_groupd_max
#print df_groupd_min
#print df_groupd_mean
df_ana=pd.concat([df_groupd_max,df_groupd_min,df_groupd_mean,df_groupd_size],axis=1,keys=["max","min","average","count"])
print "output excel"
df_ana.to_excel("test.xls")

3.打印的表格如下:

python+pandas分析nginx日志的实例

要点

1. 日志文件比较大的情况下读取不要用readlines()、readline(),会将日志全部读到内存,导致内存占满。因此在此使用for line in fo迭代的方式,基本不占内存。

2. 读取nginx日志,可以使用pd.read_table(log_file, sep=' ‘, iterator=True),但是此处我们设置的sep无法正常匹配分割,因此先将nginx用split分割,然后再存入pandas。

3. Pandas提供了IO工具可以将大文件分块读取,使用不同分块大小来读取再调用 pandas.concat 连接DataFrame

以上这篇python+pandas分析nginx日志的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
简单介绍Python的轻便web框架Bottle
Apr 08 Python
Python中使用partial改变方法默认参数实例
Apr 28 Python
用python写的一个wordpress的采集程序
Feb 27 Python
Python方法的延迟加载的示例代码
Dec 18 Python
详解Python3的TFTP文件传输
Jun 26 Python
解决python通过cx_Oracle模块连接Oracle乱码的问题
Oct 18 Python
Python判断是否json是否包含一个key的方法
Dec 31 Python
python利用itertools生成密码字典并多线程撞库破解rar密码
Aug 12 Python
Python+OpenCV+图片旋转并用原底色填充新四角的例子
Dec 12 Python
Python接口测试get请求过程详解
Feb 28 Python
聊聊pytorch测试的时候为何要加上model.eval()
May 23 Python
Python 统计序列中元素的出现频度
Apr 26 Python
详谈套接字中SO_REUSEPORT和SO_REUSEADDR的区别
Apr 28 #Python
python实现关键词提取的示例讲解
Apr 28 #Python
python实现扫描日志关键字的示例
Apr 28 #Python
python socket网络编程之粘包问题详解
Apr 28 #Python
在Windows中设置Python环境变量的实例讲解
Apr 28 #Python
PyTorch快速搭建神经网络及其保存提取方法详解
Apr 28 #Python
对Python中type打开文件的方式介绍
Apr 28 #Python
You might like
收音机玩机评测 406 篇视频合集
2020/03/11 无线电
PHP简单系统查询模块代码打包下载
2008/06/07 PHP
PHPLog php 程序调试追踪工具
2009/09/09 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
ThinkPHP 5 AJAX跨域请求头设置实现过程解析
2020/10/28 PHP
JS 建立对象的方法
2007/04/21 Javascript
jquery 查找新建元素代码
2010/07/06 Javascript
JavaScript的类型转换(字符转数字 数字转字符)
2010/08/30 Javascript
JavaScript高级程序设计 阅读笔记(四) ECMAScript中的类型转换
2012/02/27 Javascript
javascript中为某个元素指定事件的三种方式
2014/08/07 Javascript
javascript实现瀑布流自适应遇到的问题及解决方案
2015/01/28 Javascript
使用Function.apply()的参数数组化来提高 JavaScript程序性能的技巧
2015/12/23 Javascript
WordPress中鼠标悬停显示和隐藏评论及引用按钮的实现
2016/01/12 Javascript
全面了解函数声明与函数表达式、变量提升
2016/08/09 Javascript
jquery 标签 隔若干行加空白或者加虚线的方法
2016/12/07 Javascript
基于vue+ bootstrap实现图片上传图片展示功能
2017/05/17 Javascript
JS滚动到指定位置导航栏固定顶部
2017/07/03 Javascript
AngularJS service之select下拉菜单效果
2017/07/28 Javascript
ES6使用export和import实现模块化的方法
2018/09/10 Javascript
开源一个微信小程序仪表盘组件过程解析
2019/07/30 Javascript
解决layui的form里的元素进行动态生成,验证失效的问题
2019/09/14 Javascript
JavaScript动态生成表格的示例
2020/11/02 Javascript
小程序实现tab标签页
2020/11/16 Javascript
Vue中使用wangeditor富文本编辑的问题
2021/02/07 Vue.js
[01:04:30]Fnatic vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
在Python中用keys()方法返回字典键的教程
2015/05/21 Python
django表单实现下拉框的示例讲解
2018/05/29 Python
Django-xadmin+rule对象级权限的实现方式
2020/03/30 Python
详解python logging日志传输
2020/07/01 Python
Aerosoles爱柔仕官网:美国舒软女鞋品牌
2017/07/17 全球购物
运动会宣传口号
2014/06/09 职场文书
励志演讲稿大全
2014/08/21 职场文书
学习十八届四中全会精神思想汇报
2014/10/23 职场文书
后备干部推荐材料
2014/12/24 职场文书
答辩状格式范本
2015/05/22 职场文书
基于PyTorch实现一个简单的CNN图像分类器
2021/05/29 Python