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 list使用示例 list中找连续的数字
Jan 27 Python
用python实现面向对像的ASP程序实例
Nov 10 Python
python merge、concat合并数据集的实例讲解
Apr 12 Python
Python中的二维数组实例(list与numpy.array)
Apr 13 Python
Python之用户输入的实例
Jun 22 Python
Python实现的简单排列组合算法示例
Jul 04 Python
浅谈django rest jwt vue 跨域问题
Oct 26 Python
详解Django模版中加载静态文件配置方法
Jul 21 Python
详解程序意外中断自动重启shell脚本(以Python为例)
Jul 26 Python
python实现图片压缩代码实例
Aug 12 Python
python中struct模块之字节型数据的处理方法
Aug 27 Python
Python实现对齐打印 format函数的用法
Apr 28 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
跨浏览器PHP下载文件名中的中文乱码问题解决方法
2015/03/05 PHP
Symfony生成二维码的方法
2016/02/04 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
2017/08/31 PHP
RSA实现JS前端加密与PHP后端解密功能示例
2019/08/05 PHP
javascript prototype 原型链
2009/03/12 Javascript
js类型检查实现代码
2010/10/29 Javascript
jquery 获取标签名(tagName)示例代码
2013/07/11 Javascript
使用javascript实现简单的选项卡切换
2015/01/09 Javascript
js实现的捐赠管理完整实例
2015/01/20 Javascript
理解JavaScript的变量的入门教程
2015/07/07 Javascript
基于AngularJS实现页面滚动到底自动加载数据的功能
2015/10/16 Javascript
[原创]Javascript 实现广告后加载 可加载百度谷歌联盟广告
2016/05/11 Javascript
jQuery异步提交表单的两种方式
2016/09/13 Javascript
原生js实现网页顶部自动下拉/收缩广告效果
2017/01/20 Javascript
详解Nodejs内存治理
2018/05/13 NodeJs
微信小程序之多列表的显示和隐藏功能【附源码】
2018/08/06 Javascript
layui加载表格,绑定新增,编辑删除,查看按钮事件的例子
2019/09/06 Javascript
JS使用H5实现图片预览功能
2019/09/30 Javascript
vue.js实现只能输入数字的输入框
2019/10/19 Javascript
微信小程序获取当前位置和城市名
2019/11/13 Javascript
JavaScript设计模式之策略模式实现原理详解
2020/05/29 Javascript
微信小程序之高德地图多点路线规划过程示例详解
2021/01/18 Javascript
如何准确判断请求是搜索引擎爬虫(蜘蛛)发出的请求
2015/10/13 Python
详解python时间模块中的datetime模块
2016/01/13 Python
python如何派生内置不可变类型并修改实例化行为
2018/03/21 Python
Python pip替换为阿里源的方法步骤
2019/07/02 Python
Pandas0.25来了千万别错过这10大好用的新功能
2019/08/07 Python
python自动保存百度盘资源到百度盘中的实例代码
2019/08/26 Python
TensorFlow tensor的拼接实例
2020/01/19 Python
Ubuntu 20.04安装Pycharm2020.2及锁定到任务栏的问题(小白级操作)
2020/10/29 Python
html5中canvas学习笔记2-判断浏览器是否支持canvas
2013/01/06 HTML / CSS
实例教程 利用html5和css3打造一款创意404页面
2014/10/20 HTML / CSS
如何掌握自荐信格式呢
2013/11/19 职场文书
2015年党员个人剖析材料
2014/12/18 职场文书
简历自荐信范文
2015/03/09 职场文书
2016新年致辞
2015/08/01 职场文书