Bash 를 사용하여 Linux 시스템 모니터 구축하기

LinuxBeginner
지금 연습하기

소개

이 프로젝트에서는 쉘 스크립트를 사용하여 Linux 시스템 모니터를 만들 것입니다. 이 스크립트는 시스템의 CPU, 메모리 및 디스크 사용량을 지속적으로 추적하여 사용률을 실시간으로 표시합니다. 리소스 사용량이 미리 설정된 임계값을 초과하면 경고가 표시됩니다. 이 프로젝트를 완료함으로써 실용적인 도구를 구축하면서 기본적인 Linux 스크립팅 기술을 배우게 됩니다.

Linux System Monitor

🎯 과제

이 프로젝트를 완료하면 다음을 수행할 수 있습니다.

  • 시스템 리소스를 모니터링하는 쉘 스크립트를 만드는 방법을 배웁니다.
  • CPU, 메모리 및 디스크 사용량에 대한 임계값을 설정하고 사용하는 방법을 이해합니다.
  • 임계값을 초과할 때 경고를 보내는 함수를 만듭니다.

🏆 성과

이 프로젝트를 완료하면 다음을 수행할 수 있습니다.

  • 쉘 스크립트를 사용하여 Linux 시스템 모니터를 만들고 실행할 수 있습니다.
  • top, free, df와 같은 시스템 리소스 명령어를 사용하는 방법을 이해합니다.
  • 이메일 알림과 같은 새로운 기능을 추가하여 스크립트를 확장할 수 있습니다.
이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 중급 레벨의 실험이며 완료율은 63%입니다.학습자들로부터 99%의 긍정적인 리뷰율을 받았습니다.

프로젝트 설정

스크립트를 위한 깨끗한 작업 공간을 준비하는 것으로 시작합니다. 이 프로젝트에는 스크립트 코딩 및 테스트에 적합한 WebIDE를 사용하는 것이 좋습니다.

이 디렉토리로 이동하여 system_monitor.sh라는 파일을 만듭니다.

cd ~/project
touch system_monitor.sh
Creating system monitor script

선호하는 텍스트 편집기에서 파일을 열고 다음 줄을 추가합니다.

#!/bin/bash

## Define the threshold values for CPU, memory, and disk usage (in percentage)
CPU_THRESHOLD=80
MEMORY_THRESHOLD=80
DISK_THRESHOLD=80

코드의 각 부분은 다음과 같은 역할을 합니다.

  • #!/bin/bash: 이 줄은 스크립트가 Bash 쉘을 사용하여 해석되도록 지정합니다.
  • CPU_THRESHOLD=80: CPU 사용량 임계값을 80% 로 설정합니다. 이 값은 나중에 조정할 수 있습니다.
  • MEMORY_THRESHOLD=80DISK_THRESHOLD=80: 마찬가지로, 메모리 및 디스크 사용량에 대한 임계값을 정의합니다.

파일을 저장하고 실행 가능하게 만듭니다.

chmod +x system_monitor.sh

알림 함수 추가

이제 리소스 사용량이 임계값을 초과할 때 경고를 보내는 함수를 추가해 보겠습니다. system_monitor.sh를 열고 다음 코드를 추가합니다.

## Function to send an alert
send_alert() {
  echo "$(tput setaf 1)ALERT: $1 usage exceeded threshold! Current value: $2%$(tput sgr0)"
}

이 함수에 대한 설명은 다음과 같습니다.

  • send_alert: 이 함수는 두 개의 인수를 받습니다.
    • $1은 리소스 유형 (예: CPU, 메모리, 디스크) 을 나타냅니다.
    • $2는 현재 사용률 백분율을 나타냅니다.
  • tput setaf 1: 경고를 시각적으로 구별하기 위해 텍스트 색상을 빨간색으로 변경합니다.
  • tput sgr0: 경고 메시지 후 텍스트 서식을 정상으로 재설정합니다.

함수가 작동하는지 확인하기 위해 테스트 호출을 추가합니다.

send_alert "CPU" 85
alert function code snippet

스크립트를 실행합니다.

./system_monitor.sh

다음과 유사한 빨간색 경고 메시지가 표시되어야 합니다.

ALERT: CPU usage exceeded threshold! Current value: 85%

계속 진행하기 전에 스크립트에서 send_alert에 대한 테스트 호출을 삭제합니다.

CPU 사용량 모니터링

CPU 사용량을 모니터링하는 로직을 추가해 보겠습니다. 스크립트를 열고 다음 코드를 추가합니다.

## Monitor CPU usage
cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')
cpu_usage=${cpu_usage%.*} ## Convert to integer
echo "Current CPU usage: $cpu_usage%"

if ((cpu_usage >= CPU_THRESHOLD)); then
  send_alert "CPU" "$cpu_usage"
fi

이 코드에서 일어나는 일은 다음과 같습니다.

  1. top -bn1: 실시간 CPU 통계를 가져오기 위해 top 명령을 배치 모드로 한 번 실행합니다.
  2. grep "Cpu(s)": CPU 사용량 라인에 집중하도록 출력을 필터링합니다.
  3. awk '{print $2 + $4}': 사용자 및 시스템 CPU 사용량의 백분율을 추출하고 합산합니다.
  4. cpu_usage=${cpu_usage%.*}: 임계값 비교를 단순화하기 위해 소수 부분을 제거합니다.
  5. if ((cpu_usage >= CPU_THRESHOLD)): CPU 사용량을 임계값과 비교하고 초과하면 send_alert를 호출합니다.

CPU 모니터링을 테스트하기 위해 스크립트를 실행합니다.

./system_monitor.sh

CPU 사용량이 표시되어야 합니다. 임계값을 초과하면 경고가 표시됩니다.

메모리 사용량 모니터링

다음으로, 메모리 사용량을 모니터링하는 코드를 추가합니다. CPU 모니터링 로직 아래에 다음 줄을 삽입합니다.

## Monitor memory usage
memory_usage=$(free | awk '/Mem/ {printf("%3.1f", ($3/$2) * 100)}')
echo "Current memory usage: $memory_usage%"
memory_usage=${memory_usage%.*}
if ((memory_usage >= MEMORY_THRESHOLD)); then
  send_alert "Memory" "$memory_usage"
fi

작동 방식은 다음과 같습니다.

  1. free: 메모리 사용량 통계를 제공합니다.
  2. awk '/Mem/ {printf("%3.1f", ($3/$2) * 100)}': 사용된 메모리 ($3) 를 총 메모리 ($2) 로 나누어 사용 중인 메모리의 백분율을 계산합니다.
  3. 스크립트는 memory_usage를 임계값과 비교하고 필요한 경우 경고를 보냅니다.

스크립트를 실행합니다.

./system_monitor.sh

메모리 사용량 백분율이 표시되어야 하며, 사용량이 임계값을 초과하면 경고가 트리거됩니다.

디스크 사용량 모니터링

이제 디스크 사용량을 모니터링해 보겠습니다. 메모리 모니터링 로직 아래에 다음 코드를 추가합니다.

## Monitor disk usage
disk_usage=$(df -h / | awk '/\// {print $(NF-1)}')
disk_usage=${disk_usage%?} ## Remove the % sign
echo "Current disk usage: $disk_usage%"

if ((disk_usage >= DISK_THRESHOLD)); then
  send_alert "Disk" "$disk_usage"
fi

설명:

  1. df -h /: 루트 디렉토리의 디스크 사용량 통계를 가져옵니다.
  2. awk '/\// {print $(NF-1)}': 사용량 백분율 열을 추출합니다.
  3. disk_usage=${disk_usage%?}: 더 쉬운 비교를 위해 % 기호를 제거합니다.
  4. 디스크 사용량이 임계값을 초과하면 경고가 트리거됩니다.

스크립트를 실행합니다.

./system_monitor.sh

디스크 사용량 통계가 표시되어야 하며, 필요한 경우 경고가 트리거됩니다.

모든 것을 루프에 통합

마지막으로, CPU, 메모리 및 디스크 모니터링을 지속적인 모니터링을 위해 루프로 결합합니다. 기존 내용을 다음으로 바꿉니다.

while true; do
  ## Monitor CPU
  cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')
  cpu_usage=${cpu_usage%.*}
  if ((cpu_usage >= CPU_THRESHOLD)); then
    send_alert "CPU" "$cpu_usage"
  fi

  ## Monitor memory
  memory_usage=$(free | awk '/Mem/ {printf("%3.1f", ($3/$2) * 100)}')
  memory_usage=${memory_usage%.*}
  if ((memory_usage >= MEMORY_THRESHOLD)); then
    send_alert "Memory" "$memory_usage"
  fi

  ## Monitor disk
  disk_usage=$(df -h / | awk '/\// {print $(NF-1)}')
  disk_usage=${disk_usage%?}
  if ((disk_usage >= DISK_THRESHOLD)); then
    send_alert "Disk" "$disk_usage"
  fi

  ## Display current stats
  clear
  echo "Resource Usage:"
  echo "CPU: $cpu_usage%"
  echo "Memory: $memory_usage%"
  echo "Disk: $disk_usage%"
  sleep 2
done

이 루프는 지속적으로 리소스 사용량을 모니터링하고 업데이트하며, 화면을 지우고 정기적인 간격으로 현재 통계를 표시합니다.

테스트를 위해 스크립트를 실행합니다.

./system_monitor.sh

요약

축하합니다! Bash 를 사용하여 완벽하게 작동하는 Linux 시스템 모니터를 구축했습니다. 이 도구는 CPU, 메모리 및 디스크 사용량을 실시간으로 추적하며, 사용량이 미리 정의된 임계값을 초과하면 경고합니다. 이메일 알림 또는 추가 리소스 모니터링과 같은 기능을 추가하여 스크립트를 자유롭게 확장하십시오.

Linux System Monitor