
## 引言
做 IT 嘅朋友一定遇過呢個情況:server 半夜出事,第二朝返到公司俾老細照肺,問你點解唔知。其實而家好多 monitoring 工具都可以幫你自動化監控,今日就同大家分享點樣用 Linux 內置嘅 cron job 配合一個簡單 script,做到基本嘅系統健康檢查同自動報警。
## 點解要自己寫 Monitoring Script?
市面上當然有好多現成嘅 monitoring 方案,例如 Datadog、PRTG、Zabbix 等等。但係對於中小企或者個人項目嚟講,一來 budget 有限,二來你可能只需要監控幾部機,用一個輕量級嘅自訂 script 反而更靈活。最重要係:你自己寫嘅嘢,你完全知道佢做緊乜,出事嗰陣 troubleshoot 都快啲。
## 基本系統健康檢查 Script
以下係一個簡單嘅 bash script,可以檢查 CPU 使用率、記憶體用量同磁碟空間:
#!/bin/bash
# system_health_check.sh - 基本系統健康檢查
THRESHOLD_CPU=80
THRESHOLD_MEM=90
THRESHOLD_DISK=85
ALERT_EMAIL="admin@yourdomain.com"
HOSTNAME=$(hostname)
LOG_FILE="/var/log/health_check.log"
# 檢查 CPU 使用率
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
CPU_INT=${CPU_USAGE%.*}
# 檢查記憶體
MEM_USAGE=$(free | grep Mem | awk '{printf "%.0f", $3/$2 * 100}')
# 檢查磁碟空間
DISK_USAGE=$(df -h / | tail -1 | awk '{print $5}' | sed 's/%//')
# 記錄 log
echo "[$(date '+%Y-%m-%d %H:%M:%S')] CPU: ${CPU_USAGE}% | MEM: ${MEM_USAGE}% | DISK: ${DISK_USAGE}%" >> $LOG_FILE
# 檢查閾值並發送警報
if [ "$CPU_INT" -gt "$THRESHOLD_CPU" ]; then
echo "⚠️ ${HOSTNAME} CPU 使用率過高: ${CPU_USAGE}%" | mail -s "CPU Alert" $ALERT_EMAIL
fi
if [ "$MEM_USAGE" -gt "$THRESHOLD_MEM" ]; then
echo "⚠️ ${HOSTNAME} 記憶體使用率過高: ${MEM_USAGE}%" | mail -s "Memory Alert" $ALERT_EMAIL
fi
if [ "$DISK_USAGE" -gt "$THRESHOLD_DISK" ]; then
echo "⚠️ ${HOSTNAME} 磁碟空間不足: ${DISK_USAGE}%" | mail -s "Disk Alert" $ALERT_EMAIL
fi
## 設定 Cron Job 定時執行
寫好 script 之後,用 `crontab -e` 設定定時執行。例如每 5 分鐘檢查一次:
*/5 * * * * /usr/local/bin/system_health_check.sh
如果你想喺 office hour 先檢查(朝 9 晚 6,星期一至五),可以咁寫:
*/5 9-18 * * 1-5 /usr/local/bin/system_health_check.sh
## 進階玩法:加入服務狀態檢查
除咗基本資源之外,你仲可以檢查特定服務係咪運行緊。例如檢查 Nginx 同 MySQL:
# 檢查 Nginx
if ! systemctl is-active --quiet nginx; then
echo "🚨 ${HOSTNAME} Nginx 停止咗!" | mail -s "Service Down" $ALERT_EMAIL
systemctl restart nginx
fi
# 檢查 MySQL
if ! systemctl is-active --quiet mysql; then
echo "🚨 ${HOSTNAME} MySQL 停止咗!" | mail -s "Service Down" $ALERT_EMAIL
fi
## 整合 Telegram Bot 通知
Email 報警有時唔夠即時,你可以整合 Telegram Bot API 直接 send message 俾你:
TELEGRAM_TOKEN="your_bot_token"
CHAT_ID="your_chat_id"
send_telegram() {
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_TOKEN}/sendMessage" \
-d chat_id="${CHAT_ID}" \
-d text="$1" \
-d parse_mode="HTML"
}
# 用法
send_telegram "⚠️ <b>${HOSTNAME}</b> CPU 使用率: ${CPU_USAGE}%"
## 總結
自己寫 monitoring script 嘅好處係簡單、輕量、完全可控。對於小型環境嚟講,呢個方案已經好夠用。當然,如果你管理嘅係幾十部甚至幾百部 server,咁就建議用返專業嘅 monitoring 平台。但係學識呢啲基本功,對你理解系統運作同 troubleshooting 一定有幫助。
希望呢篇文幫到大家!有咩問題歡迎留言討論。



