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实现带声音的摩斯码翻译实现方法
May 20 Python
Flask模板引擎之Jinja2语法介绍
Jun 26 Python
numpy数组广播的机制
Jul 12 Python
django foreignkey(外键)的实现
Jul 29 Python
python实现通过flask和前端进行数据收发
Aug 22 Python
python实现的config文件读写功能示例
Sep 24 Python
django框架forms组件用法实例详解
Dec 10 Python
基于Tensorflow高阶读写教程
Feb 10 Python
python实现录屏功能(亲测好用)
Mar 02 Python
详解anaconda安装步骤
Nov 23 Python
Python解析m3u8拼接下载mp4视频文件的示例代码
Mar 03 Python
python生成随机数、随机字符、随机字符串
Apr 06 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+MySQL之Insert Into数据插入用法分析
2015/09/27 PHP
Joomla使用Apache重写模式的方法
2016/05/04 PHP
Yii 2.0实现联表查询加搜索分页的方法示例
2017/08/02 PHP
phpstorm 配置xdebug的示例代码
2019/03/31 PHP
两个SUBMIT按钮,如何区分处理
2006/08/22 Javascript
再谈ie和firefox下的document.all属性
2009/10/21 Javascript
jquery validation插件表单验证的一个例子
2010/03/03 Javascript
JS实现self的resend
2010/07/22 Javascript
基于JQuery的asp.net树实现代码
2010/11/30 Javascript
js函数调用常用方法详解
2012/12/03 Javascript
jquery实现Slide Out Navigation滑出式菜单效果代码
2015/09/07 Javascript
JS JSOP跨域请求实例详解
2016/07/04 Javascript
javascript 分号总结及详细介绍
2016/09/24 Javascript
JS实现的A*寻路算法详解
2018/12/14 Javascript
vue.js购物车添加商品组件的方法
2019/09/17 Javascript
JS求解两数之和算法详解
2020/04/28 Javascript
Vue实现穿梭框效果
2020/09/30 Javascript
[01:02:38]DOTA2-DPC中国联赛定级赛 LBZS vs Phoenix BO3第二场 1月10日
2021/03/11 DOTA
python根据文件大小打log日志
2014/10/09 Python
Python+Selenium自动化实现分页(pagination)处理
2017/03/31 Python
Python数据结构与算法之使用队列解决小猫钓鱼问题
2017/12/14 Python
Python多线程编程之多线程加锁操作示例
2018/09/06 Python
Python登录系统界面实现详解
2019/06/25 Python
python实现翻转棋游戏(othello)
2019/07/29 Python
python和php哪个更适合写爬虫
2020/06/22 Python
加拿大最大的书店:Indigo
2017/01/01 全球购物
为智能设备设计个性化保护套网站:caseable
2017/01/05 全球购物
英国时尚服饰电商:Boohoo
2017/10/12 全球购物
Wedgwood美国官网:英国骨瓷,精美礼品及家居装饰
2018/02/17 全球购物
英语专业学子个人的自我评价
2013/10/02 职场文书
关于热爱祖国的演讲稿
2014/05/04 职场文书
新员工辞职信范文
2015/05/12 职场文书
2015年小学语文教学工作总结
2015/05/25 职场文书
读《皮囊》有感:理解是对他人的最大的善举
2019/11/14 职场文书
python 定义函数 返回值只取其中一个的实现
2021/05/21 Python
R9700摩机记
2022/04/05 无线电