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中__call__方法示例分析
Oct 11 Python
Python随手笔记第一篇(2)之初识列表和元组
Jan 23 Python
Python 数据结构之旋转链表
Feb 25 Python
python爬虫之urllib,伪装,超时设置,异常处理的方法
Dec 19 Python
python 利用pyttsx3文字转语音过程详解
Sep 25 Python
Python 下载及安装详细步骤
Nov 04 Python
pandas实现DataFrame显示最大行列,不省略显示实例
Dec 26 Python
Python Opencv 通过轨迹(跟踪)栏实现更改整张图像的背景颜色
Mar 09 Python
django中related_name的用法说明
May 20 Python
python线程里哪种模块比较适合
Aug 02 Python
python 利用PyAutoGUI快速构建自动化操作脚本
May 31 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
thinkphp的CURD和查询方式介绍
2013/12/19 PHP
2个自定义的PHP in_array 函数,解决大量数据判断in_array的效率问题
2014/04/08 PHP
浅谈php函数serialize()与unserialize()的使用方法
2014/08/19 PHP
CodeIgniter配置之routes.php用法实例分析
2016/01/19 PHP
phplist及phpmailer(组合使用)通过gmail发送邮件的配置方法
2016/03/30 PHP
thinkphp5框架调用其它控制器方法 实现自定义跳转界面功能示例
2019/07/03 PHP
thinkPHP+LayUI 流加载实现功能
2019/09/27 PHP
xtree.js 代码
2007/03/13 Javascript
JQuery中each()的使用方法说明
2010/08/19 Javascript
Js 代码中,ajax请求地址后加随机数防止浏览器缓存的原因
2013/05/07 Javascript
javaScript面向对象继承方法经典实现
2013/08/20 Javascript
jQuery移动端日期(datedropper)和时间(timedropper)选择器附源码下载
2016/04/19 Javascript
Angular 4.X开发实践中的踩坑小结
2017/07/04 Javascript
深入探究angular2 UI组件之primeNG用法
2017/07/26 Javascript
使用重写url机制实现验证码换一张功能
2017/08/01 Javascript
在 Angular-cli 中使用 simple-mock 实现前端开发 API Mock 接口数据模拟功能的方法
2018/11/28 Javascript
vue.js中导出Excel表格的案例分析
2019/06/11 Javascript
使用 node.js 模仿 Apache 小部分功能
2019/07/07 Javascript
VUE路由动态加载实例代码讲解
2019/08/26 Javascript
解决vue初始化项目时,一直卡在Project description上的问题
2019/10/31 Javascript
[01:48]完美圣典齐天大圣至宝宣传片
2016/12/17 DOTA
Python利用for循环打印星号三角形的案例
2020/04/12 Python
python如何进行矩阵运算
2020/06/05 Python
PyCharm vs VSCode,作为python开发者,你更倾向哪种IDE呢?
2020/08/17 Python
Django windows使用Apache实现部署流程解析
2020/10/12 Python
详解anaconda安装步骤
2020/11/23 Python
Marriott中国:万豪国际酒店查询预订
2016/09/02 全球购物
联谊活动策划书
2014/01/26 职场文书
《地震中的父与子》教学反思
2014/04/10 职场文书
销售内勤岗位职责范本
2015/04/13 职场文书
学校通报表扬范文
2015/05/04 职场文书
2015年音乐教师个人工作总结
2015/05/20 职场文书
竞聘开场白方式有哪些?
2019/08/28 职场文书
phpQuery解析HTML乱码问题(补充官网未列出的乱码解决方案)
2021/04/01 PHP
pycharm 如何查看某一函数源码的快捷键
2021/05/12 Python
利用Python实现翻译HTML中的文本字符串
2022/06/21 Python