서버 자원 알림 스크립트 만들기 (CPU, 메모리, 디스크)
모니터링 도구는 내가 들어가서 봐야 의미가 있다. 새벽에 디스크가 차거나 메모리가 바닥나면 아침에야 알게 된다. 이 글은 CPU 부하, 메모리, 디스크 사용률이 기준을 넘으면 텔레그램으로 메시지를 보내는 서버 자원 알림 스크립트를 만들고 crontab에 거는 과정을 정리한다. 서버 상태를 직접 보는 도구는 리눅스 서버 모니터링에 먼저 정리해 두었다.

서버 자원 알림 기준 정하기
| 항목 | 확인 명령 | 알림 기준(예) |
|---|---|---|
| CPU 부하 | /proc/loadavg 1분 값 | 코어 수의 2배 이상 |
| 메모리 | free 의 available | 남은 메모리 10% 미만 |
| 디스크 | df –output=pcent / | 사용률 85% 이상 |
기준은 서버마다 다르다. 처음에는 넉넉하게 잡고, 알림이 너무 자주 오거나 너무 늦게 오면 조정한다.
텔레그램 봇 준비
- 텔레그램에서 @BotFather를 찾아 /newbot으로 봇을 만들고 토큰을 받는다.
- 만든 봇에게 아무 메시지나 보낸다.
- 브라우저에서 https://api.telegram.org/bot토큰/getUpdates 를 열어 chat 항목의 id를 확인한다.
# 시험 전송
curl -s -X POST "https://api.telegram.org/bot${TG_TOKEN}/sendMessage" \
-d chat_id="${TG_CHAT}" -d text="테스트 알림"
API 설명은 텔레그램 Bot API 문서에 있다. curl 옵션은 curl 사용법에 정리했다.
서버 자원 알림 스크립트
#!/bin/bash
# /home/admin/scripts/res_alert.sh
set -u
source /home/admin/.alert.env # TG_TOKEN, TG_CHAT (권한 600)
HOST=$(hostname)
MSG=""
CORES=$(nproc)
LOAD=$(cut -d' ' -f1 /proc/loadavg)
if awk -v l="$LOAD" -v c="$CORES" 'BEGIN{exit !(l >= c*2)}'; then
MSG+="CPU 부하 ${LOAD} (코어 ${CORES})\n"
fi
MEM=$(free | awk '/Mem:/ {printf "%d", $7/$2*100}')
if [ "$MEM" -lt 10 ]; then
MSG+="남은 메모리 ${MEM}%\n"
fi
DISK=$(df --output=pcent / | tail -1 | tr -dc '0-9')
if [ "$DISK" -ge 85 ]; then
MSG+="디스크 사용률 ${DISK}%\n"
fi
if [ -n "$MSG" ]; then
curl -s -X POST "https://api.telegram.org/bot${TG_TOKEN}/sendMessage" \
-d chat_id="${TG_CHAT}" --data-urlencode text="$(printf "[%s] 서버 경고\n%b" "$HOST" "$MSG")" > /dev/null
fi
토큰은 스크립트에 직접 쓰지 말고 권한 600인 별도 파일에 두고 source로 읽는다. awk 계산은 sed awk 사용법, 스크립트 문법은 쉘 스크립트 기초를 참고하자.
서버 자원 알림 자동 실행
chmod +x /home/admin/scripts/res_alert.sh
chmod 600 /home/admin/.alert.env
# crontab -e : 5분마다
*/5 * * * * /home/admin/scripts/res_alert.sh
crontab 형식은 crontab 사용법에 있다.
알림 폭탄 막기
문제가 계속되면 5분마다 같은 알림이 온다. 마지막 알림 시각을 파일에 남기고 30분 안에는 다시 보내지 않게 하거나, 상태가 바뀔 때만 보내도록 고치면 된다. 처음에는 단순하게 시작하고 필요에 따라 다듬자.
마무리
완벽한 모니터링 시스템이 아니어도, 디스크·메모리·부하 세 가지만 알려 주는 짧은 스크립트로 새벽 장애의 대부분을 일찍 알아챌 수 있다. 디스크가 찼을 때의 대처는 디스크 용량 부족 해결에 있다. 전날 글은 워드프레스 서버 이전이다.
첫 댓글을 남겨보세요