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 03 Python
在Python中操作时间之tzset()方法的使用教程
May 22 Python
浅谈Python使用Bottle来提供一个简单的web服务
Dec 27 Python
Python学习笔记之open()函数打开文件路径报错问题
Apr 28 Python
python 列表降维的实例讲解
Jun 28 Python
Python 判断图像是否读取成功的方法
Jan 26 Python
基于Python安装pyecharts所遇的问题及解决方法
Aug 12 Python
Python 使用 docopt 解析json参数文件过程讲解
Aug 13 Python
Django serializer优化类视图的实现示例
Jul 16 Python
python中如何打包用户自定义模块
Sep 23 Python
python如何调用百度识图api
Sep 29 Python
健身房被搭讪?用python写了个小米计时器助人为乐
Jun 08 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实现的Cookies操作类实例
2014/09/24 PHP
Laravel 6 将新增为指定队列任务设置中间件的功能
2019/08/06 PHP
jquery ready函数源代码研究
2009/12/06 Javascript
jQuery 选择器理解
2010/03/16 Javascript
js实现上传图片之上传前预览图片
2013/03/25 Javascript
JQuery判断HTML元素是否存在的两种解决方法
2013/12/26 Javascript
JS实现完全语义化的网页选项卡效果代码
2015/09/15 Javascript
基于 Vue 实现一个酷炫的 menu插件
2017/11/14 Javascript
JavaScript设计模式之模板方法模式原理与用法示例
2018/08/07 Javascript
NodeJS使用Range请求实现下载功能的方法示例
2018/10/12 NodeJs
vue 属性拦截实现双向绑定的实例代码
2018/10/24 Javascript
vue实现鼠标移过出现下拉二级菜单功能
2019/12/12 Javascript
vue Element左侧无限级菜单实现
2020/06/10 Javascript
[01:51]2014DOTA2国际邀请赛 这个赛场没有失败者VGTi5再见
2014/07/23 DOTA
[51:05]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第一局
2016/03/06 DOTA
python使用装饰器和线程限制函数执行时间的方法
2015/04/18 Python
Python import用法以及与from...import的区别
2015/05/28 Python
Python3实现Web网页图片下载
2016/01/28 Python
Python中文件I/O高效操作处理的技巧分享
2017/02/04 Python
python skimage 连通性区域检测方法
2018/06/21 Python
python 随机打乱 图片和对应的标签方法
2018/12/14 Python
Pandas的read_csv函数参数分析详解
2019/07/02 Python
ORM Django 终端打印 SQL 语句实现解析
2019/08/09 Python
在jupyter notebook中调用.ipynb文件方式
2020/04/14 Python
python获取系统内存占用信息的实例方法
2020/07/17 Python
详解Python中@staticmethod和@classmethod区别及使用示例代码
2020/12/14 Python
canvas进阶之贝塞尔公式推导与物体跟随复杂曲线的轨迹运动
2018/01/10 HTML / CSS
高中生的学习总结自我鉴定
2013/10/26 职场文书
财务管理个人自荐书范文
2013/11/24 职场文书
学校文明单位申报材料
2014/05/06 职场文书
本科生就业推荐信
2014/05/19 职场文书
工商局所长四风自我剖析及整改措施
2014/10/26 职场文书
出国签证在职证明范本
2014/11/24 职场文书
2015年会计个人工作总结
2015/04/02 职场文书
开业庆典嘉宾致辞
2015/08/01 职场文书
Python深度学习之实现卷积神经网络
2021/06/05 Python