Giám sát website chủ động: uptime check, phân tích log và cảnh báo Telegram
chuanweb.com 2 phút đọc
Chỉ biết website hỏng khi có người báo là muộn. Giám sát chủ động — self-hosted, tốn kém gần như bằng không — giúp bạn nhận cảnh báo trong vòng vài phút sau khi sự cố xảy ra. Bài này dựng ba lớp giám sát bằng cron và Telegram.
Bước 1: tạo bot Telegram
Liên hệ BotFather, tạo bot và lấy token. Lấy chat id của bạn bằng cách nhắn tin cho bot rồi gọi:
curl "https://api.telegram.org/bot<TOKEN>/getUpdates"
Ghi lại chat_id — đây là đích nhận cảnh báo.
Bước 2: script kiểm tra uptime
Một script đơn giản check HTTP status mỗi vài phút:
#!/usr/bin/env bash
URL="https://chuanweb.com/"
TOKEN="<TOKEN>"
CHAT_ID="<CHAT_ID>"
code=$(curl -s -o /dev/null -w "%{http_code}" --max-time 20 "$URL")
if [ "$code" != "200" ]; then
curl -s "https://api.telegram.org/bot$TOKEN/sendMessage" \
-d chat_id="$CHAT_ID" \
-d text="[CHUANWEB] Cảnh báo: HTTP $code tại $URL"
fi
Muốn tránh cảnh báo lặp nhàm chán, kiểm tra cả lần hai trước khi gửi — một request lỗi đơn lẻ có thể chỉ là mạng chập chờn.
Bước 3: theo dõi log lỗi
Nginx ghi mọi lỗi 5xx vào log. Một job đếm số lỗi trong 10 phút gần nhất:
LAST=$(date --date='10 minutes ago' '+%d/%b/%Y:%H:%M')
COUNT=$(awk -v t="$LAST" '$0 >= t' /var/log/nginx/error.log \
| grep -cE "\[(error|crit|alert)\]")
if [ "$COUNT" -gt 0 ]; then
curl -s "https://api.telegram.org/bot$TOKEN/sendMessage" \
-d chat_id="$CHAT_ID" \
-d text="[CHUANWEB] $COUNT lỗi Nginx trong 10 phút qua"
fi
Nếu dùng access log, có thể lọc riêng mã 5xx:
tail -2000 /var/log/nginx/access.log \
| awk '{print $9}' | sort | uniq -c | sort -rn | head -10
Bước 4: cron điều phối
# chạy 2 phút một lần
*/2 * * * * /home/chuanweb/scripts/uptime-check.sh >> /home/chuanweb/logs/monitor.log 2>&1
Chú ý quyền: nếu script đọc log của nginx, chạy với user có quyền đọc file log.
Cảnh báo thông minh hơn
- Nhóm các cảnh báo cùng sự kiện để không spam tin nhắn trùng nhau.
- Kèm thời điểm phát hiện và mã lỗi vào nội dung để xử lý nhanh.
- Với trang qua Cloudflare, có thể dùng thêm Cloudflare Health Check để giám sát từ nhiều vùng địa lý.
Kết luận
- Uptime check + log monitoring + Telegram là bộ ba giám sát đủ dùng cho website nhỏ, chi phí bằng không.
- Cảnh báo kèm hành động gợi ý giúp tiết kiệm thời gian xử lý đáng kể.
- Dựng được hệ thống này rồi, mở rộng sang giám sát RAM, đĩa hay https certificates chỉ là thêm vài dòng script.