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

🎯 과제
이 프로젝트를 완료하면 다음을 수행할 수 있습니다.
- 시스템 리소스를 모니터링하는 쉘 스크립트를 만드는 방법을 배웁니다.
- CPU, 메모리 및 디스크 사용량에 대한 임계값을 설정하고 사용하는 방법을 이해합니다.
- 임계값을 초과할 때 경고를 보내는 함수를 만듭니다.
🏆 성과
이 프로젝트를 완료하면 다음을 수행할 수 있습니다.
- 쉘 스크립트를 사용하여 Linux 시스템 모니터를 만들고 실행할 수 있습니다.
top,free,df와 같은 시스템 리소스 명령어를 사용하는 방법을 이해합니다.- 이메일 알림과 같은 새로운 기능을 추가하여 스크립트를 확장할 수 있습니다.
프로젝트 설정
스크립트를 위한 깨끗한 작업 공간을 준비하는 것으로 시작합니다. 이 프로젝트에는 스크립트 코딩 및 테스트에 적합한 WebIDE를 사용하는 것이 좋습니다.
이 디렉토리로 이동하여 system_monitor.sh라는 파일을 만듭니다.
cd ~/project
touch system_monitor.sh

선호하는 텍스트 편집기에서 파일을 열고 다음 줄을 추가합니다.
#!/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=80및DISK_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

스크립트를 실행합니다.
./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
이 코드에서 일어나는 일은 다음과 같습니다.
top -bn1: 실시간 CPU 통계를 가져오기 위해top명령을 배치 모드로 한 번 실행합니다.grep "Cpu(s)": CPU 사용량 라인에 집중하도록 출력을 필터링합니다.awk '{print $2 + $4}': 사용자 및 시스템 CPU 사용량의 백분율을 추출하고 합산합니다.cpu_usage=${cpu_usage%.*}: 임계값 비교를 단순화하기 위해 소수 부분을 제거합니다.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
작동 방식은 다음과 같습니다.
free: 메모리 사용량 통계를 제공합니다.awk '/Mem/ {printf("%3.1f", ($3/$2) * 100)}': 사용된 메모리 ($3) 를 총 메모리 ($2) 로 나누어 사용 중인 메모리의 백분율을 계산합니다.- 스크립트는
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
설명:
df -h /: 루트 디렉토리의 디스크 사용량 통계를 가져옵니다.awk '/\// {print $(NF-1)}': 사용량 백분율 열을 추출합니다.disk_usage=${disk_usage%?}: 더 쉬운 비교를 위해%기호를 제거합니다.- 디스크 사용량이 임계값을 초과하면 경고가 트리거됩니다.
스크립트를 실행합니다.
./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, 메모리 및 디스크 사용량을 실시간으로 추적하며, 사용량이 미리 정의된 임계값을 초과하면 경고합니다. 이메일 알림 또는 추가 리소스 모니터링과 같은 기능을 추가하여 스크립트를 자유롭게 확장하십시오.




