python+pandas 분석 nginx 로그 의 인 스 턴 스
nginx 접근 로 그 를 분석 하여 모든 인터페이스 응답 시간 최대 치,최소 치,평균 값 과 방 문 량 을 가 져 옵 니 다.
실현 원리
nginx 로그 uriupstreamresponse_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
"
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('
')
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.인쇄 된 표 는 다음 과 같다.요점
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 로그 의 인 스 턴 스 는 바로 작은 편집 이 여러분 에 게 공유 한 모든 내용 입 니 다.참고 하 시기 바 랍 니 다.여러분 들 도 저 희 를 많이 사랑 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.