Python/Python for Linux

[Python] pandas를 이용한 tomcat accesslog 분석 및 활용

Pydole 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에 관한 정보는 아래 링크를 참조

https://pydole.tistory.com/entry/Apache-Tomcat-Logging-%EA%B2%BD%EB%A1%9C%EC%99%80-Logging-%ED%95%AD%EB%AA%A9-%EB%B3%80%EA%B2%BD

 

Apache Tomcat Logging 경로와 Logging 항목 변경

OS : Windows 2012 R2 - 로그파일 용량관리를 별도의 디렉토리로 분리와 일 단위 로그파일 생성 - 분석 항목 추가 < 변경전 - 기본세팅 > < 변경후 - 기본세팅 > < 변경후 - 일 단위 로그파일 관리 > < 로그 항..

pydole.tistory.com

 

 

샘플로 약 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도 정상적으로 적재되었다.