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通过floor函数舍弃小数位的方法
Mar 17 Python
Saltstack快速入门简单汇总
Mar 01 Python
Python网络爬虫项目:内容提取器的定义
Oct 25 Python
详解python里使用正则表达式的分组命名方式
Oct 24 Python
python用fsolve、leastsq对非线性方程组求解
Dec 15 Python
Python 使用PyQt5 完成选择文件或目录的对话框方法
Jun 27 Python
python之yield和Generator深入解析
Sep 18 Python
python 操作hive pyhs2方式
Dec 21 Python
浅谈cv2.imread()和keras.preprocessing中的image.load_img()区别
Jun 12 Python
Pandas对DataFrame单列/多列进行运算(map, apply, transform, agg)
Jun 14 Python
Python延迟绑定问题原理及解决方案
Aug 04 Python
python 实现弹球游戏的示例代码
Nov 17 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
php的sprintf函数的用法 控制浮点数格式
2014/02/14 PHP
zf框架的registry(注册表)使用示例
2014/03/13 PHP
PHPExcel实现的读取多工作表操作示例
2020/04/14 PHP
?牟┛途W扣了一??效果出?? target=
2007/05/27 Javascript
JavaScript效率调优经验
2009/06/04 Javascript
表格单元格交错着色实现思路及代码
2013/04/01 Javascript
json数据的列循环示例
2013/09/06 Javascript
JS实用的动画弹出层效果实例
2015/05/05 Javascript
14款经典网页图片和文字特效的jQuery插件-前端开发必备
2015/08/25 Javascript
基于jQuery实现的美观星级评论打分组件代码
2015/10/30 Javascript
javascript、php关键字搜索函数的使用方法
2018/05/29 Javascript
js实现录音上传功能
2019/11/22 Javascript
JS实现TITLE悬停长久显示效果完整示例
2020/02/11 Javascript
[00:09]DOTA2全国高校联赛 精彩活动引爆全场
2018/05/30 DOTA
[00:48]食人魔魔法师至宝“金鹏之幸”全新模型和自定义特效展示
2019/12/19 DOTA
使用Python脚本将绝对url替换为相对url的教程
2015/04/24 Python
利用Python批量压缩png方法实例(支持过滤个别文件与文件夹)
2017/07/30 Python
python2和python3在处理字符串上的区别详解
2019/05/29 Python
Python numpy线性代数用法实例解析
2019/11/15 Python
Django多进程滚动日志问题解决方案
2019/12/17 Python
django admin后管定制-显示字段的实例
2020/03/11 Python
利用CSS3的border-radius绘制太极及爱心图案示例
2016/05/17 HTML / CSS
详解css position 5种不同的值的用法
2019/07/30 HTML / CSS
x-ua-compatible content=”IE=7, IE=9″意思理解
2013/07/22 HTML / CSS
html5给汉字加拼音加进度条的实现代码
2020/04/07 HTML / CSS
客服部工作职责范本
2014/02/14 职场文书
英文求职信写作小建议
2014/02/16 职场文书
校运动会广播稿300字
2014/10/07 职场文书
以权谋私检举信范文
2015/03/02 职场文书
刑事附带民事代理词
2015/05/25 职场文书
仰望星空观后感
2015/06/10 职场文书
2016年端午节校园广播稿
2015/12/18 职场文书
《确定位置》教学反思
2016/02/18 职场文书
3招让你摆脱即兴讲话冷场尴尬
2019/08/08 职场文书
500字作文之关于爸爸
2019/11/14 职场文书