Tóm tắt nhanh: Để tạo Bot Telegram giám sát VPS, bạn thực hiện 3 bước: (1) Tạo bot qua @BotFather để lấy API Token, sau đó lấy Chat ID bằng @getmyid_bot; (2) Viết Bash Script hoặc Python Script trên VPS để trích xuất chỉ số CPU, RAM, Disk và gửi qua Telegram API; (3) Thiết lập Cronjob để script tự chạy định kỳ mà không cần thao tác thủ công. Toàn bộ quy trình không tốn chi phí, hoàn thành trong khoảng 20–30 phút.
- Cách lấy API Token và Chat ID từ Telegram đúng cách, tránh sai sót phổ biến.
- Bash Script hoàn chỉnh, copy-paste chạy được ngay — có giải thích từng dòng.
- Mẹo phân quyền
chmod 700để bảo vệ API Token khỏi user khác trên cùng VPS. - Cách test script trước khi đặt Cronjob để chắc chắn bot gửi tin đúng.
- Xử lý lỗi thường gặp: tại sao Cronjob không chạy dù test tay thành công.
Website sập lúc 2 giờ sáng vì VPS đầy ổ cứng. Đến 7 giờ sáng mở điện thoại mới biết — và lúc đó khách hàng đã nhắn tin phàn nàn từ 5 tiếng trước. Đây không phải tình huống hiếm gặp, và nguyên nhân hầu hết không phải do VPS kém, mà do thiếu một hệ thống cảnh báo.
Việc SSH vào server mỗi ngày để gõ top, free -h, df -h không phải giải pháp — đó là thói quen chắp vá. Bài viết này hướng dẫn bạn thiết lập một Bot Telegram tự động báo cáo tình trạng CPU, RAM, và Disk của VPS về điện thoại theo lịch cố định. Không cần dịch vụ trả phí, không cần cài thêm phần mềm monitoring phức tạp. Nếu bạn chưa quen với khái niệm máy chủ ảo, hãy tham khảo trước bài viết VPS là gì — Hướng dẫn VPS toàn diện của InterData trước khi tiếp tục.
![Hướng Dẫn Tạo Bot Telegram Giám Sát Tài Nguyên VPS [2026] 1 Bot telegram giám sát tài nguyên VPS](https://interdata.vn/blog/wp-content/uploads/2026/03/Bot-telegram-giam-sat-tai-nguyen-VPS.jpg)
Tại sao nên dùng Telegram Bot để giám sát VPS?
Có ba lý do thực tế khiến Telegram Bot thường được chọn thay vì gửi cảnh báo qua email truyền thống.
Thứ nhất, thông báo đến ngay lập tức dưới dạng push notification trên điện thoại — không cần mở email, không cần đăng nhập. Thứ hai, Telegram Bot API hoàn toàn miễn phí, không có giới hạn số lượng tin nhắn đáng kể cho mục đích monitoring cá nhân hoặc nhỏ. Thứ ba, không có nguy cơ bị lọc vào thư mục Spam như email gửi qua SMTP — vốn là vấn đề phổ biến khi cấu hình cảnh báo từ server.
Từ đội ngũ kỹ thuật InterData: Chúng tôi triển khai cảnh báo qua Telegram cho các node VPS riêng biệt vì tính tức thời của nó. Khi RAM một node vượt ngưỡng 90%, thông báo đến trong vòng vài giây — đủ để xử lý trước khi hệ thống bị ảnh hưởng.
Quy trình 3 bước tạo Bot Telegram giám sát tài nguyên VPS
Trước khi bắt đầu, hãy kiểm tra VPS của bạn đã có sẵn công cụ curl chưa bằng lệnh curl --version. Hầu hết các bản phân phối Linux hiện đại (Ubuntu, CentOS, Debian) đều cài sẵn curl. Nếu chưa có: apt install curl -y (Ubuntu/Debian) hoặc yum install curl -y (CentOS).
Bước 1: Khởi tạo Bot và lấy API Token, Chat ID
Toàn bộ bước này thực hiện trên ứng dụng Telegram — không cần đăng nhập SSH.
Lấy API Token từ @BotFather:
- Mở Telegram, tìm kiếm
@BotFather(tài khoản chính thức, có tick xanh xác thực). - Nhấn Start, sau đó gõ lệnh
/newbot. - BotFather hỏi tên hiển thị của bot — nhập tên tùy ý, ví dụ: VPS Monitor Node1.
- Tiếp theo nhập username cho bot, phải kết thúc bằng bot, ví dụ: interdata_vps_monitor_bot.
- BotFather trả về một đoạn API Token dạng:
7894561230:AAFxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Lưu chuỗi Token này ngay vào một nơi an toàn. Đây là “chìa khóa” duy nhất để script của bạn giao tiếp với bot. Nếu mất, bạn phải tạo lại token mới qua lệnh /revoke trong BotFather.
Lấy Chat ID:
- Tìm kiếm
@getmyid_bottrên Telegram. - Nhấn Start. Bot sẽ ngay lập tức trả về một dãy số — đó là Chat ID của bạn, ví dụ:
123456789.
Chat ID xác định chính xác Telegram bot sẽ gửi tin nhắn cho ai. Nếu bạn muốn cảnh báo đến một nhóm (group), thêm bot vào nhóm đó và dùng @RawDataBot trong nhóm để lấy Group Chat ID (thường có dấu trừ ở đầu, ví dụ: -1001234567890).
![Hướng Dẫn Tạo Bot Telegram Giám Sát Tài Nguyên VPS [2026] 2 Khởi tạo Bot Telegram](https://interdata.vn/blog/wp-content/uploads/2026/03/Khoi-tao-Bot-Telegram.webp)
Bước 2: Thiết lập Script trích xuất thông số CPU, RAM, Disk (2 cách)
Có hai hướng tiếp cận tùy theo nhu cầu: Bash Script (gọn, nhanh, phù hợp mọi VPS) hoặc Python với thư viện psutil (mạnh hơn, phù hợp khi cần bot phản hồi lệnh).
Cách 1 — Dùng Bash Script (khuyên dùng cho người mới)
Đăng nhập SSH vào VPS, sau đó tạo file script:
nano /usr/local/bin/vps_monitor.sh
Dán đoạn script sau vào file (thay YOUR_BOT_TOKEN và YOUR_CHAT_ID bằng thông tin đã lấy ở Bước 1):
#!/bin/bash
# ── Cấu hình ──────────────────────────────────────
BOT_TOKEN="YOUR_BOT_TOKEN_HERE"
CHAT_ID="YOUR_CHAT_ID_HERE"
# ── Thu thập thông số ──────────────────────────────
# CPU: lấy % đang sử dụng (user + system), loại trừ idle
CPU=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')
# RAM: tính % đã dùng = (used / total) * 100
RAM_USED=$(free -m | awk 'NR==2{print $3}')
RAM_TOTAL=$(free -m | awk 'NR==2{print $2}')
RAM_PERCENT=$(awk "BEGIN {printf \"%.1f\", $RAM_USED/$RAM_TOTAL*100}")
# Disk: lấy % đã dùng của phân vùng root (/)
DISK=$(df -h / | awk 'NR==2{print $5}')
# ── Tạo nội dung tin nhắn ─────────────────────────
MESSAGE="🖥️ Báo cáo VPS: $(hostname)
⏰ $(date '+%d/%m/%Y %H:%M:%S')
━━━━━━━━━━━━━━━━
🔥 CPU đang dùng : ${CPU}%
💾 RAM đang dùng : ${RAM_PERCENT}% (${RAM_USED}MB / ${RAM_TOTAL}MB)
💿 Disk (/) : ${DISK}
━━━━━━━━━━━━━━━━"
# ── Gửi tin nhắn qua Telegram API ─────────────────
/usr/bin/curl -s -X POST \
"https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \
--data-urlencode "chat_id=${CHAT_ID}" \
--data-urlencode "text=${MESSAGE}"
Lưu file: nhấn Ctrl+O → Enter → Ctrl+X.
Giải thích nhanh các phần chính:
top -bn1chạytopở chế độ batch (không cần giao diện), lấy 1 lần đọc. Hàmawk '{print $2 + $4}'cộng cột “us” (user) và “sy” (system) để ra tổng % CPU đang bận.free -mxuất RAM theo đơn vị MB.NR==2chỉ lấy dòng thứ 2 (dòng Mem). Sau đóawktính phần trăm.df -h /kiểm tra phân vùng root.NR==2{print $5}lấy cột thứ 5 — là % đã dùng.- Dòng
curldùng đường dẫn tuyệt đối/usr/bin/curlthay vì chỉcurl— lý do quan trọng sẽ giải thích ở phần FAQs.
🛡️ Bảo mật quan trọng — Phân quyền file:
chmod 700 /usr/local/bin/vps_monitor.sh
Lệnh chmod 700 cho phép chỉ user sở hữu file (thường là root) mới đọc, sửa, và chạy được script. Nếu dùng chmod +x thông thường (tương đương chmod 755), bất kỳ user nào trên VPS cũng đọc được nội dung file — nghĩa là đọc được BOT_TOKEN của bạn. Đây là sự khác biệt nhỏ nhưng quan trọng, đặc biệt trên VPS shared hoặc VPS có nhiều tài khoản người dùng.
Ảnh minh họa cần chèn ở đây: Screenshot SSH terminal đang dán script vào nano và chạy lệnh chmod 700. Alt text: Viết script bảo mật cảnh báo tài nguyên VPS.
Cách 2 — Dùng Python với psutil (dành cho nhu cầu nâng cao)
Phương án này phù hợp nếu bạn muốn bot có khả năng phản hồi lệnh — ví dụ gõ /status trong Telegram và bot lập tức trả về tình trạng hiện tại, thay vì chờ đến chu kỳ Cronjob.
Cài đặt thư viện cần thiết:
pip install psutil requests
Tạo file script:
nano /usr/local/bin/vps_monitor.py
Nội dung script:
#!/usr/bin/env python3
import psutil
import requests
import socket
from datetime import datetime
BOT_TOKEN = "YOUR_BOT_TOKEN_HERE"
CHAT_ID = "YOUR_CHAT_ID_HERE"
cpu = psutil.cpu_percent(interval=1)
ram = psutil.virtual_memory()
disk = psutil.disk_usage('/')
message = (
f"🖥️ Báo cáo VPS: {socket.gethostname()}\n"
f"⏰ {datetime.now().strftime('%d/%m/%Y %H:%M:%S')}\n"
f"━━━━━━━━━━━━━━━━\n"
f"🔥 CPU : {cpu}%\n"
f"💾 RAM : {ram.percent}% ({ram.used // 1024**2}MB / {ram.total // 1024**2}MB)\n"
f"💿 Disk : {disk.percent}%\n"
f"━━━━━━━━━━━━━━━━"
)
url = f"https://api.telegram.org/bot{BOT_TOKEN}/sendMessage"
requests.post(url, data={"chat_id": CHAT_ID, "text": message})
Phân quyền tương tự:
chmod 700 /usr/local/bin/vps_monitor.py
Lưu ý về tài nguyên: Nếu bạn muốn nâng cấp thành bot phản hồi lệnh thực sự (dùng thư viện
python-telegram-botvà chạy tiến trình nền), tiến trình Python đó sẽ thường xuyên chiếm khoảng 20–50MB RAM. Trên VPS 512MB hoặc 1GB RAM, đây là lượng không thể bỏ qua. Script một chiều kết hợp Cronjob như hướng dẫn này không có vấn đề đó — script chỉ chạy trong vài giây rồi thoát.
Chạy thử script trước khi đặt lịch
Đây là bước quan trọng nhất — đừng bỏ qua. Chạy tay script để xác nhận bot hoạt động trước khi giao cho Cronjob:
Với Bash:
bash /usr/local/bin/vps_monitor.sh
Với Python:
python3 /usr/local/bin/vps_monitor.py
Nếu Telegram trên điện thoại của bạn nhận được tin nhắn báo cáo ngay sau khi chạy lệnh → script hoạt động đúng, chuyển sang Bước 3. Nếu không nhận được tin — kiểm tra lại Token và Chat ID, xem output của lệnh có báo lỗi HTTP không (thường là lỗi {"ok":false} kèm thông báo cụ thể).
Bước 3: Tự động hóa gửi báo cáo bằng Cronjob
Script đã chạy tay thành công. Bây giờ cần một “bộ hẹn giờ” để VPS tự chạy script đó theo lịch — không cần bạn động vào. Đó là nhiệm vụ của Crontab.
Mở file crontab để chỉnh sửa:
crontab -e
Nếu đây là lần đầu, hệ thống hỏi bạn chọn trình soạn thảo — nhập 1 để chọn nano.
Thêm dòng sau vào cuối file (gửi báo cáo mỗi 6 tiếng):
0 */6 * * * /bin/bash /usr/local/bin/vps_monitor.sh
Giải thích cú pháp 0 */6 * * *:
0— Phút thứ 0 (đúng đầu giờ)*/6— Mỗi 6 tiếng một lần (0h, 6h, 12h, 18h)* * *— Mọi ngày trong tháng, mọi tháng, mọi thứ trong tuần
Muốn nhận báo cáo mỗi 1 tiếng:
0 * * * * /bin/bash /usr/local/bin/vps_monitor.sh
Lưu và thoát: Ctrl+O → Enter → Ctrl+X. Crontab tự động nạp cấu hình mới, không cần restart.
Kinh nghiệm thực tế: Không nên đặt Cronjob chạy mỗi 1–5 phút cho mục đích báo cáo thông thường. Tin nhắn Telegram sẽ đến liên tục và nhanh chóng trở thành spam — bạn sẽ tắt thông báo của bot, phá vỡ toàn bộ mục đích ban đầu. Chu kỳ 1–6 tiếng phù hợp cho báo cáo định kỳ. Nếu bạn muốn cảnh báo ngưỡng (ví dụ: chỉ gửi khi RAM > 85%), hãy thêm điều kiện
ifvào trong script thay vì tăng tần suất Cronjob.
Ảnh minh họa cần chèn ở đây: Screenshot điện thoại nhận tin nhắn từ Bot Telegram, ví dụ: “VPS: node1.interdata – CPU: 45% – RAM: 60%…”. Alt text: Tin nhắn cảnh báo tài nguyên VPS gửi về Telegram.
VPS NVMe U.2 — Hiệu năng cao, ít lo quá tải
Script giám sát chỉ phát hiện vấn đề — còn VPS ổn định giúp vấn đề ít xảy ra hơn. Các gói VPS NVMe tại InterData được giám sát hạ tầng 24/7 bởi đội kỹ thuật.
- ✓Ổ cứng NVMe tốc độ cao — giảm thiểu bottleneck I/O gây quá tải
- ✓Hỗ trợ kỹ thuật 24/7 — xử lý sự cố nhanh, không tự mình mò
- ✓Datacenter Việt Nam, độ trễ thấp — phù hợp website và ứng dụng nội địa
FAQs — Câu hỏi thường gặp khi monitor VPS bằng Telegram
Tại sao script chạy tay thì gửi được tin nhắn nhưng Cronjob lại không gửi?
Đây là lỗi phổ biến nhất. Nguyên nhân: Cronjob chạy trong một môi trường tối giản, không nạp biến PATH của user như khi bạn chạy tay trong terminal. Vì thế, các lệnh như curl, top, free, df nếu viết ngắn gọn thì Cronjob không tìm thấy. Giải pháp là dùng đường dẫn tuyệt đối cho mọi lệnh trong script — đó là lý do script mẫu ở Bước 2 dùng /usr/bin/curl thay vì chỉ curl. Để biết đường dẫn tuyệt đối của một lệnh: which curl, which top, which free.
API Token của Bot bị lộ thì nguy hiểm như thế nào?
Rất nghiêm trọng. Kẻ gian có API Token của bot có thể gửi tin nhắn tùy ý qua bot đó — bao gồm spam, lừa đảo, hoặc phát tán link độc hại đến Chat ID của bạn hoặc bất kỳ người nào đã từng chat với bot. Nếu nghi ngờ Token bị lộ: vào @BotFather → gõ /mybots → chọn bot → chọn API Token → chọn Revoke current token. Token cũ vô hiệu ngay lập tức, bot được cấp Token mới. Sau đó cập nhật Token mới vào file script trên VPS.
Có thể dùng script này để giám sát nhiều VPS cùng lúc không?
Hoàn toàn được. Chỉ cần tạo file script trên mỗi VPS (copy y chang, thay Token và Chat ID nếu cần), sau đó đặt Cronjob trên từng máy. Tất cả báo cáo sẽ đổ về cùng một đoạn chat Telegram. Mỗi tin nhắn tự động hiển thị hostname của VPS gửi đến ($(hostname) trong script), nên bạn phân biệt được báo cáo đến từ node nào mà không cần cấu hình thêm gì.
Script có cảnh báo tự động khi vượt ngưỡng không, hay chỉ gửi định kỳ?
Script trong hướng dẫn này gửi báo cáo định kỳ theo Crontab — không phụ thuộc vào giá trị ngưỡng. Để chuyển sang chế độ cảnh báo thông minh hơn (chỉ gửi khi RAM > 85% chẳng hạn), thêm điều kiện vào Bash Script:
if (( $(echo "$RAM_PERCENT > 85" | bc -l) )); then
# gửi tin nhắn cảnh báo
fi
Cách này hiệu quả hơn nhiều so với tăng tần suất Cronjob, và tránh được tình trạng bot spam tin nhắn không cần thiết.
Chỉ với 3 bước — tạo bot, viết script có bảo mật phân quyền, đặt Cronjob — bạn đã có một hệ thống giám sát VPS hoàn toàn miễn phí, hoạt động 24/7, gửi cảnh báo thẳng vào Telegram mà không cần bất kỳ phần mềm bên thứ ba nào. Điều quan trọng là test script thủ công trước, dùng đường dẫn tuyệt đối trong script để Cronjob chạy đúng, và phân quyền chmod 700 để bảo vệ Token. Để khai thác tốt hơn khả năng của VPS sau khi đã có hệ thống giám sát, hãy tham khảo thêm bài viết Tổng hợp các lệnh Linux cơ bản quản trị VPS của InterData.
