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实现问号表达式(?)的方法
Nov 27 Python
Python实现提取谷歌音乐搜索结果的方法
Jul 10 Python
把django中admin后台界面的英文修改为中文显示的方法
Jul 26 Python
django echarts饼图数据动态加载的实例
Aug 12 Python
pandas 缺失值与空值处理的实现方法
Oct 12 Python
python中bytes和str类型的区别
Oct 21 Python
在Python中等距取出一个数组其中n个数的实现方式
Nov 27 Python
如何更改 pandas dataframe 中两列的位置
Dec 27 Python
Matplotlib使用字符串代替变量绘制散点图的方法
Feb 17 Python
Python操作dict时避免出现KeyError的几种解决方法
Sep 20 Python
python map比for循环快在哪
Sep 21 Python
Python类方法总结讲解
Jul 26 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
DC《小丑》11项提名领跑奥斯卡 Netflix成第92届奥斯卡提名最大赢家
2020/04/09 欧美动漫
比较全面的PHP数组的使用方法小结
2010/09/23 PHP
DOM XPATH获取img src值的query
2013/09/23 PHP
php多个文件及图片上传实例详解
2014/11/10 PHP
php根据指定位置和长度获得子字符串的方法
2015/03/17 PHP
thinkphp3.x中变量的获取和过滤方法详解
2016/05/20 PHP
Smarty模板常见的简单应用分析
2016/11/15 PHP
php 生成加密公钥加密私钥实例详解
2017/06/16 PHP
PHP实现创建微信自定义菜单的方法示例
2017/07/14 PHP
php实现微信原生支付(扫码支付)功能
2018/05/30 PHP
Javascript 圆角div的实现代码
2009/10/15 Javascript
jquery原创弹出层折叠效果点击折叠弹出一个层
2014/03/12 Javascript
angular简介和其特点介绍
2015/01/29 Javascript
Bootstrap三种表单布局的使用方法
2016/06/21 Javascript
jQuery实现一个简单的轮播图
2017/02/19 Javascript
基于axios 解决跨域cookie丢失的问题
2018/09/26 Javascript
vue实现的树形结构加多选框示例
2019/02/02 Javascript
javascript canvas检测小球碰撞
2020/04/17 Javascript
Vue v-for中的 input 或 select的值发生改变时触发事件操作
2020/08/31 Javascript
[56:00]DOTA2上海特级锦标赛主赛事日 - 4 胜者组决赛Secret VS Liquid第一局
2016/03/05 DOTA
Python中.py文件打包成exe可执行文件详解
2017/03/22 Python
Python中常见的异常总结
2018/02/20 Python
在python中利用opencv简单做图片比对的方法
2019/01/24 Python
Python关于反射的实例代码分享
2020/02/20 Python
win10下python3.8的PIL库安装过程
2020/06/08 Python
CSS3 transition 实现通知消息轮播条
2020/10/14 HTML / CSS
IFCHIC台湾:欧美国际设计师品牌
2019/05/18 全球购物
美国眼镜网站:LensCrafters
2020/01/19 全球购物
煤矿安全生产责任书
2014/04/15 职场文书
三严三实心得体会范文
2014/10/13 职场文书
护士辞职信怎么写
2015/02/27 职场文书
上课讲话检讨书范文
2015/05/07 职场文书
党支部季度考核意见
2015/06/02 职场文书
小兵张嘎电影观后感
2015/06/03 职场文书
《青山不老》教学反思
2016/02/22 职场文书
nginx proxy_cache 缓存配置详解
2021/03/31 Servers