国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python+pandas分析nginx日志的實例

2020-01-04 15:18:17
字體:
來源:轉載
供稿:網友

需求

通過分析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并設置logdirimport sysimport osimport pandas as pdmulu=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=Truechunksize=10000000chunks=[]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_meandf_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,分析,nginx日志,pandas

要點

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日志的實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到python教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 庐江县| 阜新| 四子王旗| 策勒县| 沈阳市| 吴忠市| 井研县| 伊金霍洛旗| 和硕县| 页游| 青河县| 永嘉县| 基隆市| 孙吴县| 海兴县| 康定县| 洪泽县| 阿克陶县| 汕头市| 辽阳市| 三穗县| 浙江省| 营口市| 和林格尔县| 固始县| 十堰市| 福贡县| 孟村| 苏尼特右旗| 乐平市| 阿巴嘎旗| 合作市| 惠来县| 崇义县| 昭觉县| 锦州市| 邢台市| 右玉县| 凌源市| 马关县| 临澧县|