리눅스 서버 모니터링 툴

리눅스 서버를 운영하면서 실시간으로 시스템 상태를 모니터링하는 것은 매우 중요합니다. 이를 위해 많은 서버 모니터링 도구들이 존재하지만, 간단하면서도 효과적인 모니터링 도구를 제작해보고자 합니다. 이번에는 Bash 스크립팅을 사용하여 리눅스 서버의 핵심 시스템 상태를 감시하고 알림을 받는 툴을 만들어보겠습니다.

프로세스 상태 모니터링

첫 번째로, 주어진 프로세스가 실행 중인지를 모니터링하는 기능을 구현해보겠습니다. 아래의 Bash 스크립트를 이용하면 특정 프로세스의 상태를 체크하고, 프로세스가 종료되었을 때 알림을 받을 수 있습니다.

#!/bin/bash

# 모니터링 대상 프로세스
process_name="nginx"

# 프로세스 상태 체크 함수
check_process_status() {
    ps -ef | grep -v grep | grep -q "$process_name"
    if [ $? -eq 0 ]; then
        echo "Process $process_name is running"
    else
        echo "Process $process_name is not running"
        # 여기에 알림 로직을 추가할 수 있습니다 (예: 이메일, 슬랙 등)
    fi
}

# 프로세스 상태 체크 실행
check_process_status

위의 스크립트에서는 $process_name 변수에 모니터링할 프로세스의 이름을 지정하고, check_process_status 함수에서 해당 프로세스의 상태를 체크합니다. 프로세스가 실행 중이면 “Process [프로세스명] is running” 메시지를 출력합니다. 실행 중이 아니라면 “Process [프로세스명] is not running” 메시지를 출력하고, 필요에 따라 알림 로직을 추가할 수 있습니다.

스크립트 실행

위의 스크립트를 실행하려면 다음과 같이 터미널에서 명령어를 입력합니다.

$ chmod +x monitor.sh
$ ./monitor.sh

실행 결과로 프로세스의 상태가 출력됩니다. 만약 프로세스가 실행 중이 아니라면 알림 로직에 따라 알림을 받을 수 있습니다.

시스템 리소스 모니터링

다음으로, 리눅스 서버의 CPU, 메모리, 디스크 사용량 등 시스템 리소스를 모니터링하는 기능을 구현해보겠습니다. 이를 위해 top 명령어와 명령어 파싱을 활용하여 스크립트를 작성해봅시다.

#!/bin/bash

# CPU, 메모리, 디스크 사용량 체크 함수
check_system_resources() {
    # CPU 사용량 체크
    cpu=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')
    echo "CPU 사용량: $cpu%"

    # 메모리 사용량 체크
    memory=$(free -m | awk 'NR==2{printf "%.2f%%", $3*100/$2 }')
    echo "메모리 사용량: $memory"

    # 디스크 사용량 체크
    disk=$(df -h | awk '$NF=="/"{printf "%s", $5}')
    echo "디스크 사용량: $disk"
}

# 시스템 리소스 체크 실행
check_system_resources

위의 스크립트에서는 check_system_resources 함수에서 top 명령어와 free 명령어, df 명령어를 이용하여 시스템 리소스를 체크합니다. CPU 사용량, 메모리 사용량, 디스크 사용량을 각각 출력합니다.

스크립트 실행

위의 스크립트를 실행하려면 다음과 같이 터미널에서 명령어를 입력합니다.

$ chmod +x monitor.sh
$ ./monitor.sh

실행 결과로 CPU 사용량, 메모리 사용량, 디스크 사용량이 출력됩니다.

정기적인 모니터링

마지막으로, 정기적으로 리눅스 서버 모니터링을 수행하는 방법을 알아보겠습니다. 이를 위해서는 cron을 사용하여 정해진 시간에 스크립트를 자동으로 실행하는 설정이 필요합니다.

# 모니터링 스크립트 경로
monitor_script="/path/to/monitor.sh"

# 매 분마다 스크립트 실행
* * * * * bash $monitor_script >> /path/to/logs/monitor.log 2>&1

위의 예시는 매 분마다 monitor.sh 스크립트를 실행하고, 실행 결과를 monitor.log 파일에 저장하는 cron 설정입니다. 원하는 실행 주기와 스크립트 경로, 로그 파일 경로를 임의로 설정하십시오.

정기적인 모니터링을 위해 cron 설정을 수정하려면 다음과 같이 터미널에서 명령어를 입력합니다.

$ crontab -e

위의 명령어를 실행하면 에디터가 열리는데, 설정을 원하는대로 수정 후 저장하고 종료합니다.

마무리

위에서 구현한 간단한 모니터링 툴을 사용하면 리눅스 서버의 핵심 시스템 상태를 쉽게 모니터링하고 알림을 받을 수 있습니다. 이외에도 시스템 로그, 네트워크 연결 상태 등 다양한 정보를 추가로 모니터링하는 기능을 구현할 수 있습니다. Bash 스크립팅의 간단함과 유연성을 활용하여 더욱 효과적인 모니터링 툴을 개발해보세요!