Bỏ qua điều hướng
chuanweb.com
Quay lại tất cả bài viết

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.