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继承和抽象类的实现方法
Jan 14 Python
Python松散正则表达式用法分析
Apr 29 Python
Python实现的归并排序算法示例
Nov 21 Python
python3利用venv配置虚拟环境及过程中的小问题小结
Aug 01 Python
使用Python批量修改文件名的代码实例
Jan 24 Python
Python多进程fork()函数详解
Feb 22 Python
Python3模拟登录操作实例分析
Mar 12 Python
详解Python用户登录接口的方法
Apr 17 Python
Python实现二叉树前序、中序、后序及层次遍历示例代码
May 18 Python
Selenium 滚动页面至元素可见的方法
Mar 18 Python
pygame面向对象的飞行小鸟实现(Flappy bird)
Apr 01 Python
利用 Python 的 Pandas和 NumPy 库来清理数据
Apr 13 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
我的论坛源代码(七)
2006/10/09 PHP
php7安装mongoDB扩展的方法分析
2017/08/02 PHP
JavaScript的parseInt 进制问题
2009/05/07 Javascript
js关于精确计算和数值格式化以及直接引js文件
2014/01/28 Javascript
通过JQuery将DIV的滚动条滚动到指定的位置方便自动定位
2014/05/05 Javascript
Javascript遍历table中的元素示例代码
2014/07/08 Javascript
浅析JS原型继承与类的继承
2016/04/07 Javascript
使用jquery提交form表单并自定义action的方法
2016/05/25 Javascript
jQuery包裹节点用法完整示例
2016/09/13 Javascript
js实现滑动到页面底部自动加载更多功能
2017/02/15 Javascript
d3.js入门教程之数据绑定详解
2017/04/28 Javascript
jQuery zTree 异步加载添加子节点重复问题
2017/11/29 jQuery
javaScript字符串工具类StringUtils详解
2017/12/08 Javascript
Vue2.5通过json文件读取数据的方法
2018/02/27 Javascript
Vue中v-show添加表达式的问题(判断是否显示)
2018/03/26 Javascript
微信小程序保持session会话的方法
2020/03/20 Javascript
javascript实现简单留言板案例
2021/02/09 Javascript
python登陆asp网站页面的实现代码
2015/01/14 Python
tensorflow 1.0用CNN进行图像分类
2018/04/15 Python
Django 视图层(view)的使用
2018/11/09 Python
对Python的zip函数妙用,旋转矩阵详解
2018/12/13 Python
解决python2 绘图title,xlabel,ylabel出现中文乱码的问题
2019/01/29 Python
Django应用程序入口WSGIHandler源码解析
2019/08/05 Python
使用Tkinter制作信息提示框
2020/02/18 Python
Python如何对XML 解析
2020/06/28 Python
经验丰富程序员才知道的8种高级Python技巧
2020/07/27 Python
python爬虫今日热榜数据到txt文件的源码
2021/02/23 Python
html5通过postMessage进行跨域通信的方法
2017/12/04 HTML / CSS
联想墨西哥官方网站:Lenovo墨西哥
2016/08/17 全球购物
餐饮主管岗位职责
2013/12/10 职场文书
会计岗位职责范本
2014/03/07 职场文书
运动会入场口号
2014/06/07 职场文书
党校毕业心得体会
2014/09/13 职场文书
个人委托书如何写
2014/09/25 职场文书
研究生学习计划书应该怎么写?
2019/09/10 职场文书
DSP接收机前端设想
2022/04/05 无线电