Linux Bash shell script

Bash Shell Script 서버 상태 모니터링

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

Bash Shell Script 서버 상태 모니터링

서버의 상태를 실시간으로 확인하는 것은 시스템 관리자가 서버를 안정적으로 운영하기 위해 중요한 작업입니다. 이번 포스팅에서는 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. 스크립트를 저장합니다:
  2. nano monitor_server.sh
  3. 스크립트에 실행 권한을 부여합니다:
  4. chmod +x monitor_server.sh
  5. 스크립트를 실행합니다:
  6. ./monitor_server.sh

자동화하기

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

  1. crontab을 엽니다:
  2. crontab -e
  3. 아래 내용을 추가합니다 (매시간 실행 예시):
  4. 0 * * * * /path/to/monitor_server.sh

마무리

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

728x90
반응형