IT/Python

[Python] 파이썬으로 시스템 모니터링 도구 만들기

멋진 선배 2025. 1. 17. 14:45
반응형

안녕하세요. 오늘은 파이썬을 이용한 시스템 모니터링 도구를 만드는 방법에 대해서 알아보겠습니다. 시스템 모니터링은 컴퓨터의 성능과 상태를 실시간으로 확인할 수 있게 해주는 중요한 작업 입니다. 

왜 시스템 모니터링이 필요한가?

컴퓨터 시스템은 복잡하고 때로는 예측하기 어려운 행동을 보일 수 있어요. CPU 사용량이 갑자기 치솟거나, 메모리가 부족해지거나, 디스크 공간이 꽉 차는 등의 상황이 발생할 수 있죠. 이런 문제들을 미리 파악하고 대처하기 위해서 시스템 모니터링이 필요한 거에요.

파이썬으로 시스템 모니터링 도구 만들기

파이썬은 시스템 정보를 쉽게 얻기 위해 다양한 라이브러리를 제공하고 있어요. 그 중에서도 가장 강력하고 사용하기 쉬운 라이브러리가 바로 'psutil'이에요.

psutil 설치하기

먼저, psutil을 설치해야 해요. 터미널이나 명령 프롬프트를 열고 다음 명령어를 입력해 주세요.

pip install psutil

기본적인 시스템 정보 얻기

자, 이제 psutil을 사용해서 기본적인 시스템 정보를 얻어볼까요?

실행 결과

import psutil

# CPU 정보
cpu_percent = psutil.cpu_percent(interval=1)
print(f"CPU 사용률: {cpu_percent}%")

# 메모리 정보
memory = psutil.virtual_memory()
print(f"전체 메모리: {memory.total / (1024 * 1024 * 1024):.2f} GB")
print(f"사용 중인 메모리: {memory.percent}%")

# 디스크 정보
disk = psutil.disk_usage('/')
print(f"전체 디스크 공간: {disk.total / (1024 * 1024 * 1024):.2f} GB")
print(f"사용 중인 디스크 공간: {disk.percent}%")

이 코드를 실행하면  CPU 사용률, 메모리 사용량, 디스크 사용량 등의 기본적인 시스템 정보를 볼 수 있어요.

실시간 모니터링 도구 만들기

이제 좀 더 발전시켜서 실시간으로 시스템 정보를 보여주는 도구를 만들어볼까요?

실행결과(2초마다 갱신됨)

import psutil
import time

def get_size(bytes):
    """바이트를 읽기 쉬운 형태로 변환"""
    for unit in ['', 'K', 'M', 'G', 'T', 'P']:
        if bytes < 1024:
            return f"{bytes:.2f}{unit}B"
        bytes /= 1024

def monitor_system():
    while True:
        # CPU 정보
        cpu_percent = psutil.cpu_percent(interval=1)
        
        # 메모리 정보
        memory = psutil.virtual_memory()
        
        # 디스크 정보
        disk = psutil.disk_usage('/')
        
        # 네트워크 정보
        net_io = psutil.net_io_counters()
        
        print("\n" + "="*40)
        print(f"CPU 사용률: {cpu_percent}%")
        print(f"메모리 사용률: {memory.percent}%")
        print(f"사용 중인 메모리: {get_size(memory.used)}")
        print(f"전체 메모리: {get_size(memory.total)}")
        print(f"디스크 사용률: {disk.percent}%")
        print(f"사용 중인 디스크: {get_size(disk.used)}")
        print(f"전체 디스크: {get_size(disk.total)}")
        print(f"네트워크 송신: {get_size(net_io.bytes_sent)}")
        print(f"네트워크 수신: {get_size(net_io.bytes_recv)}")
        print("="*40)
        
        time.sleep(2)  # 2초마다 업데이트

if __name__ == "__main__":
    monitor_system()

이 코드를ㄹ 실행하면 2초마다 시스템 정보가 업데이트되어 화면에 표시돼요. CPU, 메모리, 디스크, 네트워크 정보를 한눈에 볼 수 있죠.

로깅 추가하기

시스템 정보를 실시간으로 보는 것도 좋지만, 나중에 분석할 수 있도록 로그 파일로 저장하는 것도 중요해요. 파이썬에 logging 모듈을 사용해서 로깅 기능을 추가해 볼까요?

system_monitor.log 파일

import psutil
import time
import logging

logging.basicConfig(filename='system_monitor.log', level=logging.INFO, 
                    format='%(asctime)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S')

def get_size(bytes):
    """바이트를 읽기 쉬운 형태로 변환"""
    for unit in ['', 'K', 'M', 'G', 'T', 'P']:
        if bytes < 1024:
            return f"{bytes:.2f}{unit}B"
        bytes /= 1024

def monitor_system():
    while True:
        cpu_percent = psutil.cpu_percent(interval=1)
        memory = psutil.virtual_memory()
        disk = psutil.disk_usage('/')
        net_io = psutil.net_io_counters()
        
        log_message = (f"CPU: {cpu_percent}%, "
                       f"Memory: {memory.percent}%, "
                       f"Disk: {disk.percent}%, "
                       f"Net_sent: {get_size(net_io.bytes_sent)}, "
                       f"Net_recv: {get_size(net_io.bytes_recv)}")
        
        print(log_message)
        logging.info(log_message)
        
        time.sleep(60)  # 1분마다 로그 기록

if __name__ == "__main__":
    monitor_system()

이 코드는 시스템 정보를 화면에 출력하면서 동시에 'system_monitor.log' 파일에 1분마다 기록해요. 나중에 이 로그 파일을 분석하면 시스템의 성능 변화를 쉽게 파악 할 수 있겠죠?

마무리

지금까지 파이썬을 사용해서 간단한 시스템 모니터링 도구를 만들어봤어요. 이 도구를 사용하면 여러분의 컴퓨터 상태를 실시간으로 확인할 수 있고, 로그를 통해 장기적인 성능 변화도 분석할 수 있어요.

 

물론 이 도구는 아주 기본적인 수준이에요. 더 발전시키고 싶다면 그래픽 인터페이스를 추가하거나, 특정 조건에서 알림을 보내는 기능을 추가할 수 있어요. 또한 여러 컴퓨터의 정보를 한 곳에서 모니터링하는 네트워크 모니터링 도구로 확장할 수도 있어요.

 

파이썬의 강력함과 다양한 라이브러리를 활용하면 여러분만의 독특하고 유용한 도구를 만들수 있답니다. 시스템 모니터링 개발에 도움이 되었길 바랍니다.

반응형