서비스 중인 서버들의 상태를 매일 체크하기
- 주요 명령어
- sar
- System Activity Report의 약자
- CPU, 메모리, 소켓, I/O 등의 여러 정보 확인 가능
- uname
- Unix Name의 약자, 시스템 및 커널 정보 확인
- -r ( --kernel-release), -p (--processor), -a(-all)
- grep -i (--ignore-case)
- grep -v (--invert-match)
- grep -E (--extended-regexp)
script
#!/bin/bash
RED="\e[31m"
YELLOW="\e[33m"
GREEN="\e[32m"
BLUE_BG="\e[44m\e[97m"
BOLD="\e[1m"
RESET="\e[0m"
print_section() {
echo -e "\n${BLUE_BG}===== $1 =====${RESET}"
}
bold() {
echo -e "${BOLD}$1${RESET}"
}
CPU_WARN=90
MEM_WARN=85
SWAP_WARN=70
DISK_UTIL_WARN=80
export LANG=C
print_section "서버 기본 정보"
bold "Hostname : $(hostname)"
bold "현재 날짜 : $(date)"
bold "커널 버전 : $(uname -rp)"
print_section "CPU 사용률 (1초 간격)"
sar -u 1 1 | grep -v "Linux"
print_section "메모리 사용률 (1초 간격)"
sar -r 1 1 | grep -v "Linux"
print_section "Swap 사용률 (1초 간격)"
sar -S 1 1 | grep -v "Linux"
print_section "디스크 I/O (1초 간격)"
sar -d 1 1 | grep -E "(DEV|sd|vd|nvme)" | grep -v "Linux"
print_section "네트워크 사용량 (1초 간격)"
sar -n DEV 1 1 | grep -v lo | grep -v "Linux"
cpu_idle=$(sar -u 1 1 | awk '/Average:/ && $0 !~ /CPU/ { print $8 }')
cpu_usage=$(awk "BEGIN {print 100 - $cpu_idle}")
mem_used=$(sar -r 1 1 | grep "Average:" | tail -n 1 | awk '{ print $5 }')
swap_used=$(sar -S 1 1 | grep "Average:" | tail -n 1 | awk '{ print $4 }')
disk_util=$(sar -d 1 1 | awk '/Average/ && $2 != "DEV" { print $NF }' | sort -nr | head -1)
alert=()
[[ $(echo "$cpu_usage > $CPU_WARN" | bc) -eq 1 ]] && \
alert+=("${RED}⚠️ CPU 사용률${RESET} : ${BOLD}${cpu_usage}%${RESET} (임계치 ${CPU_WARN}%)")
[[ $(echo "$mem_used > $MEM_WARN" | bc) -eq 1 ]] && \
alert+=("${RED}⚠️ 메모리 사용률${RESET} : ${BOLD}${mem_used}%${RESET} (임계치 ${MEM_WARN}%)")
[[ $(echo "$swap_used > $SWAP_WARN" | bc) -eq 1 ]] && \
alert+=("${RED}⚠️ 스왑 사용률${RESET} : ${BOLD}${swap_used}%${RESET} (임계치 ${SWAP_WARN}%)")
[[ $(echo "$disk_util > $DISK_UTIL_WARN" | bc) -eq 1 ]] && \
alert+=("${RED}⚠️ 디스크 사용률${RESET} : ${BOLD}${disk_util}%${RESET} (임계치 ${DISK_UTIL_WARN}%)")
print_section "자원 임계치 경고 감지 결과"
if [[ ${#alert[@]} -eq 0 ]]; then
echo -e "${GREEN}✅ 모든 자원이 정상 범위 내에 있습니다.${RESET}"
else
for msg in "${alert[@]}"; do
echo -e "$msg"
done
fi