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.
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:
- mở Connections;
- thêm Prometheus data source;
- nhập URL Prometheus;
- 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.
-
promtoolvalidate 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
- Prometheus — Monitoring Linux host metrics with Node Exporter: https://prometheus.io/docs/guides/node-exporter/
- Grafana — Install on Debian or Ubuntu: https://grafana.com/docs/grafana/latest/setup-grafana/installation/debian/
- Grafana — Configure Prometheus data source: https://grafana.com/docs/grafana/latest/datasources/prometheus/configure/
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 →