Quay lại danh sách
Tin tức công nghệ

Xây dựng hệ thống Monitoring & Alert cho VPS miễn phí với Prometheus, Grafana và Telegram Bot

16 tháng 5, 2026

Giới thiệu về Monitoring & Alert cho VPS

Trong thế giới quản trị hệ thống hiện đại, việc giám sát tình trạng hoạt động của VPS (Virtual Private Server) không còn là tùy chọn mà trở thành yêu cầu bắt buộc. Một hệ thống monitoring hiệu quả giúp bạn chủ động phát hiện sự cố trước khi chúng ảnh hưởng đến người dùng, tối ưu hóa tài nguyên, và đảm bảo tính khả dụng của dịch vụ. Tuy nhiên, nhiều giải pháp monitoring chuyên nghiệp lại đi kèm chi phí đáng kể, khiến các cá nhân và startup e ngại.

May mắn thay, với sự kết hợp của Prometheus, Grafana và Telegram Bot, bạn có thể xây dựng một hệ thống monitoring & alert hoàn chỉnh, mạnh mẽ, và hoàn toàn miễn phí. Bộ ba công cụ này tạo thành một stack monitoring linh hoạt: Prometheus đảm nhận thu thập và lưu trữ metrics, Grafana cung cấp giao diện trực quan hóa dữ liệu, và Telegram Bot đóng vai trò kênh thông báo cảnh báo tức thì, trực tiếp đến điện thoại của bạn.

Tại sao chọn Prometheus, Grafana và Telegram Bot?

Trước khi đi vào triển khai cụ thể, hãy cùng phân tích lý do đây là sự lựa chọn tối ưu cho hệ thống monitoring miễn phí.

Ưu điểm của Prometheus

  • Mã nguồn mở và miễn phí hoàn toàn: Được phát triển bởi SoundCloud và hiện là một dự án của Cloud Native Computing Foundation (CNCF).
  • Mô hình dữ liệu đa chiều: Lưu trữ dữ liệu dưới dạng time-series với các labels, cho phép query linh hoạt và phân tích sâu.
  • Pull-based architecture: Prometheus chủ động "kéo" (scrape) metrics từ các target được cấu hình, phù hợp với môi trường động.
  • Ngôn ngữ truy vấn mạnh mẽ (PromQL): Cho phép thực hiện các truy vấn phức tạp để phân tích và cảnh báo.
  • Tích hợp dễ dàng: Hỗ trợ hàng trăm exporters cho các dịch vụ phổ biến (Node Exporter cho server metrics, MySQL Exporter, Nginx Exporter...).

Sức mạnh của Grafana

  • Trực quan hóa dữ liệu đỉnh cao: Cung cấp vô số loại biểu đồ, dashboard tùy biến cao, giúp biến dữ liệu thô thành thông tin dễ hiểu.
  • Hỗ trợ nhiều nguồn dữ liệu: Ngoài Prometheus, Grafana có thể kết nối với Graphite, InfluxDB, Elasticsearch và nhiều cơ sở dữ liệu khác.
  • Cộng đồng lớn mạnh: Kho dashboard mẫu (Grafana Dashboards) đồ sộ, bạn có thể import và sử dụng ngay.
  • Cảnh báo linh hoạt: Tích hợp sẵn cơ chế alerting, có thể kết nối với nhiều kênh thông báo.

Telegram Bot - Kênh cảnh báo lý tưởng

  • Hoàn toàn miễn phí: Không giới hạn số lượng tin nhắn, hỗ trợ nhóm và kênh.
  • Tốc độ cực nhanh: Thông báo đến điện thoại gần như ngay lập tức.
  • Đa nền tảng: Có ứng dụng cho mọi hệ điều hành phổ biến (iOS, Android, Desktop).
  • API đơn giản và mạnh mẽ: Dễ dàng tích hợp vào hệ thống alerting.
  • Bảo mật tốt: Hỗ trợ mã hóa end-to-end cho các cuộc trò chuyện bí mật.

Kiến trúc hệ thống đề xuất

Hệ thống của chúng ta sẽ hoạt động theo kiến trúc sau:

  1. Node Exporter chạy trên VPS cần giám sát, phơi bày các metrics hệ thống (CPU, RAM, Disk, Network...).
  2. Prometheus Server định kỳ scrape metrics từ Node Exporter và lưu trữ vào cơ sở dữ liệu time-series của nó.
  3. Alertmanager (thành phần của Prometheus) xử lý các cảnh báo được kích hoạt từ Prometheus dựa trên rules.
  4. Grafana kết nối đến Prometheus để query dữ liệu và hiển thị trên dashboard.
  5. Telegram Bot nhận webhook từ Alertmanager và gửi thông báo đến điện thoại của quản trị viên.

Lưu ý: Toàn bộ các thành phần này có thể được triển khai trên chính VPS cần giám sát hoặc trên một VPS riêng (monitoring server).

Hướng dẫn triển khai từng bước

Bước 1: Cài đặt Node Exporter trên VPS mục tiêu

Node Exporter là thành phần bắt buộc để thu thập metrics hệ thống. Thực hiện các lệnh sau trên VPS cần giám sát (giả sử dùng Ubuntu/Debian):

wget https://github.com/prometheus/node_exporter/releases/download/v1.6.0/node_exporter-1.6.0.linux-amd64.tar.gz
tar xvfz node_exporter-1.6.0.linux-amd64.tar.gz
sudo mv node_exporter-1.6.0.linux-amd64/node_exporter /usr/local/bin/
sudo useradd -rs /bin/false node_exporter
sudo nano /etc/systemd/system/node_exporter.service

Tạo file service với nội dung:

[Unit]
Description=Node Exporter
After=network.target

[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter

[Install]
WantedBy=multi-user.target

Khởi động dịch vụ:

sudo systemctl daemon-reload
sudo systemctl start node_exporter
sudo systemctl enable node_exporter

Kiểm tra Node Exporter đã hoạt động bằng cách truy cập http://your-server-ip:9100/metrics.

Bước 2: Cài đặt Prometheus Server và Alertmanager

Thực hiện trên monitoring server (có thể là chính VPS cần giám sát):

wget https://github.com/prometheus/prometheus/releases/download/v2.47.0/prometheus-2.47.0.linux-amd64.tar.gz
wget https://github.com/prometheus/alertmanager/releases/download/v0.25.0/alertmanager-0.25.0.linux-amd64.tar.gz
tar xvfz prometheus-2.47.0.linux-amd64.tar.gz
tar xvfz alertmanager-0.25.0.linux-amd64.tar.gz
sudo mv prometheus-2.47.0.linux-amd64/ prometheus-2.47.0.linux-amd64/alertmanager /usr/local/bin/

Tạo cấu hình Prometheus (/etc/prometheus/prometheus.yml):

global:
scrape_interval: 15s
evaluation_interval: 15s

alerting:
alertmanagers:
- static_configs:
- targets: ['localhost:9093']

rule_files:
- /etc/prometheus/alert_rules.yml

scrape_configs:
- job_name: 'node_exporter'
static_configs:
- targets: ['your-vps-ip:9100']

Tạo file rule cảnh báo mẫu (/etc/prometheus/alert_rules.yml):

groups:
- name: server_alert
rules:
- alert: HighCPUUsage
expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
for: 5m
labels:
severity: warning
annotations:
summary: "High CPU usage on {{ $labels.instance }}"
description: "CPU usage is {{ $value }}%"

- alert: HighMemoryUsage
expr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100 > 85
for: 5m
labels:
severity: warning
annotations:
summary: "High memory usage on {{ $labels.instance }}"
description: "Memory usage is {{ $value }}%"

Bước 3: Cấu hình Alertmanager với Telegram Bot

Đầu tiên, tạo một Telegram Bot thông qua @BotFather trên Telegram và lấy API Token. Sau đó, tạo một nhóm (group) hoặc kênh (channel), thêm bot vào, và lấy Chat ID.

Cấu hình Alertmanager (/etc/alertmanager/alertmanager.yml):

global:
resolve_timeout: 5m

route:
group_by: ['alertname']
group_wait: 10s
group_interval: 10s
repeat_interval: 1h
receiver: 'telegram_bot'

receivers:
- name: 'telegram_bot'
webhook_configs:
- url: 'http://localhost:8080/alert'
send_resolved: true

inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'instance']

Tiếp theo, cài đặt một webhook server đơn giản (viết bằng Python với Flask) để chuyển tiếp cảnh báo từ Alertmanager sang Telegram:

pip3 install flask requests
nano telegram_webhook.py

Nội dung script:

from flask import Flask, request, jsonify
import requests
import os

app = Flask(__name__)
TELEGRAM_TOKEN = os.getenv('TELEGRAM_TOKEN', 'YOUR_BOT_TOKEN')
CHAT_ID = os.getenv('CHAT_ID', 'YOUR_CHAT_ID')
TELEGRAM_API_URL = f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage"

def send_telegram_alert(alert_data):
message = f"🚨 *{alert_data['status'].upper()}*\n"
message += f"*Alert:* {alert_data['labels']['alertname']}\n"
message += f"*Instance:* {alert_data['labels'].get('instance', 'N/A')}\n"
message += f"*Severity:* {alert_data['labels'].get('severity', 'N/A')}\n\n"
message += f"{alert_data['annotations'].get('summary', '')}\n"
message += f"{alert_data['annotations'].get('description', '')}"

payload = {
"chat_id": CHAT_ID,
"text": message,
"parse_mode": "Markdown"
}
response = requests.post(TELEGRAM_API_URL, json=payload)
return response.ok

@app.route('/alert', methods=['POST'])
def alert():
data = request.json
for alert in data.get('alerts', []):
send_telegram_alert(alert)
return jsonify({"status": "ok"}), 200

if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080)

Chạy webhook server: python3 telegram_webhook.py &

Bước 4: Cài đặt và cấu hình Grafana

Cài đặt Grafana trên monitoring server:

sudo apt-get install -y adduser libfontconfig1 musl
wget https://dl.grafana.com/oss/release/grafana_10.1.5_amd64.deb
sudo dpkg -i grafana_10.1.5_amd64.deb
sudo systemctl start grafana-server
sudo systemctl enable grafana-server

Truy cập http://your-server-ip:3000 (mặc định đăng nhập với admin/admin). Thực hiện:

  1. Thêm Data Source: Chọn Prometheus, nhập URL http://localhost:9090.
  2. Import dashboard mẫu: Vào Import, nhập ID 1860 (Node Exporter Full), chọn Data Source vừa tạo.

Kết quả đạt được và lợi ích

Sau khi triển khai thành công, bạn sẽ sở hữu một hệ thống monitoring chuyên nghiệp với các khả năng:

  • Giám sát thời gian thực: Dashboard Grafana hiển thị đầy đủ thông tin về CPU, memory, disk I/O, network traffic, system load...
  • Cảnh báo thông minh: Nhận thông báo qua Telegram ngay khi CPU vượt 80%, memory vượt 85%, disk sắp đầy, hoặc dịch vụ ngừng hoạt động.
  • Phân tích lịch sử: Prometheus lưu trữ dữ liệu trong 15 ngày (có thể cấu hình dài hơn), cho phép bạn phân tích xu hướng sử dụng tài nguyên.
  • Chi phí bằng 0: Toàn bộ phần mềm sử dụng đều là mã nguồn mở, không phát sinh chi phí bản quyền.
  • Khả năng mở rộng: Dễ dàng thêm các exporters khác để giám sát database, web server, ứng dụng...

Mở rộng hệ thống

Khi hệ thống phát triển, bạn có thể mở rộng theo các hướng sau:

  1. Giám sát nhiều VPS: Chỉ cần cài Node Exporter trên mỗi VPS và thêm target vào Prometheus.
  2. Giám sát ứng dụng: Sử dụng thư viện client Prometheus cho ngôn ngữ lập trình của bạn (Python, Go, Java...) để expose metrics ứng dụng.
  3. Giám sát database: Cài đặt MySQL Exporter, PostgreSQL Exporter để theo dõi hiệu năng database.
  4. Giám sát web server: Sử dụng Nginx Exporter hoặc Apache Exporter.
  5. Nâng cao bảo mật: Đặt Grafana và Prometheus sau reverse proxy (Nginx) với xác thực cơ bản hoặc SSL.

Kết luận

Việc xây dựng hệ thống Monitoring & Alert với Prometheus, Grafana và Telegram Bot không chỉ khả thi mà còn thực sự hiệu quả, ngay cả với ngân sách bằng 0. Giải pháp này mang lại khả năng giám sát tương đương các dịch vụ thương mại, với ưu điểm về tính linh hoạt và chủ động hoàn toàn. Bằng việc đầu tư một vài giờ thiết lập ban đầu, bạn sẽ tiết kiệm được hàng giờ xử lý sự cố khẩn cấp sau này, đồng thời nâng cao độ ổn định và hiệu năng của hệ thống. Đây chính là bước đi chiến lược quan trọng cho bất kỳ cá nhân hay tổ chức nào nghiêm túc trong việc quản trị hạ tầng công nghệ.