欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python+pandas分析nginx日志的實例

 更新時間:2018年04月28日 15:17:24   作者:man8er  
下面小編就為大家分享一篇python+pandas分析nginx日志的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

需求

通過分析nginx訪問日志,獲取每個接口響應(yīng)時間最大值、最小值、平均值及訪問量。

實現(xiàn)原理

將nginx日志uriuriupstream_response_time字段存放到pandas的dataframe中,然后通過分組、數(shù)據(jù)統(tǒng)計功能實現(xiàn)。

實現(xiàn)

1.準(zhǔn)備工作

#創(chuàng)建日志目錄,用于存放日志
mkdir /home/test/python/log/log
#創(chuàng)建文件,用于存放從nginx日志中提取的$uri $upstream_response_time字段
touch /home/test/python/log/log.txt
#安裝相關(guān)模塊
conda create -n science numpy scipy matplotlib pandas
#安裝生成execl表格的相關(guān)模塊
pip install xlwt

2.代碼實現(xiàn)

#!/usr/local/miniconda2/envs/science/bin/python
#-*- coding: utf-8 -*-
#統(tǒng)計每個接口的響應(yīng)時間
#請?zhí)崆皠?chuàng)建log.txt并設(shè)置logdir
import sys
import os
import pandas as pd
mulu=os.path.dirname(__file__)
#日志文件存放路徑
logdir="/home/test/python/log/log"
#存放統(tǒng)計所需的日志相關(guān)字段
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"
#將統(tǒng)計的字段讀入到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.打印的表格如下:

要點

1. 日志文件比較大的情況下讀取不要用readlines()、readline(),會將日志全部讀到內(nèi)存,導(dǎo)致內(nèi)存占滿。因此在此使用for line in fo迭代的方式,基本不占內(nèi)存。

2. 讀取nginx日志,可以使用pd.read_table(log_file, sep=' ‘, iterator=True),但是此處我們設(shè)置的sep無法正常匹配分割,因此先將nginx用split分割,然后再存入pandas。

3. Pandas提供了IO工具可以將大文件分塊讀取,使用不同分塊大小來讀取再調(diào)用 pandas.concat 連接DataFrame

以上這篇python+pandas分析nginx日志的實例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 深入理解python中的淺拷貝和深拷貝

    深入理解python中的淺拷貝和深拷貝

    下面小編就為大家?guī)硪黄钊肜斫鈖ython中的淺拷貝和深拷貝。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-05-05
  • Python的Django框架中消息通知的計數(shù)器實現(xiàn)教程

    Python的Django框架中消息通知的計數(shù)器實現(xiàn)教程

    通知的計數(shù)器非常有用,新通知時+1和讀過通知后的-1是最基本的功能,這里我們就來看一下Python的Django框架中消息通知的計數(shù)器實現(xiàn)教程
    2016-06-06
  • NumPy實現(xiàn)結(jié)構(gòu)化數(shù)組的示例代碼

    NumPy實現(xiàn)結(jié)構(gòu)化數(shù)組的示例代碼

    結(jié)構(gòu)化數(shù)組是 NumPy 中用于處理異質(zhì)數(shù)據(jù)的重要工具,通過定義復(fù)雜的數(shù)據(jù)類型,我們可以創(chuàng)建具有不同字段的數(shù)組,本文主要介紹了NumPy實現(xiàn)結(jié)構(gòu)化數(shù)組的示例代碼,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • pandas中的ExcelWriter和ExcelFile的實現(xiàn)方法

    pandas中的ExcelWriter和ExcelFile的實現(xiàn)方法

    這篇文章主要介紹了pandas中的ExcelWriter和ExcelFile的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • 詳解用python生成隨機數(shù)的幾種方法

    詳解用python生成隨機數(shù)的幾種方法

    這篇文章主要介紹了詳解用python生成隨機數(shù)的幾種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • PyCharm2019安裝教程及其使用(圖文教程)

    PyCharm2019安裝教程及其使用(圖文教程)

    這篇文章主要介紹了PyCharm2019安裝教程(圖文教程),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • python 可視化庫PyG2Plot的使用

    python 可視化庫PyG2Plot的使用

    這篇文章主要介紹了python 可視化庫PyG2Plot的使用方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2021-01-01
  • python使用多線程編寫tcp客戶端程序

    python使用多線程編寫tcp客戶端程序

    這篇文章主要為大家詳細(xì)介紹了python使用多線程編寫tcp客戶端程序,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • Python PyQt5標(biāo)準(zhǔn)對話框用法示例

    Python PyQt5標(biāo)準(zhǔn)對話框用法示例

    這篇文章主要介紹了Python PyQt5標(biāo)準(zhǔn)對話框用法,結(jié)合實例形式分析了PyQt5常用的標(biāo)準(zhǔn)對話框及相關(guān)使用技巧,需要的朋友可以參考下
    2017-08-08
  • Python黑帽編程 3.4 跨越VLAN詳解

    Python黑帽編程 3.4 跨越VLAN詳解

    VLAN(Virtual Local Area Network),是基于以太網(wǎng)交互技術(shù)構(gòu)建的虛擬網(wǎng)絡(luò),既可以將同一物理網(wǎng)絡(luò)劃分成多個VALN,也可以跨越物理網(wǎng)絡(luò)障礙,將不同子網(wǎng)中的用戶劃到同一個VLAN中。這篇文章主要介紹了Python黑帽編程 3.4 跨越VLAN 的相關(guān)資料,需要的朋友參考下
    2016-09-09

最新評論