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执行子进程实现进程间通信的方法
Jun 02 Python
Python max内置函数详细介绍
Nov 17 Python
Python判断一个三位数是否为水仙花数的示例
Nov 13 Python
python得到一个excel的全部sheet标签值方法
Dec 10 Python
对python产生随机的二维数组实例详解
Dec 13 Python
Python离线安装PIL 模块的方法
Jan 08 Python
django获取from表单multiple-select的value和id的方法
Jul 19 Python
pytorch 更改预训练模型网络结构的方法
Aug 19 Python
Python中无限循环需要什么条件
May 27 Python
Pandas读取csv时如何设置列名
Jun 02 Python
Python多线程threading创建及使用方法解析
Jun 17 Python
Python 日期与时间转换的方法
Aug 01 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中count获取多维数组长度的方法
2014/11/03 PHP
ThinkPHP采用原生query实现关联查询left join实例
2014/12/02 PHP
简单介绍PHP的责任链编程模式
2015/08/11 PHP
PHP实现关键字搜索后描红功能示例
2019/07/03 PHP
js left,right,mid函数
2008/06/10 Javascript
poshytip 基于jquery的 插件 主要用于显示微博人的图像和鼠标提示等
2012/10/12 Javascript
jQuery实现的原图对比窗帘效果
2014/06/15 Javascript
9款2014最热门jQuery实用特效推荐
2014/12/07 Javascript
JS实现图片放大镜效果的方法
2015/02/27 Javascript
简介JavaScript中Math.cos()余弦方法的使用
2015/06/15 Javascript
javascript验证邮件地址和MX记录的方法
2015/06/16 Javascript
JavaScript 七大技巧(二)
2015/12/13 Javascript
Bootstrap框架下下拉框select搜索功能
2020/03/26 Javascript
使用SVG基本操作API的实例讲解
2017/09/14 Javascript
js实现文件上传功能 后台使用MultipartFile
2018/09/08 Javascript
详解vue中移动端自适应方案
2019/05/05 Javascript
Vue.js组件通信之自定义事件详解
2019/10/19 Javascript
python新手经常遇到的17个错误分析
2014/07/30 Python
Python中使用glob和rmtree删除目录子目录及所有文件的例子
2014/11/21 Python
详解Python发送email的三种方式
2018/10/18 Python
Python-while 计算100以内奇数和的方法
2019/06/11 Python
pytorch打印网络结构的实例
2019/08/19 Python
python实现飞机大战小游戏
2019/11/08 Python
使用TensorFlow直接获取处理MNIST数据方式
2020/02/10 Python
python函数中将变量名转换成字符串实例
2020/05/11 Python
Django ORM判断查询结果是否为空,判断django中的orm为空实例
2020/07/09 Python
python爬虫线程池案例详解(梨视频短视频爬取)
2021/02/20 Python
HTML5 Canvas标签使用收录
2009/07/07 HTML / CSS
《宋庆龄故居的樟树》教学反思
2014/04/07 职场文书
《小动物过冬》教学反思
2014/04/17 职场文书
个人担保书范文
2014/05/20 职场文书
党员教师群众路线对照检查材料思想汇报
2014/09/29 职场文书
导师鉴定意见
2015/06/05 职场文书
Python中tkinter的用户登录管理的实现
2021/04/22 Python
Python音乐爬虫完美绕过反爬
2021/08/30 Python
MYSQL 运算符总结
2021/11/11 MySQL