728x90
반응형
서버의 상태를 실시간으로 확인하는 것은 시스템 관리자가 서버를 안정적으로 운영하기 위해 중요한 작업입니다. 이번 포스팅에서는 Linux Bash Shell Script를 사용하여 서버 상태를 모니터링하는 방법을 소개합니다. 이 글에서는 CPU, 메모리, 디스크 사용량 등을 확인하는 스크립트를 작성하며, 필요에 따라 이메일 경고를 보내는 기능도 추가하겠습니다.
준비물
- Linux 시스템
- Bash Shell
mail
명령어 (이메일 알림용)
기본 개념
서버 상태를 모니터링하려면 다음 항목을 점검해야 합니다:
- CPU 사용량: CPU가 얼마나 사용 중인지 확인합니다.
- 메모리 사용량: RAM이 얼마나 사용 중인지 확인합니다.
- 디스크 사용량: 특정 디스크 파티션의 사용량을 점검합니다.
- 네트워크 상태 (선택 사항): 네트워크의 패킷 송수신 상태를 확인합니다.
스크립트 작성하기
아래는 서버 상태를 모니터링하고, 문제가 감지되면 이메일로 알림을 보내는 스크립트의 예제입니다.
#!/bin/bash
# 설정 변수
EMAIL="admin@example.com" # 알림을 받을 이메일 주소
THRESHOLD_CPU=80 # CPU 사용량 경고 임계값 (%)
THRESHOLD_MEM=80 # 메모리 사용량 경고 임계값 (%)
THRESHOLD_DISK=80 # 디스크 사용량 경고 임계값 (%)
# CPU 사용량 확인
check_cpu() {
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'.' -f1)
echo "CPU 사용량: $CPU_USAGE%"
if [ "$CPU_USAGE" -gt "$THRESHOLD_CPU" ]; then
echo "CPU 사용량이 $THRESHOLD_CPU%를 초과했습니다." | mail -s "[경고] CPU 사용량 초과" $EMAIL
fi
}
# 메모리 사용량 확인
check_memory() {
MEM_USAGE=$(free | grep Mem | awk '{print $3/$2 * 100.0}' | cut -d'.' -f1)
echo "메모리 사용량: $MEM_USAGE%"
if [ "$MEM_USAGE" -gt "$THRESHOLD_MEM" ]; then
echo "메모리 사용량이 $THRESHOLD_MEM%를 초과했습니다." | mail -s "[경고] 메모리 사용량 초과" $EMAIL
fi
}
# 디스크 사용량 확인
check_disk() {
DISK_USAGE=$(df / | grep / | awk '{print $5}' | sed 's/%//g')
echo "디스크 사용량: $DISK_USAGE%"
if [ "$DISK_USAGE" -gt "$THRESHOLD_DISK" ]; then
echo "디스크 사용량이 $THRESHOLD_DISK%를 초과했습니다." | mail -s "[경고] 디스크 사용량 초과" $EMAIL
fi
}
# 네트워크 상태 확인 (선택 사항)
check_network() {
PACKETS_LOST=$(ping -c 4 8.8.8.8 | grep "packet loss" | awk '{print $6}' | sed 's/%//')
echo "패킷 손실률: $PACKETS_LOST%"
if [ "$PACKETS_LOST" -gt 0 ]; then
echo "네트워크 패킷 손실이 감지되었습니다." | mail -s "[경고] 네트워크 문제 발생" $EMAIL
fi
}
# 전체 상태 점검
monitor_server() {
echo "서버 상태 모니터링 시작..."
check_cpu
check_memory
check_disk
check_network
echo "서버 상태 모니터링 완료."
}
# 스크립트 실행
monitor_server
스크립트 분석
CPU 사용량 확인
top
명령어로 현재 CPU 사용량을 가져옵니다.- 경고 임계값을 초과할 경우 이메일 알림을 보냅니다.
메모리 사용량 확인
free
명령어로 메모리 사용량을 계산합니다.- 경고 임계값을 초과할 경우 이메일 알림을 보냅니다.
디스크 사용량 확인
df
명령어로 디스크 사용량을 확인합니다.- 루트 파티션(
/
)의 사용량을 기준으로 알림을 보냅니다.
네트워크 상태 확인 (선택 사항)
ping
명령어로 네트워크 상태를 점검합니다.- 패킷 손실률이 0% 이상일 경우 이메일 알림을 보냅니다.
이메일 알림
mail
명령어를 사용해 경고 메시지를 보냅니다. 이메일 설정이 필요합니다.
실행 방법
스크립트를 저장합니다:
nano monitor_server.sh
스크립트에 실행 권한을 부여합니다:
chmod +x monitor_server.sh
스크립트를 실행합니다:
./monitor_server.sh
자동화하기
cron
을 사용하여 스크립트를 일정 시간 간격으로 실행할 수 있습니다.
crontab
을 엽니다:crontab -e
아래 내용을 추가합니다 (매시간 실행 예시):
0 * * * * /path/to/monitor_server.sh
마무리
이 스크립트는 서버 상태를 효율적으로 점검하고, 문제가 발생했을 때 즉시 알림을 받을 수 있도록 도와줍니다. 필요에 따라 추가 모니터링 기능을 구현해 보세요.
반응형
'Linux Bash shell script' 카테고리의 다른 글
Bash Shell Script로 반복 작업 자동화하기 (0) | 2025.02.09 |
---|---|
Bash Script에서 `curl`과 `jq` 사용법 [ 외부 프로그램 활용하기 ] (0) | 2025.02.08 |
Bash Shell Script 실행 속도 최적화 (0) | 2025.02.07 |
awk와 sed를 활용한 데이터 처리 (0) | 2025.02.06 |
Bash Shell Script - 정규표현식과 grep (0) | 2025.02.05 |