[파이썬] 파이썬을 활용한 리눅스 서버 로그 모니터링

리눅스 서버에서 발생하는 로그를 모니터링하는 것은 서버 관리를 위해 매우 중요합니다. 이를 통해 시스템 문제를 신속하게 감지하고 대응할 수 있습니다. 이번 글에서는 파이썬을 사용하여 리눅스 서버의 로그를 모니터링하는 방법에 대해 살펴보겠습니다.

SSH를 통해 리눅스 서버에 연결

먼저, 파이썬으로 리눅스 서버의 로그를 모니터링하기 위해 SSH를 통해 서버에 연결해야 합니다. 파이썬에서 SSH 연결을 처리하기 위해 paramiko 라이브러리를 사용할 수 있습니다.

import paramiko

host = '서버 IP'
user = '계정'
password = '비밀번호'

# SSH 클라이언트 생성
ssh = paramiko.SSHClient()
# 호스트키를 저장하는 파일 생성 여부에 대한 옵션, 필요에 따라 수정 가능
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# SSH 연결
ssh.connect(host, username=user, password=password)

# SSH 세션 열기
ssh_session = ssh.get_transport().open_session()

# 명령 실행
stdin, stdout, stderr = ssh.exec_command('명령어')

# 결과 출력
print(stdout.read().decode())

위 코드에서 host, user, password 변수에 각각 서버의 IP 주소, 계정 이름, 비밀번호를 입력해야 합니다. exec_command 메소드를 통해 서버에서 실행할 명령을 지정할 수 있고, 결과는 stdout 객체를 통해 얻을 수 있습니다.

로그 파일 모니터링

서버에서 로그를 모니터링하기 위해서는 로그 파일의 경로와 이름을 알아야 합니다. 로그 파일은 일반적으로 /var/log 디렉토리에 위치하며, 종류에 따라 다른 파일을 모니터링해야 할 수도 있습니다. 예를 들어, auth.log 파일은 인증 관련 로그를 담고 있고, syslog 파일은 시스템 로그를 담고 있습니다.

# 서버 로그 파일 경로 및 파일 이름
log_file = '/var/log/auth.log'

# 로그 파일 읽기
stdin, stdout, stderr = ssh.exec_command(f'tail -n 100 {log_file}')

# 결과 출력
log_data = stdout.read().decode()
print(log_data)

위 코드에서 log_file 변수에는 모니터링하려는 로그 파일의 경로와 이름을 입력해야 합니다. tail -n 명령을 사용하여 로그 파일의 마지막 100줄을 읽을 수 있습니다.

로그 분석 및 알림

로그 파일을 읽은 후에는 분석하여 원하는 정보를 추출하고, 필요에 따라 알림을 보내는 등의 작업을 수행할 수 있습니다. 예를 들어, 특정 키워드가 로그에 포함되어 있는지 확인하고, 포함되어 있다면 알림을 보내는 기능을 구현할 수 있습니다.

keyword = 'Invalid user'  # 특정 키워드

if keyword in log_data:
    # 로그 포함된 경우 알림 보내기
    send_notification('로그에 특정 키워드가 포함되었습니다.')

위 코드에서 keyword 변수에는 로그에서 확인하려는 특정 키워드를 입력해야 합니다. if 문을 사용하여 로그 데이터에 키워드가 포함되어 있는지 확인하고, 포함되어 있다면 send_notification 함수를 호출하여 알림을 보낼 수 있습니다. 이 함수는 실제로 사용하는 알림 서비스에 맞게 작성되어야 합니다.

정기적인 모니터링

로그 모니터링은 일반적으로 정기적으로 수행되어야 합니다. 파이썬에서는 time.sleep() 함수를 사용하여 일정 시간 간격으로 로그를 모니터링할 수 있습니다.

import time

interval = 60  # 60초(1분) 간격으로 모니터링

while True:
    # 로그 모니터링 수행
    log_monitoring()

    # 일정 시간 간격으로 반복
    time.sleep(interval)

위 코드에서 interval 변수에는 로그 모니터링을 수행할 간격(초)을 입력해야 합니다. while 문과 time.sleep() 함수를 사용하여 반복적으로 로그 모니터링을 수행할 수 있습니다.

이제 파이썬을 활용하여 리눅스 서버의 로그를 모니터링할 수 있는 기본적인 방법을 알아보았습니다. 필요에 따라 코드를 수정하여 실제 환경에 적용해보세요!