수많은 기업이 일상적인 활동을 수행하기 위해 정보 기술 인프라에 크게 의존하고 있습니다. 이러한 네트워크의 오작동이나 효율성 저하로 인한 예기치 않은 중단은 운영 장애, 금전적 손실, 평판 손상을 초래할 수 있습니다.

정보 기술 인프라의 안정성과 신뢰성을 보장하기 위해서는 주기적인 상태 평가를 수행하기 위한 자동화된 시스템을 구현하는 것이 필수적입니다. 이 프로세스에는 중요한 지표를 추적하고 정상 패턴과의 편차를 적시에 식별하여 계획되지 않은 중단을 줄이는 것이 포함됩니다.

상태 점검 정의

특정 시스템의 상태를 효과적으로 평가하기 위해서는 어떤 상태 점검이 필요하다고 판단되는지 결정하는 것이 중요합니다. 여기에는 시스템의 특정 측면을 모니터링하기 위한 명시적인 지침을 수립하고 그러한 모니터링의 이유를 설명하는 것이 포함됩니다. 먼저 시스템이 제공하는 기능 및 서비스를 포함하여 시스템이 제공하는 주요 목표를 식별해야 합니다.

IT 인프라에 대한 의미 있는 성능 벤치마크를 설정하려면 과거 데이터를 분석하고 시스템 리소스의 최적 활용도를 평가하는 상태 점검을 통합하는 것이 필수적입니다. 적절한 임계값 수준을 결정하려면 리소스 소비의 높은 비율과 낮은 비율을 모두 신중하게 고려해야 합니다. 경보 발생 시점에 대한 결정 기준은 시스템의 전반적인 응답성 및 효율성 측면에서 신중하게 고려해야 합니다.

라이브러리 선택 및 환경 설정

Python을 사용하여 자동화된 시스템 모니터링 솔루션을 구현하려면 관련 시스템 데이터를 수집할 수 있는 특정 라이브러리를 활용하고 이후 주기적 평가 일정을 쉽게 예약할 수 있어야 합니다.

Psutil은 사용자가 여러 플랫폼에서 CPU 사용량, 사용 가능한 메모리, 디스크 활동, 네트워크 통계 및 센서 판독값과 같은 시스템 성능 메트릭과 관련된 데이터에 액세스할 수 있는 다목적 툴킷입니다.

라이브러리는 사전 정의된 시간 간격으로 반복적인 작업 실행을 구현하기 위한 우아한 솔루션을 제공합니다.

Python 프로그래밍 언어에는 시간 측정 또는 조작과 관련된 작업을 수행하기 위한 다양한 기능과 방법에 대한 액세스를 제공하는 “시간”이라는 사전 구축된 모듈이 있습니다. 이 포괄적인 라이브러리는 Python 에코시스템 내에서 쉽게 사용할 수 있으므로 개발자는 이 기능을 활용하여 시간에 민감한 기능을 애플리케이션에 통합할 수 있습니다.

앞서 언급한 소프트웨어 개발 키트에는 애플리케이션 상태 평가의 상태 업데이트 및 성능 메트릭을 자세히 설명하는 포괄적인 기록을 생성하는 역할을 하는 “로깅”이라는 통합 모듈이 포함되어 있습니다.

종속성 버전이 충돌할 가능성을 줄이려면 새로운 Python 가상 환경을 설정하는 것이 좋습니다. 설정이 완료되면 터미널을 사용하여 pip를 사용하여 필요한 라이브러리를 설치하는 명령을 실행할 수 있습니다. 터미널에 입력해야 하는 특정 명령은 필요한 라이브러리와 각 라이브러리의 설치 지침에 따라 달라집니다.

 pip install psutil schedule

컴퓨팅 환경 내에 필요한 라이브러리를 성공적으로 설치하면 후속 작업을 위한 설정이 성공적으로 준비된 것입니다.

이 글도 확인해 보세요:  JES를 활용한 흥미로운 사운드 처리 기법 3가지

소프트웨어의 기능을 탐색하고 활용하려는 개발자를 위한 포괄적인 리소스를 제공하는 GitHub 리포지토리를 통해 전체 코드베이스에 액세스할 수 있습니다.

필요한 라이브러리 가져오기

모니터링 시스템 구현을 시작하려면 먼저 이 목표를 달성하는 데 도움이 될 필요한 모듈과 라이브러리를 가져와야 합니다. 따라서 “monitoring.py”라는 새 파일을 생성하고 필요한 가져오기를 시작하겠습니다.

 import psutil
import schedule
import time
import logging

앞서 언급한 라이브러리를 통합하면 자체 코드베이스 내에서 각각의 기능을 활용할 수 있으므로 현재 진행 중인 프로젝트의 기능을 확장하고 향상시킬 수 있습니다.

로깅 및 보고

건강 검진 결과를 효과적으로 모니터링하기 위해서는 이러한 결과를 문서화하는 시스템을 구현하는 것이 필수적입니다. 이 문서는 사건의 시간순 기록을 보존하고 프로그램 내에서 불일치를 식별하는 데 필수적인 리소스입니다. 또한 애플리케이션의 전반적인 성능을 평가하는 데에도 매우 중요합니다.

통합 로깅 프레임워크를 활용하여 이 작업에 대한 로그를 생성합니다. 로그 항목은 system\_monitor.log라는 파일에 저장할 수 있습니다.

 # Function to log messages
def log_message(message):
    # Configure logging
    logging.basicConfig(filename='system_monitor.log', level=logging.INFO,
                       format='%(asctime)s - %(message)s')
    logging.info(message)

긴급 조치가 필요한 긴급 사안을 신속하게 파악하기 위해서는 시스템의 출력 장치인 콘솔에 시각적 표시와 함께 즉각적인 주의가 필요한 문제의 성격을 전달하는 간결한 메시지를 표시하는 것이 필수적입니다.

 # Function to print alerts to the console
def print_alert(message):
    print(f"ALERT: {message}")

상태 점검 유틸리티는 시스템 상태와 관련된 관련 발견 사항을 문서화하고 전달하기 위해 이러한 메커니즘을 사용해야 합니다.

상태 확인 함수 만들기

인프라 기능의 다양한 측면을 체계적으로 평가하려면 각 상태 확인에 대해 개별 함수를 생성하는 것이 좋습니다. 이러한 기능에는 해당 인프라의 중요한 구성 요소를 평가하는 테스트가 포함되어야 합니다.

CPU 사용량 모니터링

CPU 사용량 모니터링 메커니즘을 구현하는 것은 특정 시스템의 운영 효율성과 리소스 할당을 측정하는 데 있어 가장 중요한 요소입니다. CPU 사용량이 크게 증가하면 응답성이 저하되고 잠재적인 불안정성이 발생하여 중요한 기능에 장애가 발생할 수 있습니다.

시스템 관리자는 CPU 사용률 수준을 지속적으로 모니터링하고 적절한 임계값 매개변수를 설정함으로써 전반적인 시스템 효율성에 영향을 미칠 수 있는 성능 저해, 계산적으로 까다로운 작업 또는 가능한 하드웨어 문제를 식별할 수 있습니다.

 # Health check functions
def check_cpu_usage(threshold=50):
    cpu_usage = psutil.cpu_percent(interval=1)

    if cpu_usage > threshold:
        message = f"High CPU usage detected: {cpu_usage}%"
        log_message(message)
        print_alert(message)

이 유틸리티는 운영 체제의 현재 CPU 사용률에 대한 실시간 평가를 수행합니다. CPU 사용량이 미리 정해진 값을 백분율로 초과하는 경우 프로그램은 로그 파일에 CPU 사용량 증가에 대한 알림을 기록하고 화면에 경고 메시지를 표시합니다.

이 글도 확인해 보세요:  Python을 사용하여 할 일 목록 프로그램 만들기

메모리 사용량 모니터링

최적의 시스템 성능을 유지하는 데 있어 중요한 요소는 메모리 사용량을 모니터링하여 메모리 누수 또는 리소스 집약적인 프로세스와 같은 문제를 식별하는 것입니다. 메모리 사용량을 정기적으로 추적하면 시스템 속도 저하, 충돌 또는 다운타임으로 이어지기 전에 이러한 문제를 조기에 발견할 수 있습니다. 이와 같은 사전 예방적 조치는 서비스 제공 중단을 방지하고 시스템의 지속적인 안정성을 보장하는 데 필수적입니다.

 def check_memory_usage(threshold=80):
    memory_usage = psutil.virtual_memory().percent

    if memory_usage > threshold:
        message = f"High memory usage detected: {memory_usage}%"
        log_message(message)
        print_alert(message)

CPU 사용률 모니터링과 유사한 방식으로 메모리 사용량 증가에 대해 미리 정해진 임계값이 설정됩니다. 누적 메모리 사용량이 이 벤치마크를 초과하면 시스템에서 로그 항목을 생성하고 인쇄물을 통해 알림을 보냅니다.

디스크 공간 모니터링

리소스 부족으로 인해 발생할 수 있는 문제를 완화하기 위한 주목할 만한 접근 방식에는 디스크 공간 감시 메커니즘을 구현하는 것이 포함됩니다. 사용 가능한 디스크 공간을 지속적으로 모니터링하면 시스템 불안정, 데이터 무결성 손실 또는 서비스 중단으로 이어질 수 있는 스토리지 용량 부족과 관련된 문제를 사전에 식별하고 해결할 수 있습니다. 이러한 메커니즘의 구현은 디스크 공간 부족과 관련된 해로운 결과를 방지하는 데 도움이 됩니다.

 def check_disk_space(path='/', threshold=75):
    disk_usage = psutil.disk_usage(path).percent

    if disk_usage > threshold:
        message = f"Low disk space detected: {disk_usage}%"
        log_message(message)
        print_alert(message)

고려 중인 기능은 미리 정해진 파일 경로와 관련된 스토리지 용량의 활용도를 평가합니다.기본적으로 예비 평가는 루트 폴더 ‘/’를 포함합니다. 스토리지 리소스 할당이 미리 정의된 임계값 이하로 감소하는 경우, 시스템은 이 상태에 대한 알림을 기록하고 배포합니다.

네트워크 트래픽 모니터링

복잡한 모니터링 메커니즘을 구현하는 것은 시스템 데이터 스트림 내에서 이상 징후를 감지하여 사이버 공격이나 기술적 오작동과 같은 잠재적 위협이 확대되기 전에 식별할 수 있도록 하는 데 매우 중요합니다. 포괄적인 최종 기능을 개발함으로써 이러한 위험으로부터 선제적으로 보호하고 최적의 성능과 안정성을 보장할 수 있습니다.

 def check_network_traffic(threshold=100 * 1024 * 1024):
    network_traffic = psutil.net_io_counters().bytes_recv +\
                      psutil.net_io_counters().bytes_sent

    if network_traffic > threshold:
        message = f"High network traffic detected: {network_traffic:.2f} MB"
        log_message(message)
        print_alert(message)

네트워크 트래픽 모니터링 기능은 특정 네트워크에서 송수신된 총 바이트 수를 계산합니다. 이 측정은 바이트 단위로 표시되는 지정된 임계값 수준을 사용하여 수행됩니다. 네트워크 활동량이 이 미리 정해진 한도를 초과하는 경우 시스템은 관련 데이터를 기록하고 경고 알림을 생성하여 상황에 대한 주의를 환기시킵니다.

이 글도 확인해 보세요:  Rust의 제네릭 형식 알아보기

모니터링 로직 구현

애플리케이션의 상태를 종합적으로 평가하기 위해서는 지정된 제어 기능 내에서 모든 관련 진단 절차를 순차적으로 실행하는 것이 필수적입니다. 또한 이러한 검사 중에 얻은 결과를 인쇄하여 나중에 참조할 수 있도록 기록해 두면 시간이 지남에 따라 시스템 성능에 대한 귀중한 통찰력을 얻을 수 있습니다.

 # Function to run health checks
def run_health_checks():
    print("Monitoring the system...")
    log_message("Running system health checks...")

    check_cpu_usage()
    check_memory_usage()
    check_disk_space()
    check_network_traffic()

    log_message("Health checks completed.")

본 기능은 모든 관련 상태 점검을 일관되고 포괄적인 방식으로 실행하여 시스템의 전반적인 상태에 대한 종합적인 평가를 포함합니다.

자동 검사 예약 및 프로그램 실행

정기 감독 프로세스를 간소화하려면 자동화를 위해 스케줄 라이브러리를 활용하세요. 원하는 기간에 맞게 조정할 수 있습니다.

 # Schedule health checks to run every minute 
schedule.every(1).minutes.do(run_health_checks)

시스템을 지속적으로 모니터링하기 위해서는 모니터링 프로세스를 루프 내에서 지속적으로 실행해야 합니다.

 # Main loop to run scheduled tasks
while True:
    schedule.run_pending()
    time.sleep(1)

앞서 언급한 루프는 지정된 작업을 체계적으로 면밀히 조사하고 미리 정해진 간격으로 지정된 작업을 수행합니다. 소프트웨어를 실행하면 생성된 출력은 다음 형식의 형식을 취합니다:

이 프로그램은 시스템\_monitor.log 파일 내에 모니터링 활동에 대한 포괄적인 로그를 유지하면서 동시에 터미널 인터페이스를 통해 시각적 알림을 생성하여 작동 중에 발생할 수 있는 잠재적인 문제나 이상을 사용자에게 경고합니다.

시스템 모니터링 프로그램 발전

Psutil은 현재 시연된 것 이상의 추가 모니터링 기능을 제공합니다. 개인의 선호도와 요구 사항을 수용하기 위해 유사한 방법론을 사용하여 추가 모니터링 기능을 통합할 수 있습니다.

명령줄 인터페이스에 단순한 알림을 표시하는 대신 이메일을 전송하는 옵션을 통합하여 보고 기능의 기능을 향상시킬 수 있습니다.

By 최은지

윈도우(Windows)와 웹 서비스에 대한 전문 지식을 갖춘 노련한 UX 디자이너인 최은지님은 효율적이고 매력적인 디지털 경험을 개발하는 데 탁월한 능력을 발휘합니다. 사용자의 입장에서 생각하며 누구나 쉽게 접근하고 즐길 수 있는 콘텐츠를 개발하는 데 주력하고 있습니다. 사용자 경험을 향상시키기 위해 연구를 거듭하는 은지님은 All Things N 팀의 핵심 구성원으로 활약하고 있습니다.