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
Giám sát website chủ động: uptime check, phân tích log và cảnh báo Telegram

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.

Script này chạy được thì cảnh báo Telegram cũng chỉ là một nút nối. Khách hàng muốn theo dõi nhiều site cùng lúc thường đặt phần này làm workflow n8n thay vì tự giám sát từng domain — xem cách thuê tôi. Nếu site đang chật chỗ, gói hosting là thứ quyết định cảnh báo có kịp tới bạn hay không.

Chia sẻ bài viết này