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实现在每个独立进程中运行一个函数的方法
Apr 23 Python
用Python解决计数原理问题的方法
Aug 04 Python
详解python eval函数的妙用
Nov 16 Python
Python实现动态图解析、合成与倒放
Jan 18 Python
基于Python Numpy的数组array和矩阵matrix详解
Apr 04 Python
python实现对文件中图片生成带标签的txt文件方法
Apr 27 Python
PowerBI和Python关于数据分析的对比
Jul 11 Python
Python 3.6 中使用pdfminer解析pdf文件的实现
Sep 25 Python
python二分法查找算法实现方法【递归与非递归】
Dec 06 Python
python 实现将小图片放到另一个较大的白色或黑色背景图片中
Dec 12 Python
Tensorflow tf.nn.atrous_conv2d如何实现空洞卷积的
Apr 20 Python
解析Tensorflow之MNIST的使用
Jun 30 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中比较两个字符串找出第一个不同字符位置例子
2014/04/08 PHP
Session的工作机制详解和安全性问题(PHP实例讲解)
2014/04/10 PHP
详解PHP匿名函数与注意事项
2016/03/29 PHP
js实现的网站首页随机公告随机公告
2007/03/14 Javascript
深入理解JavaScript系列(6):S.O.L.I.D五大原则之单一职责SRP
2012/01/15 Javascript
JS+JSP checkBox 全选具体实现
2014/01/02 Javascript
关于jQuery中的each方法(jQuery到底干了什么)
2014/03/05 Javascript
jQuery中last()方法用法实例
2015/01/06 Javascript
json与jsonp知识小结(推荐)
2016/08/16 Javascript
深入浅析jQuery对象$.html
2016/08/22 Javascript
10分钟掌握XML、JSON及其解析
2020/12/06 Javascript
Bootstrap 下拉多选框插件Bootstrap Multiselect
2017/01/22 Javascript
微信小程序 详解页面跳转与返回并回传数据
2017/02/13 Javascript
微信小程序自定义导航隐藏和显示功能
2017/06/13 Javascript
Javascript es7中比较实用的两个方法示例
2017/07/21 Javascript
JS实现的JSON数组去重算法示例
2018/04/11 Javascript
微信小程序:报错(in promise) MiniProgramError
2020/10/30 Javascript
[54:26]完美世界DOTA2联赛PWL S3 Forest vs Rebirth 第一场 12.10
2020/12/12 DOTA
python中的编码知识整理汇总
2016/01/26 Python
Flask框架的学习指南之制作简单blog系统
2016/11/20 Python
Python中创建字典的几种方法总结(推荐)
2017/04/27 Python
python requests post多层字典的方法
2018/12/27 Python
python命令行参数用法实例分析
2019/06/25 Python
Django中create和save方法的不同
2019/08/13 Python
Python时间差中seconds和total_seconds的区别详解
2019/12/26 Python
利用CSS3实现动态的二级三级菜单效果实例源码
2017/01/04 HTML / CSS
法国美发器材和产品购物网站:Beauty Coiffure
2016/12/05 全球购物
工厂总经理岗位职责
2014/02/07 职场文书
材料加工工程求职信
2014/02/19 职场文书
诉讼代理人授权委托书
2014/04/08 职场文书
大学三年计划书范文
2014/04/30 职场文书
幼儿园社区活动总结
2014/07/07 职场文书
初中差生评语
2014/12/29 职场文书
酒店财务经理岗位职责
2015/04/08 职场文书
酒店员工手册范本
2015/05/14 职场文书
教务处教学工作总结
2015/08/10 职场文书