Monitor VPS Với Grafana + Prometheus 2026: Dashboard Đẹp, Alert Telegram, Setup 15 Phút
VPS của bạn chạy 24/7, nhưng làm sao biết khi nào CPU lên 100%, RAM sắp hết, hay disk sắp đầy? Grafana + Prometheus + Node Exporter là bộ 3 giám sát VPS miễn phí, đẹp, mạnh nhất hiện nay. Trong bài này tôi sẽ hướng dẫn bạn setup toàn bộ hệ thống monitoring chỉ trong 15 phút, kèm alert Telegram tự động khi có sự cố.
📋 Mục Lục
Tại Sao Cần Monitor VPS?
Khi bạn chạy website, bot, hoặc các dịch vụ trên VPS, việc không biết tình trạng server là cực kỳ nguy hiểm:
| Sự cố | Hậu quả | Monitor phát hiện |
|---|---|---|
| CPU 100% | Website load chậm, timeout | Alert ngay khi >90% |
| RAM hết | OOM Killer kill process, MySQL chết | Cảnh báo khi >85% |
| Disk đầy | Không ghi log, database corrupt | Alert khi >80% |
| Network spike | DDoS, bị tấn công | Giám sát bandwidth realtime |
| Service down | Website 502, không ai biết | Health check + Telegram alert |
Kiến Trúc Prometheus + Grafana + Node Exporter
Đây là stack monitoring phổ biến nhất thế giới, dùng bởi mọi công ty từ startup đến fortune 500:
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ Node │────▶│ Prometheus │────▶│ Grafana │
│ Exporter │ │ (Database) │ │ (Dashboard) │
│ (Collector) │ │ Lưu metrics │ │ Hiển thị │
└─────────────┘ └──────┬───────┘ └─────────────┘
│
┌──────▼───────┐
│ AlertManager │──▶ Telegram Alert
└──────────────┘
- Node Exporter: Agent nhỏ chạy trên VPS, thu thập CPU, RAM, disk, network, uptime. Export qua HTTP port 9100.
- Prometheus: Time-series database, scrape dữ liệu từ Node Exporter mỗi 15 giây. Lưu trữ metrics theo thời gian.
- Grafana: Dashboard trực quan, query dữ liệu từ Prometheus. Hỗ trợ hàng trăm loại biểu đồ.
- AlertManager (optional): Gửi alert qua Telegram, Email, Slack khi vượt ngưỡng.
Yêu Cầu
- VPS chạy Ubuntu 22.04/24.04 hoặc Debian 12
- RAM trống ~1GB (Prometheus ~500MB, Grafana ~300MB, Node Exporter ~50MB)
- Port mở: 9090 (Prometheus), 3000 (Grafana), 9100 (Node Exporter)
- Telegram Bot Token (nếu muốn alert)
Bước 1: Cài Prometheus
1.1 Download & Cài Đặt
# Download Prometheus
cd /tmp
wget https://github.com/prometheus/prometheus/releases/download/v2.55.0/prometheus-2.55.0.linux-amd64.tar.gz
tar xzf prometheus-2.55.0.linux-amd64.tar.gz
sudo mv prometheus-2.55.0.linux-amd64 /opt/prometheus
1.2 Cấu Hình Prometheus
sudo tee /opt/prometheus/prometheus.yml << 'EOF'
global:
scrape_interval: 15s
evaluation_interval: 15s
alerting:
alertmanagers:
- static_configs:
- targets: ['localhost:9093']
rule_files:
- "rules.yml"
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['localhost:9100']
EOF
1.3 Tạo Rules File (ngưỡng cảnh báo)
sudo tee /opt/prometheus/rules.yml << 'EOF'
groups:
- name: vps_alerts
rules:
- alert: HighCPU
expr: 100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 90
for: 5m
labels: { severity: critical }
annotations:
summary: "CPU > 90% trên {{ $labels.instance }}"
description: "CPU đang ở {{ $value }}%"
- alert: HighRAM
expr: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 > 85
for: 5m
labels: { severity: warning }
annotations:
summary: "RAM > 85% trên {{ $labels.instance }}"
- alert: DiskFull
expr: (1 - (node_filesystem_avail_bytes{fstype!="tmpfs"} / node_filesystem_size_bytes{fstype!="tmpfs"})) * 100 > 80
for: 10m
labels: { severity: critical }
annotations:
summary: "Disk > 80% trên {{ $labels.instance }}"
- alert: InstanceDown
expr: up == 0
for: 2m
labels: { severity: critical }
annotations:
summary: "{{ $labels.instance }} DOWN!"
EOF
1.4 Tạo Systemd Service
sudo tee /etc/systemd/system/prometheus.service << 'EOF'
[Unit]
Description=Prometheus Monitoring
After=network.target
[Service]
Type=simple
ExecStart=/opt/prometheus/prometheus \
--config.file=/opt/prometheus/prometheus.yml \
--storage.tsdb.path=/var/lib/prometheus \
--storage.tsdb.retention.time=30d
Restart=always
[Install]
WantedBy=multi-user.target
EOF
sudo mkdir -p /var/lib/prometheus
sudo systemctl daemon-reload
sudo systemctl enable --now prometheus
curl http://localhost:9090 → nếu ra HTML là OK. Truy cập http://YOUR_VPS_IP:9090 để mở Prometheus UI.
Bước 2: Cài Node Exporter
cd /tmp
wget https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux-amd64.tar.gz
tar xzf node_exporter-1.8.2.linux-amd64.tar.gz
sudo mv node_exporter-1.8.2.linux-amd64/node_exporter /usr/local/bin/
sudo tee /etc/systemd/system/node-exporter.service << 'EOF'
[Unit]
Description=Node Exporter
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/node_exporter \
--collector.systemd \
--collector.processes
Restart=always
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now node-exporter
curl http://localhost:9100/metrics → sẽ thấy hàng nghìn dòng metrics về CPU, RAM, disk...
Bước 3: Cài Grafana
# Thêm Grafana repo
sudo apt-get install -y software-properties-common
sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
# Cài đặt
sudo apt update
sudo apt install -y grafana
# Start
sudo systemctl enable --now grafana-server
# Truy cập http://YOUR_VPS_IP:3000
# Login: admin / admin (đổi password khi login lần đầu)
Cấu hình Data Source: Sau khi login Grafana:
- Vào Configuration → Data Sources → Add data source
- Chọn Prometheus
- URL:
http://localhost:9090 - Click Save & Test — phải hiện ✅ green
Bước 4: Import Dashboard Đẹp
Thay vì tự tạo dashboard từ đầu, bạn import dashboard có sẵn từ Grafana community. Dashboard ID 1860 là nổi tiếng nhất cho Node Exporter:
- Vào Dashboards → Import
- Nhập ID: 1860 → Load
- Chọn Prometheus data source vừa tạo
- Import
| Dashboard ID | Tên | Phù hợp |
|---|---|---|
| 1860 | Node Exporter Full | ⭐ Tổng quan đầy đủ nhất |
| 16098 | Node Exporter / Darks | Dark theme đẹp |
| 13978 | Node Exporter Server Metrics | Đơn giản, nhẹ |
| 12270 | Node Exporter Memory & CPU | Tập trung CPU/RAM |
Dashboard 1860 sẽ hiển thị:
- 📊 CPU Usage %, Load Average
- 🧠 RAM Usage, Swap
- 💾 Disk Usage từng partition, I/O
- 🌐 Network Traffic IN/OUT
- ⏱ Uptime, số process đang chạy
- 🔢 System overview với tất cả chỉ số
Bước 5: Alert Telegram Khi VPS Có Vấn Đề
Dashboard đẹp nhưng bạn đâu có ngồi canh 24/7. Alert Telegram giúp bạn biết ngay khi VPS gặp vấn đề.
5.1 Tạo Telegram Bot
- Chat với @BotFather trên Telegram
- Gửi
/newbot→ đặt tên → nhận BOT TOKEN - Chat với bot mới tạo, gửi 1 tin bất kỳ
- Truy cập
https://api.telegram.org/bot<TOKEN>/getUpdatesđể lấy CHAT_ID
5.2 Cài AlertManager
cd /tmp
wget https://github.com/prometheus/alertmanager/releases/download/v0.28.0/alertmanager-0.28.0.linux-amd64.tar.gz
tar xzf alertmanager-0.28.0.linux-amd64.tar.gz
sudo mv alertmanager-0.28.0.linux-amd64 /opt/alertmanager
5.3 Cấu Hình AlertManager cho Telegram
sudo tee /opt/alertmanager/alertmanager.yml << 'EOF'
global:
resolve_timeout: 5m
route:
receiver: 'telegram'
group_by: ['alertname']
group_wait: 10s
group_interval: 10s
repeat_interval: 1h
receivers:
- name: 'telegram'
telegram_configs:
- bot_token: 'YOUR_BOT_TOKEN'
chat_id: YOUR_CHAT_ID
parse_mode: 'HTML'
message: |
🚨 {{ .GroupLabels.alertname }}
Status: {{ .Status }}
{{ range .Alerts }}
━━━━━━━━━━━━━
Alert: {{ .Annotations.summary }}
Details: {{ .Annotations.description }}
Time: {{ .StartsAt.Format "02/01/2006 15:04:05" }}
{{ end }}
EOF
5.4 Tạo Systemd Service
sudo tee /etc/systemd/system/alertmanager.service << 'EOF'
[Unit]
Description=AlertManager
After=network.target
[Service]
Type=simple
ExecStart=/opt/alertmanager/alertmanager --config.file=/opt/alertmanager/alertmanager.yml
Restart=always
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now alertmanager
sudo systemctl stop node-exporter → sau 2 phút bạn sẽ nhận Telegram alert "Instance DOWN!". Start lại để alert resolve.
Chi Phí & Tài Nguyên
| Thành phần | RAM | CPU | Disk | Giá |
|---|---|---|---|---|
| Node Exporter | ~50MB | <1% | ~100MB | Miễn phí |
| Prometheus | ~500MB | 2-5% | ~2GB/tháng | Miễn phí |
| Grafana | ~300MB | 1-3% | ~500MB | Miễn phí |
| AlertManager | ~50MB | <1% | ~50MB | Miễn phí |
| Tổng | ~900MB | 3-8% | ~2.6GB | $0 |
VPS 2GB RAM là đủ chạy cả stack này + website nhẹ. Với TrumVPS giá chỉ từ 40K/tháng, bạn có hẳn 4GB RAM để thoải mái monitor.
Câu Hỏi Thường Gặp
Có cần domain không?
Không. Bạn truy cập bằng IP: http://IP:3000. Nếu muốn đẹp hơn, dùng Nginx reverse proxy + Let's Encrypt SSL.
Monitor nhiều VPS cùng lúc được không?
Được. Chỉ cần cài Node Exporter trên từng VPS, thêm IP vào prometheus.yml. Dashboard 1860 hỗ trợ chọn instance từ dropdown.
Có nặng hơn Netdata không?
Netdata nhẹ hơn (cài 1 lệnh) nhưng không linh hoạt bằng. Prometheus+Grafana mạnh hơn về alert, query, multi-server. Đọc thêm so sánh Netdata tại đây.
Dữ liệu lưu bao lâu?
Mặc định 30 ngày (cấu hình trong --storage.tsdb.retention.time). Bạn có thể tăng/giảm tùy nhu cầu disk.
Sao không dùng Cloud Monitoring như Datadog?
Datadog $15/host/tháng. Stack này $0/host/tháng. Với 3 VPS bạn tiết kiệm $540/năm. Đủ tiền thuê VPS 4 năm.
🚀 Cần VPS Mạnh Để Chạy Monitoring?
TrumVPS từ 40K/tháng với 4GB RAM, SSD NVMe, đủ chạy Prometheus + Grafana + Website + Bot Telegram. Kích hoạt tự động trong 5 phút!
Thuê VPS Ngay - Chỉ Từ 40K