[python] 웹 서버 로그 분석과 모니터링

웹 서버 로그는 웹 서버에 접속한 클라이언트들의 요청과 응답에 대한 정보를 기록하는 중요한 자원입니다. 이러한 로그를 분석하고 모니터링하는 것은 웹 서버의 성능 향상과 보안 강화를 위해 필수적입니다.

Python은 로그 파일을 처리하고 분석하는데 매우 유용한 도구들을 제공합니다. 이 글에서는 Python을 사용하여 웹 서버 로그를 분석하고 모니터링하는 방법에 대해 알아보겠습니다.

1. 로그 파일 읽기

Python의 open() 함수를 사용하여 로그 파일을 읽을 수 있습니다. 예를 들어, 아래는 access_log.txt 파일을 읽어 각 줄을 출력하는 예제입니다.

with open("access_log.txt", "r") as file:
    for line in file:
        print(line)

2. 로그 파일 파싱

로그 파일에는 클라이언트의 IP 주소, 접속 시간, 요청 메서드, 응답 코드 등 다양한 정보가 기록되어 있습니다. Python의 정규 표현식을 사용하여 로그 파일에서 필요한 정보를 추출할 수 있습니다.

import re

with open("access_log.txt", "r") as file:
    for line in file:
        # IP 주소 추출
        ip = re.search(r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}", line).group()

        # 접속 시간 추출
        timestamp = re.search(r"\[([\w:/]+\s[+\-]\d{4})]", line).group(1)

        # 요청 메서드 추출
        method = re.search(r"\"(\w+)\s", line).group(1)

        # 응답 코드 추출
        status_code = re.search(r"\s(\d{3})\s", line).group(1)

        print(f"IP: {ip}, Timestamp: {timestamp}, Method: {method}, Status Code: {status_code}")

3. 로그 분석

로그 파일을 파싱하여 추출한 정보를 통해 다양한 분석을 수행할 수 있습니다. 예를 들어, 가장 많은 접속을 한 클라이언트 IP를 찾기 위해서는 각 IP 주소별로 카운트를 유지하면 됩니다.

from collections import Counter

ip_counts = Counter()

with open("access_log.txt", "r") as file:
    for line in file:
        ip = re.search(r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}", line).group()
        ip_counts[ip] += 1

most_common_ip = ip_counts.most_common(1)[0]
print(f"가장 많은 접속을 한 IP: {most_common_ip[0]}, 접속 횟수: {most_common_ip[1]}")

4. 로그 모니터링

로그 파일을 실시간으로 모니터링하여 특정 이벤트를 감지하고 대응하는 것은 보안상 중요합니다. Python의 tail 모듈을 사용하면 로그 파일을 실시간으로 모니터링할 수 있습니다.

import tail

def callback(line):
    # 특정 이벤트 발생시 대응 로직
    print(line)

with tail.Tail("access_log.txt") as t:
    t.register_callback(callback)
    t.follow()

결론

Python을 사용하여 웹 서버 로그를 분석하고 모니터링하는 방법에 대해 알아보았습니다. 로그 파일 파싱과 분석을 통해 웹 서버의 성능 향상과 보안 강화에 도움이 될 수 있습니다. 이러한 로그 분석과 모니터링을 통해 서비스의 안정성을 높이고 문제를 빠르게 파악하여 대응할 수 있습니다.