[python] Fabric으로 원격 서버 웹 서비스 로그 분석하기
이번 포스트에서는 Python 라이브러리인 Fabric을 사용하여 원격 서버의 웹 서비스 로그를 분석하는 방법에 대해 알아보겠습니다.
Fabric이란?
Fabric은 Python으로 작성된 간단한 명령줄 도구입니다. 원격 서버에 SSH 연결을 설정하고 명령어를 실행하는 등의 작업을 자동화할 수 있습니다.
원격 서버에 SSH 연결 설정하기
Fabric을 사용하기 위해서는 원격 서버에 SSH 연결 설정이 필요합니다. SSH 연결을 설정하는 방법은 다음과 같습니다.
- 원격 서버에 SSH 키를 생성합니다.
- 원격 서버의
~/.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 공식 문서를 참조하시기 바랍니다.