-
[Python] pandas를 이용한 tomcat accesslog 분석 및 활용Python/Python for Linux 2019. 9. 5. 13:06
톰캣 웹 로그도 pandas를 이용하면 빠른 속도로 처리할 수 있다.
로그가 100만 ~ 1000만 이상 넘어가면 pandas를 이용하는 게 상당히 빠르며, DataFrame으로 저장하고,
CSV로 파일로 만들거나 다른 DB에 import 가 가능하기 때문에 활용도도 좋다고 볼 수 있다.
엘라스틱서치, 몽고DB도 python API가 있기 때문에 역시 가능하다.
톰캣을 기본설치하게 되면, 아래와 같이 기본 로깅세팅이 되어 있다.
pattern="%h %l %u %t "%r" %s %b"
tomcat logging에 관한 정보는 아래 링크를 참조
샘플로 약 37만 라인을 테스트 해보았다.
import pandas as pd from datetime import datetime data = pd.read_csv('D:\Log\Sample_Access_Log.log' , engine='python' , sep=' ' , header=None , names=['cip', 'empty1', 'empty2', 'time','UTC', 'pages', 'status', 'size']) # 0 = CIP, 1 = Empty1, 2 = Empty1, 3 = time, 4 = UTC, 5 = pages, 6 = status, 7 = size data['time'] = data.time.str[1:12]+' '+data.time.str[13:] data['time'] = pd.to_datetime(data['time'], format='%d/%b/%Y %H:%M:%S') print(data) ------------------------------------------------------------------------ start_time :2019-09-05 12:38:58 cip empty1 ... status size [373069 rows x 8 columns] end_time :2019-09-05 12:39:00
DataFrame로 만드는 데 약 2초가 소요되었는데, 1000만 라인이상 넘어가면 pandas의 장점을 더 느낄 수 있다.
DataFrame으로 만들었으면, mariadb에 import 시켜보자
print('start_time :'+ str(datetime.today())[:19]) import pymysql from sqlalchemy import create_engine pymysql.install_as_MySQLdb() engine = create_engine("mysql://user:password@host/db") data.to_sql(name='pandas_data', con=engine, if_exists='append', index=False) print('end_time :'+ str(datetime.today())[:19]) --------------------------------------------------------------------------- start_time :2019-09-05 12:52:50 end_time :2019-09-05 12:53:16
maria로 import 시킨 시간은 26초가 소요되었다.
DB도 정상적으로 적재되었다.
'Python > Python for Linux' 카테고리의 다른 글
[ Python ] 리눅스 iostat 결과값 DataFrame만들고, csv 저장 (0) 2023.05.24 [ Python ] 리눅스 mpstat 유틸을 이용한 CPU Core별 통계 뽑기. (평균값, 최대값, 최소값) (0) 2023.05.14 [Python] Obtain capacity for Linux specific folder capacity. (리눅스 특정 확장자 용량 구하기) (0) 2019.10.25 [Python] Linux에서 간단한 Web 모니터링 하기 (0) 2019.04.15 [Python] Linux Sendmail을 이용한 메일 보내기 (0) 2019.04.13 [ CentOS ] Python pip install (0) 2019.04.13 [Python] linux ping check(ICMP) program (0) 2019.04.09 [Python] CentOS 7 Python3 Install and Symbolc link (0) 2019.03.28