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 22 Python
python在linux系统下获取系统内存使用情况的方法
May 11 Python
python爬取拉勾网职位数据的方法
Jan 24 Python
使用Python从零开始撸一个区块链
Mar 14 Python
Python爬虫包BeautifulSoup异常处理(二)
Jun 17 Python
在python中实现将一张图片剪切成四份的方法
Dec 05 Python
python多任务及返回值的处理方法
Jan 22 Python
Django REST framework 分页的实现代码
Jun 19 Python
使用OpenCV实现仿射变换—旋转功能
Aug 29 Python
PyTorch 普通卷积和空洞卷积实例
Jan 07 Python
Pymysql实现往表中插入数据过程解析
Jun 02 Python
Python flask框架如何显示图像到web页面
Jun 03 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默认安装产生系统漏洞
2006/10/09 PHP
Discuz! 5.0.0论坛程序中加入一段js代码,让会员点击下载附件前自动弹出提示窗口
2007/04/18 PHP
PHP5常用函数列表(分享)
2013/06/07 PHP
利用php_imagick实现复古效果的方法
2016/10/18 PHP
JavaScript中的object转换函数toString()与valueOf()介绍
2014/12/31 Javascript
jQuery绑定事件的几种实现方式
2016/05/09 Javascript
AngularJS表达式讲解及示例代码
2016/08/16 Javascript
Canvas 制作动态进度加载水球详解及实例代码
2016/12/09 Javascript
JavaScript实现父子dom同时绑定两个点击事件,一个用捕获,一个用冒泡时执行顺序的方法
2017/03/30 Javascript
nodejs中密码加密处理操作详解
2018/03/20 NodeJs
在React项目中使用Eslint代码检查工具及常见问题
2018/10/10 Javascript
移动端底部导航固定配合vue-router实现组件切换功能
2019/06/13 Javascript
Kettle中使用JavaScrip调用jar包对文件内容进行MD5加密的操作方法
2020/09/04 Javascript
用Python计算三角函数之acos()方法的使用
2015/05/15 Python
python从网络读取图片并直接进行处理的方法
2015/05/22 Python
Python 常用string函数详解
2016/05/30 Python
Python编程产生非均匀随机数的几种方法代码分享
2017/12/13 Python
tensorflow入门之训练简单的神经网络方法
2018/02/26 Python
Python使用wget实现下载网络文件功能示例
2018/05/31 Python
pandas DataFrame实现几列数据合并成为新的一列方法
2018/06/08 Python
解决使用pycharm提交代码时冲突之后文件丢失找回的方法
2018/08/05 Python
使用Python自动化破解自定义字体混淆信息的方法实例
2019/02/13 Python
numpy中的ndarray方法和属性详解
2019/05/27 Python
python2.7实现复制大量文件及文件夹资料
2019/08/31 Python
如何修复使用 Python ORM 工具 SQLAlchemy 时的常见陷阱
2019/11/19 Python
使用Rasterio读取栅格数据的实例讲解
2019/11/26 Python
Django URL参数Template反向解析
2020/11/24 Python
英国票务网站:Ticketmaster英国
2018/08/27 全球购物
光电信息专业应届生求职信
2013/10/07 职场文书
运动会邀请函范文
2014/02/06 职场文书
一句话工作感言
2014/03/01 职场文书
信访工作经验交流材料
2014/05/23 职场文书
护士节演讲稿开场白
2014/08/25 职场文书
求职自荐信范文(优秀篇)
2015/03/27 职场文书
2015年公务员转正工作总结
2015/04/24 职场文书
日本十大血腥动漫,那些被禁播的动漫盘点
2022/03/21 日漫