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基础教程之字典操作详解
Mar 25 Python
python类装饰器用法实例
Jun 04 Python
Python引用类型和值类型的区别与使用解析
Oct 17 Python
学习Python selenium自动化网页抓取器
Jan 20 Python
Python字典及字典基本操作方法详解
Jan 30 Python
PyTorch上搭建简单神经网络实现回归和分类的示例
Apr 28 Python
python配置文件写入过程详解
Oct 19 Python
python 画函数曲线示例
Dec 04 Python
使用Tensorboard工具查看Loss损失率
Feb 15 Python
python实现手势识别的示例(入门)
Apr 15 Python
如何基于matlab相机标定导出xml文件
Nov 02 Python
python 三种方法提取pdf中的图片
Feb 07 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
摩卡咖啡
2021/03/03 咖啡文化
php cli 方式 在crotab中运行解决
2010/02/08 PHP
php的declare控制符和ticks教程(附示例)
2014/03/21 PHP
你应该知道PHP浮点数知识
2015/05/13 PHP
PHP使用逆波兰式计算工资的方法
2015/07/29 PHP
CodeIgniter 完美解决URL含有中文字符串
2016/05/13 PHP
如何在Web页面上直接打开、编辑、创建Office文档
2007/03/12 Javascript
点击文章内容处弹出页面代码
2009/10/01 Javascript
jquery ajax 同步异步的执行示例代码
2010/06/23 Javascript
jquery操作select option 的代码小结
2011/06/21 Javascript
JavaScript 上万关键字瞬间匹配实现代码
2013/07/07 Javascript
js快速排序的实现代码
2013/12/08 Javascript
javascript弹出窗口实现代码
2015/11/12 Javascript
探寻JavaScript中this指针指向
2016/04/23 Javascript
jQuery替换节点用法示例(使用replaceWith方法)
2016/09/08 Javascript
基于javascript实现按圆形排列DIV元素(一)
2016/12/02 Javascript
使用ionic切换页面卡顿的解决方法
2016/12/16 Javascript
AngularJS双向数据绑定原理之$watch、$apply和$digest的应用
2018/01/30 Javascript
浅谈webpack devtool里的7种SourceMap模式
2019/01/14 Javascript
node.js中 mysql 增删改查操作及async,await处理实例分析
2020/02/11 Javascript
js实现简单的点名器随机色实例代码
2020/09/20 Javascript
小程序中手机号识别的示例
2020/12/14 Javascript
[02:41]DOTA2英雄基础教程 亚巴顿
2014/01/02 DOTA
python3序列化与反序列化用法实例
2015/05/26 Python
Python内建模块struct实例详解
2018/02/02 Python
Python pandas.DataFrame 找出有空值的行
2019/09/09 Python
使用Python操作ArangoDB的方法步骤
2020/02/02 Python
给Django Admin添加验证码和多次登录尝试限制的实现
2020/07/26 Python
高山背包:High Sierra
2017/11/23 全球购物
Notino法国:购买香水和化妆品
2019/04/15 全球购物
车间班长岗位职责
2013/11/30 职场文书
门卫班长岗位职责
2013/12/15 职场文书
高分子材料与工程专业个人求职信
2013/12/15 职场文书
模具设计与制造专业自荐书
2014/07/01 职场文书
新郎接新娘保证书
2015/05/08 职场文书
Win10多屏显示如何设置?Win10电脑多屏显示设置操作方法
2022/07/07 数码科技