[python] Fabric으로 원격 서버 웹 서비스 로그 분석하기

이번 포스트에서는 Python 라이브러리인 Fabric을 사용하여 원격 서버의 웹 서비스 로그를 분석하는 방법에 대해 알아보겠습니다.

Fabric이란?

Fabric은 Python으로 작성된 간단한 명령줄 도구입니다. 원격 서버에 SSH 연결을 설정하고 명령어를 실행하는 등의 작업을 자동화할 수 있습니다.

원격 서버에 SSH 연결 설정하기

Fabric을 사용하기 위해서는 원격 서버에 SSH 연결 설정이 필요합니다. SSH 연결을 설정하는 방법은 다음과 같습니다.

  1. 원격 서버에 SSH 키를 생성합니다.
  2. 원격 서버의 ~/.ssh/authorized_keys 파일에 퍼블릭 키를 등록합니다.

Fabric 설치하기

Fabric은 pip를 사용하여 설치할 수 있습니다.

pip install fabric

Fabric을 사용하여 로그 파일 다운로드하기

Fabric을 사용하면 로컬 머신에서 원격 서버의 파일을 다운로드할 수 있습니다. 다음은 Fabric을 사용하여 원격 서버의 로그 파일을 다운로드하는 예제 코드입니다.

from fabric import Connection

def download_log_file():
    c = Connection('user@hostname')
    result = c.get('/var/log/access.log', local='/tmp')
    
    if result.failed:
        print("Failed to download log file.")
    else:
        print("Log file downloaded successfully.")

if __name__ == '__main__':
    download_log_file()

Connection 객체를 생성한 후 get() 메서드를 사용하여 로그 파일을 다운로드합니다. local 인자에 로컬 머신에 저장할 경로를 지정합니다.

웹 서비스 로그 분석하기

다운로드한 로그 파일을 이용하여 웹 서비스 로그를 분석할 수 있습니다. 예를 들어, 특정 기간 동안의 HTTP 상태 코드와 요청 수를 통계로 확인하는 예제 코드는 다음과 같습니다.

import re

def analyze_log_file(log_file):
    # 정규 표현식을 사용하여 로그 파일에서 원하는 정보를 추출합니다.
    status_code_pattern = r'HTTP/1.\d" (?P<status_code>\d+)'
    log_entry_pattern = r'(?P<ip_address>\d+\.\d+\.\d+\.\d+).*?"(?P<url>.*?)"'
    
    status_codes = {}
    urls = {}
    
    with open(log_file, 'r') as f:
        for line in f:
            match = re.search(status_code_pattern, line)
            if match:
                status_code = match.group('status_code')
                status_codes[status_code] = status_codes.get(status_code, 0) + 1
            
            match = re.search(log_entry_pattern, line)
            if match:
                url = match.group('url')
                urls[url] = urls.get(url, 0) + 1
    
    print("Status Code Statistics:")
    for status_code, count in status_codes.items():
        print(f"{status_code}: {count} times")
    
    print("\nURL Statistics:")
    for url, count in urls.items():
        print(f"{url}: {count} times")

if __name__ == '__main__':
    analyze_log_file('/tmp/access.log')

위의 코드는 HTTP 상태 코드와 각 URL의 요청 수를 추출하여 통계를 보여줍니다.

결론

이번 포스트에서는 Fabric을 사용하여 웹 서비스 로그 파일을 원격 서버에서 다운로드하고 분석하는 방법을 알아보았습니다. Fabric을 사용하면 로그 분석과 같은 자동화 작업을 효율적으로 처리할 수 있습니다.

더 자세한 내용은 Fabric 공식 문서를 참조하시기 바랍니다.