[파이썬] 리눅스 서버 모니터링 스크립트 개발

리눅스 서버 모니터링은 시스템 상태를 지속적으로 감시하고, 문제가 발생할 경우 적절한 조치를 취하기 위해 필요합니다. 이를 위해 파이썬을 사용하여 간단하고 유용한 서버 모니터링 스크립트를 개발해 보겠습니다.

요구사항

이 스크립트는 다음과 같은 요구사항을 충족해야 합니다:

  1. CPU, 메모리, 디스크 사용량과 네트워크 트래픽을 모니터링해야 합니다.
  2. 데이터는 일정 간격으로 수집되어야 합니다.
  3. 데이터는 로그 파일에 기록되어야 합니다.
  4. 로그 파일은 설정 가능한 경로에 저장되어야 합니다.

설치 및 세팅

이 스크립트를 사용하기 위해서는 다음과 같은 패키지를 설치해야 합니다.

$ pip install psutil

설치가 완료되면, 파이썬 스크립트를 작성하는 것을 시작할 수 있습니다.

먼저, 필요한 모듈을 가져옵니다:

import psutil
import time

서버 모니터링 함수

다음으로, 서버 모니터링을 위한 함수를 작성합니다:

def monitor_server(interval, log_file):
    while True:
        stats = {
            'cpu_usage': psutil.cpu_percent(),
            'mem_usage': psutil.virtual_memory().percent,
            'disk_usage': psutil.disk_usage('/').percent,
            'network_io': psutil.net_io_counters().bytes_sent + psutil.net_io_counters().bytes_recv
        }
        
        log = f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] - CPU: {stats['cpu_usage']}%, Memory: {stats['mem_usage']}%, Disk: {stats['disk_usage']}%, Network: {stats['network_io']} bytes\n"
        
        with open(log_file, 'a') as f:
            f.write(log)
        
        time.sleep(interval)

이 함수는 주어진 간격(interval)마다 CPU, 메모리, 디스크 사용량 및 네트워크 트래픽을 가져와 로깅합니다.

스크립트 실행

모니터링 스크립트를 실행하기 위해 다음과 같이 스크립트의 마지막에 다음 코드를 추가합니다:

if __name__ == "__main__":
    interval = 5  # 데이터 수집 간격 (초)
    log_file = "monitoring.log"  # 로그 파일 경로 및 파일명
    
    monitor_server(interval, log_file)

위 코드에서 interval 변수는 데이터 수집 간격을 설정하며, log_file 변수는 로그 파일의 경로와 이름을 설정합니다.

실행 결과

위의 코드를 실행하면, 정해진 간격으로 모니터링 데이터가 로그 파일에 기록됩니다. 예를 들어, 로그 파일의 내용은 다음과 같을 수 있습니다:

[2022-01-01 10:00:00] - CPU: 10.0%, Memory: 40.0%, Disk: 50.0%, Network: 123456789 bytes
[2022-01-01 10:00:05] - CPU: 12.0%, Memory: 38.0%, Disk: 51.0%, Network: 123456790 bytes
[2022-01-01 10:00:10] - CPU: 11.5%, Memory: 39.5%, Disk: 52.0%, Network: 123456791 bytes

여기서는 로그 파일에 날짜와 시간, CPU 및 메모리 사용량, 디스크 사용량, 네트워크 트래픽이 기록됩니다.

결론

파이썬을 사용하여 리눅스 서버 모니터링 스크립트를 개발하는 방법을 살펴보았습니다. 이 스크립트를 사용하면 리눅스 서버의 상태를 지속적으로 모니터링하고, 문제가 발생할 경우 신속하게 대응할 수 있습니다. 유용한 서버 모니터링 스크립트를 개발하는 데 도움이 되었기를 바랍니다.