Hướng Dẫn 📅 25/05/2026 ⏱ 12 phút đọc

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ố.

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, timeoutAlert ngay khi >90%
RAM hếtOOM Killer kill process, MySQL chếtCảnh báo khi >85%
Disk đầyKhông ghi log, database corruptAlert khi >80%
Network spikeDDoS, bị tấn côngGiám sát bandwidth realtime
Service downWebsite 502, không ai biếtHealth check + Telegram alert
💡 Thực tế: Hầu hết các vụ website sập hàng giờ không ai biết là vì chủ VPS không có monitoring. 15 phút setup hôm nay tiết kiệm hàng giờ debug sau này.

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
                    └──────────────┘

Yêu Cầu

⚠️ Lưu ý: Stack này cần tối thiểu 1GB RAM trống. Nếu VPS bạn chỉ có 1GB, nên nâng cấp lên ít nhất 2GB. TrumVPS 40K/tháng có gói 2GB RAM rất hợp lý.

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
✅ Verify: 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
✅ Verify: 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:

  1. Vào Configuration → Data Sources → Add data source
  2. Chọn Prometheus
  3. URL: http://localhost:9090
  4. 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:

  1. Vào Dashboards → Import
  2. Nhập ID: 1860 → Load
  3. Chọn Prometheus data source vừa tạo
  4. Import
Dashboard IDTênPhù hợp
1860Node Exporter Full⭐ Tổng quan đầy đủ nhất
16098Node Exporter / DarksDark theme đẹp
13978Node Exporter Server MetricsĐơn giản, nhẹ
12270Node Exporter Memory & CPUTập trung CPU/RAM

Dashboard 1860 sẽ hiển thị:

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

  1. Chat với @BotFather trên Telegram
  2. Gửi /newbot → đặt tên → nhận BOT TOKEN
  3. Chat với bot mới tạo, gửi 1 tin bất kỳ
  4. 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
🧪 Test alert: Stop Node Exporter 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ầnRAMCPUDiskGiá
Node Exporter~50MB<1%~100MBMiễn phí
Prometheus~500MB2-5%~2GB/thángMiễn phí
Grafana~300MB1-3%~500MBMiễn phí
AlertManager~50MB<1%~50MBMiễn phí
Tổng~900MB3-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