ETC

[시스템관리자의 파이썬 활용기] IIS 웹 로그 파일 분석

Pydole 2021. 2. 5. 13:56

 

 요즘 파이썬의 인기는 너무 좋다. 개발자들 비롯한 다양한 직군에서 활용도가 높아 그러하리라 싶다.

 

 시스템을 운영하시면 파이썬은 여러모로 유용하게 활용할 부분이 많은데. 오늘 포스팅은 IIS 웹 로그 분석을 하고, 간단하게 시각화를 하려 해보려 한다.


 

 최근 웹 로그시스템을 점검하다 보니, 특정시점부터 로그 용량이 많이 줄어들었다. 보통 이런 상황이면, 서비스 이관되었거나 종료되었을 수 있다. 서비스 운영에 보통 IT부서와 서로 유기적인 소통은 필수적이지만 그렇지 못한 상황도 있기 마련이다.

 

IT쪽에서도 서비스 대한 모니터링이 필요하며 웹의 경우 웹로그를 통해 서비스 상태를 대략적으로 파악할 수 있다.

 

 

 

 아래 코드는 날짜별로 readlines()를 이용하여 파일을 읽어 날짜별로 SC (Server → client) 용량의 합을 구하는 코드이다.

readlines는 모든 라인을 읽어들여 리스트 객체로 전환하는 파일 입출력 메소드이다. 로그용량이 크면 메모리도 많이 사용하므로

이를 고려해야한다.

 

Pandas를 이용하면 colume과 row를 DataFrame으로 변환하여 더 빠른 처리를 기대할 수 있지만 이번 포스트팅 readlines만 사용한다.

 

# glob : 디렉토리 안에 있는 파일 리스트
# timedelta : IIS UTC +9 시간 (한국타임)

import glob
from datetime import datetime
from datetime import timedelta

dct = {}

for file in glob.glob('*'): 
    with open(file, encoding='utf-8', errors='replace') as f:
        lines = f.readlines()
    for i in lines:
        if i[0][0] == '#':
            pass
        else:
            i = i.split(' ')
            
            # date와 time 컬럼을 합쳐서 datetime 객체로 변경 한국시간에 맞게 +9시간
            logdate = datetime.strptime(i[0]+' '+i[1], '%Y-%m-%d %H:%M:%S')
            logdate = logdate + timedelta(hours=9)
            logdate = str(logdate).split(' ')[0]
            
            if i[19] == '-':
                pass
            
            else:
                if logdate not in dct:
                    dct[logdate] = int(i[19])
                else:
                    dct[logdate] += int(i[19])
        
dct

 

 

 간단히 롤리팝 그래프를 이용하여 시각화하였다. 시각화는 matplotlib 모듈을 사용, 시각화를 하면 내용을 공유하기도 좋고, 보고서에 참고자료로 활용할 수 있다.