Giám Sát VPS Bằng Prometheus, Node Exporter Và Grafana

Thiết lập Prometheus, Node Exporter và Grafana để theo dõi CPU, RAM, disk, network trên VPS Linux, dựng dashboard và bảo vệ cổng monitoring an toàn.

Uptime check cho biết dịch vụ còn truy cập được hay không, nhưng để tìm nguyên nhân VPS chậm bạn cần metric về CPU, RAM, disk I/O, filesystem và network theo thời gian. Prometheus thu thập metric, Node Exporter phơi bày metric hệ điều hành Linux và Grafana trực quan hóa dữ liệu thành dashboard. Bài viết này hướng dẫn mô hình cài đặt thực tế, cách scrape metric và những lưu ý quan trọng để không vô tình public cổng monitoring ra Internet.

Điểm quan trọng Hãy lựa chọn dịch vụ dựa trên nhu cầu sử dụng thực tế và theo dõi tài nguyên thường xuyên để có hiệu quả tốt nhất.

Một website “online” chưa có nghĩa VPS đang khỏe. CPU có thể tăng dần, RAM sắp cạn, disk gần đầy hoặc network xuất hiện spike nhưng health check HTTP vẫn trả 200.

Để quan sát sâu hơn, một stack phổ biến gồm:

  • Node Exporter: xuất metric hệ điều hành Linux;
  • Prometheus: định kỳ scrape và lưu metric time series;
  • Grafana: đọc dữ liệu từ Prometheus và dựng dashboard/alert.

Bài viết này triển khai mô hình dễ hiểu cho một hoặc vài VPS, đồng thời giữ các port monitoring khỏi Internet công khai.

Nếu bạn chỉ cần biết website có down hay không, bài Cài Uptime Kuma giám sát VPS và website phù hợp hơn. Prometheus/Grafana giải quyết lớp metric sâu hơn.

Kiến trúc đề xuất

Mô hình đơn giản:

VPS ứng dụng
  └─ Node Exporter :9100
          ↓ scrape
VPS monitoring
  ├─ Prometheus :9090
  └─ Grafana :3000

Nếu chỉ có một VPS, bạn có thể cài cả ba trên cùng máy để học. Với production, tách monitoring khỏi application server thường dễ quản lý hơn.

Node Exporter thu thập những gì?

Node Exporter cung cấp nhiều metric kernel và hardware của hệ thống Unix-like, ví dụ:

  • CPU time;
  • memory;
  • filesystem;
  • disk I/O;
  • network interface;
  • load average;
  • file descriptor;
  • entropy và nhiều collector khác.

Prometheus official guide dùng endpoint mặc định:

http://localhost:9100/metrics

Cài Node Exporter trên VPS cần giám sát

Trên Ubuntu, một cách thuận tiện là dùng package của distro:

sudo apt update
sudo apt install -y prometheus-node-exporter

Kiểm tra:

sudo systemctl status prometheus-node-exporter

Test local:

curl http://127.0.0.1:9100/metrics | head

Bạn sẽ thấy metric dạng Prometheus text exposition.

Nếu distro không có package phù hợp, có thể tải binary chính thức từ release của Node Exporter và tự tạo systemd service. Với production, nên cố định version thay vì dùng URL “latest” mơ hồ trong script.

Không public port 9100 cho toàn Internet

Node Exporter thường không có authentication tích hợp theo cách bạn mong đợi từ một admin panel.

Đừng mở:

9100/tcp ALLOW Anywhere

nếu Prometheus chỉ cần scrape từ một monitoring server.

Thay vào đó:

  • dùng private network;
  • Tailscale;
  • WireGuard;
  • firewall allow đúng IP Prometheus;
  • hoặc bind phù hợp với kiến trúc của bạn.

Ví dụ UFW chỉ cho monitoring server truy cập:

sudo ufw allow from 10.10.0.5 to any port 9100 proto tcp

Thay 10.10.0.5 bằng IP private thật của Prometheus.

Nếu bạn đã dùng Tailscale, có thể tham khảo Cài Tailscale trên VPS Ubuntu để đưa traffic monitoring qua mạng riêng.

Cài Prometheus

Trên Ubuntu:

sudo apt update
sudo apt install -y prometheus

Kiểm tra service:

sudo systemctl status prometheus

File cấu hình thường nằm tại:

/etc/prometheus/prometheus.yml

Sao lưu trước khi sửa:

sudo cp /etc/prometheus/prometheus.yml /etc/prometheus/prometheus.yml.bak

Thêm VPS vào Prometheus

Ví dụ cấu hình:

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: node
    static_configs:
      - targets:
          - '10.10.0.11:9100'
          - '10.10.0.12:9100'

Prometheus official Node Exporter guide cũng sử dụng mô hình scrape_configs với target port 9100.

Trước khi restart, validate bằng promtool nếu package có cung cấp:

promtool check config /etc/prometheus/prometheus.yml

Sau đó:

sudo systemctl restart prometheus
sudo systemctl status prometheus

Kiểm tra target đã UP chưa

Prometheus mặc định có web UI trên port 9090.

Nếu truy cập local qua SSH tunnel:

ssh -L 9090:127.0.0.1:9090 admin@monitoring-vps

Sau đó mở:

http://127.0.0.1:9090

Kiểm tra trang Targets. VPS cần có trạng thái UP.

Nếu DOWN, kiểm tra từ monitoring server:

curl http://10.10.0.11:9100/metrics

Nếu curl không tới được, lỗi nằm ở routing/firewall/Node Exporter trước khi nằm ở Prometheus.

Query metric cơ bản

Một số PromQL hữu ích.

CPU usage

100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

RAM available

node_memory_MemAvailable_bytes

Tỷ lệ RAM dùng:

100 * (1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)

Disk free

node_filesystem_avail_bytes{fstype!="tmpfs"}

Network receive rate

rate(node_network_receive_bytes_total[5m])

PromQL rất mạnh, nhưng nên hiểu metric trước khi copy dashboard/query từ Internet.

Cài Grafana trên Ubuntu

Grafana Labs cung cấp APT repository chính thức cho Debian/Ubuntu.

Cài dependency:

sudo apt-get install -y apt-transport-https wget gnupg

Tạo keyring và import key:

sudo mkdir -p /etc/apt/keyrings
sudo wget -O /etc/apt/keyrings/grafana.asc https://apt.grafana.com/gpg-full.key
sudo chmod 644 /etc/apt/keyrings/grafana.asc

Thêm stable repository:

echo "deb [signed-by=/etc/apt/keyrings/grafana.asc] https://apt.grafana.com stable main" | sudo tee /etc/apt/sources.list.d/grafana.list

Cài Grafana OSS:

sudo apt-get update
sudo apt-get install -y grafana

Khởi động:

sudo systemctl enable --now grafana-server
sudo systemctl status grafana-server

Không public Grafana port 3000 tùy tiện

Grafana là giao diện quản trị. Không nên mở port 3000 cho toàn Internet chỉ để tiện truy cập.

Các lựa chọn tốt hơn:

  • reverse proxy HTTPS + authentication;
  • VPN/private network;
  • Cloudflare Tunnel + Access;
  • firewall allow IP quản trị.

Bạn có thể tham khảo bài Dùng Cloudflare Tunnel trên VPS nếu muốn xuất bản dashboard qua lớp Access thay vì mở port trực tiếp.

Kết nối Grafana với Prometheus

Grafana có Prometheus data source tích hợp sẵn.

Trong Grafana:

  1. mở Connections;
  2. thêm Prometheus data source;
  3. nhập URL Prometheus;
  4. Save & test.

Nếu Grafana và Prometheus trên cùng host:

http://localhost:9090

Nếu chạy trong Docker container riêng, localhost sẽ trỏ vào namespace của chính container, không phải host. Khi đó phải dùng hostname/container network phù hợp.

Dashboard nên có gì?

Một dashboard VPS thực tế nên theo dõi ít nhất:

  • CPU usage;
  • load average;
  • RAM và swap;
  • filesystem usage;
  • disk read/write;
  • disk latency nếu metric phù hợp;
  • network RX/TX;
  • reboot time;
  • file descriptor;
  • service/app metric nếu có.

Đừng nhồi 50 biểu đồ vào một dashboard. Hãy ưu tiên metric giúp trả lời câu hỏi vận hành.

Alert quan trọng hơn dashboard đẹp

Dashboard chỉ hữu ích khi có người nhìn.

Các alert thường cần:

  • disk > 85–90%;
  • memory pressure kéo dài;
  • CPU cao liên tục;
  • instance down;
  • exporter scrape failure;
  • filesystem read-only;
  • service-specific metric bất thường.

Không đặt ngưỡng CPU 80% trong 10 giây rồi báo động. Workload build hoặc cron có thể spike bình thường.

Alert nên dựa vào thời lượng + mức độ + bối cảnh.

Theo dõi disk trước khi đầy

Một query tỷ lệ filesystem dùng:

100 * (1 - (
  node_filesystem_avail_bytes{fstype!="tmpfs"}
  /
  node_filesystem_size_bytes{fstype!="tmpfs"}
))

Nếu bạn đã gặp sự cố storage, xem thêm VPS Ubuntu bị đầy ổ đĩa để xử lý nguyên nhân thay vì chỉ tăng alert.

Security cho monitoring stack

Một stack monitoring thường chứa thông tin nhạy cảm:

  • hostname;
  • IP;
  • load pattern;
  • filesystem;
  • service topology;
  • endpoint nội bộ.

Do đó:

  • không public Node Exporter;
  • hạn chế Prometheus UI;
  • bảo vệ Grafana;
  • đổi mật khẩu admin mặc định ngay;
  • update package;
  • giới hạn network;
  • backup Grafana provisioning/dashboard quan trọng.

Dùng Ansible để triển khai Node Exporter nhiều máy

Khi có nhiều VPS, cài thủ công từng exporter rất tốn thời gian.

Bạn có thể dùng Ansible để:

  • cài package;
  • enable service;
  • cấu hình firewall;
  • thêm target vào inventory monitoring.

Xem bài Tự động quản lý nhiều VPS bằng Ansible.

Xử lý lỗi thường gặp

Prometheus target DOWN

Kiểm tra:

systemctl status prometheus-node-exporter
ss -tulnp | grep 9100
curl http://IP_NODE:9100/metrics

Sau đó kiểm tra firewall và route.

Grafana không kết nối được Prometheus

Từ chính host Grafana:

curl http://PROMETHEUS_IP:9090/-/ready

Nếu Grafana chạy trong container, nhớ kiểm tra network namespace.

Metric filesystem xuất hiện nhiều mount không cần thiết

Có thể lọc bằng PromQL hoặc cấu hình collector/filter phù hợp. Tránh alert trên pseudo filesystem như tmpfs, overlay nếu không phục vụ mục đích của bạn.

Monitoring server tự hết disk

Prometheus lưu time series local và dung lượng sẽ tăng theo:

  • số target;
  • số metric;
  • scrape interval;
  • retention.

Hãy theo dõi chính Prometheus server và thiết lập retention phù hợp.

Checklist triển khai

  • Node Exporter chạy trên từng VPS.
  • Port 9100 không public Internet.
  • Prometheus scrape target thành công.
  • promtool validate config.
  • Grafana kết nối được Prometheus.
  • Dashboard theo dõi CPU/RAM/disk/network.
  • Có alert cho disk, instance down và resource pressure.
  • Grafana được bảo vệ bằng HTTPS/private access.
  • Monitoring server cũng được monitor.
  • Retention phù hợp với dung lượng disk.

FAQ

Prometheus và Uptime Kuma có trùng nhau không?

Không hoàn toàn. Uptime Kuma mạnh ở availability check, còn Prometheus thu metric chi tiết để phân tích trạng thái tài nguyên và ứng dụng theo thời gian.

Node Exporter có làm VPS chậm không?

Thông thường overhead thấp, nhưng vẫn nên đo trên workload thật và chỉ bật collector cần thiết nếu hệ thống đặc biệt nhạy cảm.

Có cần cài Grafana trên từng VPS không?

Không. Thường chỉ cần Node Exporter trên VPS được giám sát, còn Prometheus/Grafana chạy tập trung.

Port 9100 có cần public không?

Không. Chỉ Prometheus cần truy cập, vì vậy nên dùng private network hoặc firewall allow đúng nguồn.

Grafana có sẵn Prometheus data source không?

Có. Grafana hiện tích hợp Prometheus data source, không cần cài plugin riêng cho use case thông thường.

Kết luận

Prometheus, Node Exporter và Grafana tạo thành một stack monitoring mạnh cho VPS Linux: exporter thu metric, Prometheus lưu time series và Grafana biến dữ liệu thành dashboard có thể quan sát.

Điểm quan trọng nhất không phải dashboard đẹp, mà là biết metric nào phản ánh rủi ro thật, bảo vệ cổng monitoring và thiết lập alert trước khi sự cố ảnh hưởng người dùng.

Nếu bạn đang vận hành nhiều website hoặc ứng dụng trên VPS, có thể tham khảo các gói VPS tại HUONG CLOUD và lựa chọn tài nguyên phù hợp với tải thực tế được đo từ monitoring.

Nguồn tham khảo

Kết luận

Nếu chưa chắc cấu hình hoặc loại dịch vụ nào phù hợp, hãy gửi nhu cầu thực tế để đội ngũ hỗ trợ tư vấn trước khi mua.

Chưa biết nên chọn gói nào?

Xem bảng giá VPS hoặc liên hệ đội ngũ hỗ trợ để chọn cấu hình phù hợp.

Xem bảng giá VPS →