Xây dựng hệ thống giám sát và cảnh báo sự cố VPS qua Telegram bằng Glances và Bash Script siêu nhẹ
Giới thiệu về bài toán giám sát hiệu năng VPS
Đối với bất kỳ quản trị viên hệ thống (SysAdmin) hay nhà phát triển ứng dụng nào, việc đảm bảo máy chủ ảo (VPS) hoạt động ổn định liên tục luôn là ưu tiên hàng đầu. Một sự cố nghẽn tài nguyên đột ngột như CPU quá tải (100%), tràn bộ nhớ RAM, hoặc ổ cứng bị đầy (Disk Full) nếu không được phát hiện kịp thời có thể dẫn đến tình trạng sập dịch vụ (downtime), gây thiệt hại lớn cho doanh nghiệp.
Tuy nhiên, các giải pháp giám sát chuyên nghiệp hiện nay như Prometheus, Grafana, hay Datadog thường khá cồng kềnh, tiêu tốn nhiều tài nguyên của các gói VPS cấu hình thấp và yêu cầu quy trình thiết lập phức tạp. Đó là lý do tại sao một giải pháp kết hợp giữa Glances (công cụ giám sát dòng lệnh mạnh mẽ) và Bash Script tự động gửi cảnh báo qua Telegram lại trở thành sự lựa chọn hoàn hảo: siêu nhẹ, hiệu quả cao và hoàn toàn miễn phí.
Tại sao nên chọn Glances và Telegram?
Trước khi đi vào cài đặt chi tiết, hãy cùng điểm qua những ưu điểm vượt trội mà giải pháp này mang lại:
- Glances: Được viết bằng Python, cung cấp cái nhìn toàn diện về tài nguyên hệ sinh thái Linux (CPU, Load Average, RAM, Swap, Disk I/O, Network) thông qua cả giao diện dòng lệnh (CLI) lẫn JSON API rất dễ khai thác.
- Bash Script: Tận dụng tối đa sức mạnh có sẵn của hệ điều hành Linux để xử lý logic, không cần cài đặt thêm các runtime nặng nề.
- Telegram Bot: Nền tảng nhắn tin tức thời với API miễn phí, bảo mật cao, giúp bạn nhận thông báo tức thì ngay trên điện thoại hoặc máy tính mọi lúc mọi nơi.
Quy trình triển khai hệ thống giám sát và cảnh báo
Bước 1: Cài đặt Glances trên VPS
Hầu hết các bản phân phối Linux phổ biến như Ubuntu, Debian hay CentOS đều hỗ trợ cài đặt Glances một cách dễ dàng thông qua trình quản lý gói hoặc script chính thức.
Hãy kết nối SSH vào VPS của bạn và chạy lệnh sau để cập nhật hệ thống và cài đặt Glances:
sudo apt update && sudo apt install glances -yĐể kiểm tra Glances hoạt động chính xác hay chưa, bạn chỉ cần gõ lệnh glances trên terminal. Một giao diện trực quan hiển thị toàn bộ thông số phần cứng sẽ xuất hiện. Nhấn q để thoát.
Bước 2: Tạo Telegram Bot và lấy Thông tin API
Để script có thể gửi tin nhắn vào nhóm hoặc tài khoản cá nhân của bạn, chúng ta cần tạo một Telegram Bot:
- Mở ứng dụng Telegram, tìm kiếm tài khoản @BotFather.
- Gửi lệnh
/newbotvà làm theo hướng dẫn để đặt tên cho Bot. Sau khi hoàn tất, bạn sẽ nhận được một chuỗi HTTP API Token (Ví dụ:123456789:ABCdefGhIJKlmNoPQRsTUVwxyZ). Hãy lưu lại chuỗi này. - Tiếp theo, bạn cần lấy Chat ID của mình hoặc của nhóm nơi bạn muốn nhận cảnh báo. Bạn có thể chat với bot @userinfobot để lấy Chat ID cá nhân nhanh nhất.
Bước 3: Viết Bash Script kiểm tra hiệu năng và gửi cảnh báo
Chúng ta sẽ tạo một kịch bản Bash Script để lấy dữ liệu từ Glances, phân tích xem các thông số có vượt ngưỡng an toàn hay không, và kích hoạt gửi tin nhắn Telegram nếu phát hiện bất thường.
Tạo một file script mới bằng trình soạn thảo nano:
nano /usr/local/bin/vps_monitor.shSao chép và dán toàn bộ đoạn mã cấu hình dưới đây vào file:
#!/bin/bash
# Cấu hình Telegram
TOKEN="TOKEN_BOT_CUA_BAN"
CHAT_ID="CHAT_ID_CUA_BAN"
HOSTNAME=$(hostname)
IP_ADDRESS=$(hostname -I | awk '{print $1}')
# Ngưỡng cảnh báo (Phần trăm %)
CPU_THRESHOLD=85
RAM_THRESHOLD=90
DISK_THRESHOLD=85
# Sử dụng Glances ở chế độ export dữ liệu thô hoặc dùng các lệnh Linux gốc để tối ưu tốc độ
CPU_USAGE=$(glances --stdout cpu.total | tail -n 1 | awk '{print int($1)}')
RAM_USAGE=$(glances --stdout mem.percent | tail -n 1 | awk '{print int($1)}')
DISK_USAGE=$(df / | tail -1 | awk '{print $5}' | sed 's/%//')
# Hàm gửi tin nhắn qua Telegram API
send_telegram() {
local message="$1"
curl -s -X POST "[https://api.telegram.org/bot$TOKEN/sendMessage](https://api.telegram.org/bot$TOKEN/sendMessage)" \
-d chat_id="$CHAT_ID" \
-d parse_mode="HTML" \
-d text="$message" > /dev/null
}
# Kiểm tra và xử lý logic cảnh báo
ALERT_MSG=""
if [ "$CPU_USAGE" -gt "$CPU_THRESHOLD" ]; then
ALERT_MSG+="⚠️ CPU Quá Tải: ${CPU_USAGE}%\n"
fi
if [ "$RAM_USAGE" -gt "$RAM_THRESHOLD" ]; then
ALERT_MSG+="⚠️ RAM Sắp Đầy: ${RAM_USAGE}%\n"
fi
if [ "$DISK_USAGE" -gt "$DISK_THRESHOLD" ]; then
ALERT_MSG+="⚠️ Dung lượng Đĩa Cạn Kiệt: ${DISK_USAGE}%\n"
fi
# Nếu có bất kỳ cảnh báo nào, tiến hành gửi tin nhắn
if [ ! -z "$ALERT_MSG" ]; then
FULL_MSG="🚨 CẢNH BÁO SỰ CỐ VPS 🚨\n-------------------------\n🖥️ Server: ${HOSTNAME} (${IP_ADDRESS})\n\n${ALERT_MSG}\n📌 Hãy kiểm tra lại hệ thống ngay lập tức!"
send_telegram "$FULL_MSG"
fi
Nhấn Ctrl + O, Enter để lưu và Ctrl + X để thoát. Sau đó, cấp quyền thực thi cho file script vừa tạo:
sudo chmod +x /usr/local/bin/vps_monitor.shBước 4: Tự động hóa hệ thống bằng Cronjob
Để hệ thống liên tục giám sát mà không cần chúng ta phải can thiệp thủ công, chúng ta sẽ thiết lập một Cronjob định kỳ chạy script này mỗi 5 phút một lần.
Mở trình quản lý cronjob bằng lệnh:
crontab -eThêm dòng sau vào cuối file:
*/5 * * * * /usr/local/bin/vps_monitor.sh >/dev/null 2>&1Lưu lại và hệ thống của bạn đã bắt đầu đi vào chu trình giám sát tự động 24/7 một cách bền bỉ.
---Lời kết và tối ưu nâng cao
Chỉ với vài bước đơn giản và chưa đầy 15 phút thiết lập, bạn đã sở hữu một hệ thống giám sát VPS chuyên nghiệp, siêu nhẹ, không hề gây hao tốn tài nguyên phần cứng. Việc nhận cảnh báo tức thời qua Telegram giúp doanh nghiệp chủ động ứng phó trước mọi tình huống nguy kịch, giảm thiểu tối đa rủi ro gián đoạn vận hành.
Để tối ưu sâu hơn, bạn có thể mở rộng Bash Script để tự động thực hiện các hành động khẩn cấp như: Tự động khởi động lại dịch vụ MySQL/Nginx nếu phát hiện bị sập, hoặc xóa các file log cũ khi ổ cứng vượt ngưỡng 95%. Chúc các bạn cấu hình thành công hệ thống của riêng mình!
