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实现绘制树枝简单示例
Jul 24 Python
python xml解析实例详解
Nov 14 Python
python中利用Future对象回调别的函数示例代码
Sep 07 Python
详解appium+python 启动一个app步骤
Dec 20 Python
Python切片操作实例分析
Mar 16 Python
对Python+opencv将图片生成视频的实例详解
Jan 08 Python
python join方法使用详解
Jul 30 Python
解析python的局部变量和全局变量
Aug 15 Python
GDAL 矢量属性数据修改方式(python)
Mar 10 Python
Python Selenium实现无可视化界面过程解析
Aug 25 Python
pytorch 如何把图像数据集进行划分成train,test和val
May 31 Python
Python编程super应用场景及示例解析
Oct 05 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 变量的定义方法
2010/01/26 PHP
ThinkPHP模板引擎之导入资源文件方法详解
2014/06/18 PHP
PHP图片处理之使用imagecopyresampled函数实现图片缩放例子
2014/11/19 PHP
PHP实现操作redis的封装类完整实例
2015/11/14 PHP
Zend Framework教程之Loader以及PluginLoader用法详解
2016/03/09 PHP
JS 调用微信扫一扫功能
2016/12/22 Javascript
jQuery实现文字超过1行、2行或规定的行数时自动加省略号的方法
2018/03/28 jQuery
Angular4.x通过路由守卫进行路由重定向实现根据条件跳转到相应的页面(推荐)
2018/05/10 Javascript
Vue项目查看当前使用的elementUI版本的方法
2018/09/27 Javascript
JS中数据结构与算法---排序算法(Sort Algorithm)实例详解
2019/06/17 Javascript
JavaScript canvas实现跟随鼠标事件
2020/02/10 Javascript
使用Vue 自定义文件选择器组件的实例代码
2020/03/04 Javascript
vue 解决setTimeOut和setInterval函数无效报错的问题
2020/07/30 Javascript
vue修改Element的el-table样式的4种方法
2020/09/17 Javascript
记一次vue跨域的解决
2020/10/21 Javascript
vue项目中openlayers绘制行政区划
2020/12/24 Vue.js
[01:08]2014DOTA2展望TI 剑指西雅图LGD战队专访
2014/06/30 DOTA
Python3处理HTTP请求的实例
2018/05/10 Python
python中字符串的操作方法大全
2018/06/03 Python
详解Python 数据库的Connection、Cursor两大对象
2018/06/25 Python
对python 数据处理中的LabelEncoder 和 OneHotEncoder详解
2018/07/11 Python
python得到一个excel的全部sheet标签值方法
2018/12/10 Python
Python修改列表值问题解决方案
2020/03/06 Python
HTML5制作酷炫音频播放器插件图文教程
2014/12/30 HTML / CSS
阿波罗盒子:Apollo Box
2017/08/14 全球购物
英国首屈一指的票务公司:See Tickets
2019/05/11 全球购物
电厂职工自我鉴定
2014/02/20 职场文书
法定代表人授权委托书
2014/04/04 职场文书
金融专业毕业生自荐信
2014/06/26 职场文书
大二学年个人总结
2015/03/03 职场文书
总经理司机岗位职责
2015/04/10 职场文书
开场白怎么写
2015/06/01 职场文书
Prometheus 监控MySQL使用grafana展示
2021/08/30 MySQL
Python实现批量自动整理文件
2022/03/16 Python
利用JuiceFS使MySQL 备份验证性能提升 10 倍
2022/03/17 MySQL
深入理解MySQL中MVCC与BufferPool缓存机制
2022/05/25 MySQL