Linux Bash shell script

Bash Shell Script 서버 상태 모니터링

임베디드 친구 2025. 2. 10. 00:36
728x90
반응형

서버의 상태를 실시간으로 확인하는 것은 시스템 관리자가 서버를 안정적으로 운영하기 위해 중요한 작업입니다. 이번 포스팅에서는 Linux Bash Shell Script를 사용하여 서버 상태를 모니터링하는 방법을 소개합니다. 이 글에서는 CPU, 메모리, 디스크 사용량 등을 확인하는 스크립트를 작성하며, 필요에 따라 이메일 경고를 보내는 기능도 추가하겠습니다.


준비물

  • Linux 시스템
  • Bash Shell
  • mail 명령어 (이메일 알림용)

기본 개념

서버 상태를 모니터링하려면 다음 항목을 점검해야 합니다:

  1. CPU 사용량: CPU가 얼마나 사용 중인지 확인합니다.
  2. 메모리 사용량: RAM이 얼마나 사용 중인지 확인합니다.
  3. 디스크 사용량: 특정 디스크 파티션의 사용량을 점검합니다.
  4. 네트워크 상태 (선택 사항): 네트워크의 패킷 송수신 상태를 확인합니다.

스크립트 작성하기

아래는 서버 상태를 모니터링하고, 문제가 감지되면 이메일로 알림을 보내는 스크립트의 예제입니다.

#!/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

스크립트 분석

  1. CPU 사용량 확인

    • top 명령어로 현재 CPU 사용량을 가져옵니다.
    • 경고 임계값을 초과할 경우 이메일 알림을 보냅니다.
  2. 메모리 사용량 확인

    • free 명령어로 메모리 사용량을 계산합니다.
    • 경고 임계값을 초과할 경우 이메일 알림을 보냅니다.
  3. 디스크 사용량 확인

    • df 명령어로 디스크 사용량을 확인합니다.
    • 루트 파티션(/)의 사용량을 기준으로 알림을 보냅니다.
  4. 네트워크 상태 확인 (선택 사항)

    • ping 명령어로 네트워크 상태를 점검합니다.
    • 패킷 손실률이 0% 이상일 경우 이메일 알림을 보냅니다.
  5. 이메일 알림

    • mail 명령어를 사용해 경고 메시지를 보냅니다. 이메일 설정이 필요합니다.

실행 방법

  1. 스크립트를 저장합니다:

    nano monitor_server.sh
  2. 스크립트에 실행 권한을 부여합니다:

    chmod +x monitor_server.sh
  3. 스크립트를 실행합니다:

    ./monitor_server.sh

자동화하기

cron을 사용하여 스크립트를 일정 시간 간격으로 실행할 수 있습니다.

  1. crontab을 엽니다:

    crontab -e
  2. 아래 내용을 추가합니다 (매시간 실행 예시):

    0 * * * * /path/to/monitor_server.sh

마무리

이 스크립트는 서버 상태를 효율적으로 점검하고, 문제가 발생했을 때 즉시 알림을 받을 수 있도록 도와줍니다. 필요에 따라 추가 모니터링 기능을 구현해 보세요.

반응형