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中asyncore的用法实例
Sep 29 Python
Python中生成器和yield语句的用法详解
Apr 17 Python
WINDOWS 同时安装 python2 python3 后 pip 错误的解决方法
Mar 16 Python
python处理Excel xlrd的简单使用
Sep 12 Python
Python3简单实例计算同花的概率代码
Dec 06 Python
Python使用numpy产生正态分布随机数的向量或矩阵操作示例
Aug 22 Python
python 绘制拟合曲线并加指定点标识的实现
Jul 10 Python
手把手教你pycharm专业版安装破解教程(linux版)
Sep 26 Python
提升python处理速度原理及方法实例
Dec 25 Python
python3实现往mysql中插入datetime类型的数据
Mar 02 Python
Python3.7下安装pyqt5的方法步骤(图文)
May 12 Python
在keras下实现多个模型的融合方式
May 23 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 应用程序的安全 -- 不能违反的四条安全规则
2006/11/26 PHP
CI框架中集成CKEditor编辑器的教程
2014/06/09 PHP
PHP使用array_fill定义多维数组的方法
2015/03/18 PHP
PHP实现Google plus的好友拖拽分组效果
2016/10/21 PHP
php魔法函数与魔法常量使用介绍
2017/07/23 PHP
php使用curl伪造浏览器访问操作示例
2019/09/30 PHP
PHP 裁剪图片
2021/03/09 PHP
asp.net HttpHandler实现图片防盗链
2009/11/09 Javascript
javascript下高性能字符串连接StringBuffer类
2010/08/16 Javascript
JavaScript 操作键盘的Enter事件(键盘任何事件),兼容多浏览器
2010/10/11 Javascript
从数据结构的角度分析 for each in 比 for in 快的多
2013/07/07 Javascript
JavaScript把数组作为堆栈使用的方法
2015/03/20 Javascript
JS简单循环遍历json数组的方法
2016/04/22 Javascript
JavaScript开发Chrome浏览器扩展程序UI的教程
2016/05/16 Javascript
js上传图片预览的实现方法
2017/05/09 Javascript
element UI upload组件上传附件格式限制方法
2018/09/04 Javascript
JSON.stringify()方法讲解
2019/01/31 Javascript
通过js给网页加上水印背景实例
2019/06/17 Javascript
node.js使用http模块创建服务器和客户端完整示例
2020/02/10 Javascript
Python使用设计模式中的责任链模式与迭代器模式的示例
2016/03/02 Python
python中PIL安装简单教程
2016/04/21 Python
在自动化中用python实现键盘操作的方法详解
2019/07/19 Python
翻转数列python实现,求前n项和,并能输出整个数列的案例
2020/05/03 Python
Pycharm导入anaconda环境的教程图解
2020/07/31 Python
Django中的DateTimeField和DateField实现
2021/02/24 Python
Autopep8的使用(python自动编排工具)
2021/03/02 Python
移动端Html5中百度地图的点击事件
2019/01/31 HTML / CSS
英国工艺品购物网站:Minerva Crafts
2018/01/29 全球购物
金融专业推荐信
2013/11/14 职场文书
工作分析计划书
2014/04/30 职场文书
2014年园林绿化工作总结
2014/12/11 职场文书
关于军训的感想
2015/08/07 职场文书
Python实现智慧校园自动评教全新版
2021/06/18 Python
JavaScript中的宏任务和微任务详情
2021/11/27 Javascript
python工具dtreeviz决策树可视化和模型可解释性
2022/03/03 Python
Java异常体系非正常停止和分类
2022/06/14 Java/Android