[DevOps] 1. 서버 상태 체크 (스크립트)

GisangLee·2025년 7월 8일
0

devops

목록 보기
1/11

서비스 중인 서버들의 상태를 매일 체크하기

- 주요 명령어

  • 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  # sar 출력 영어로 고정

### 출력 파트 ###
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
profile
포폴 및 이력서 : https://upbeat-suede-20b.notion.site/2265782662ce8071aeb7f67163e63467?source=copy_link

0개의 댓글