So sánh 3 phương án giám sát cụm Proxmox VE
Quản trị cụm Proxmox từ 3 node trở lên với tầm 40-50 VM/LXC đòi hỏi khả năng quan sát liên tục. Bạn cần nắm tức thì trạng thái phần cứng lẫn máy ảo. Hiện có 3 cách tiếp cận phổ biến:
- Cách 1: Cài Node Exporter trên từng VM/LXC. Mỗi máy ảo chạy một tiến trình riêng. Prometheus sẽ kéo số liệu từ từng địa chỉ IP.
- Cách 2: Dùng Metric Server có sẵn của Proxmox đẩy về InfluxDB hoặc Graphite. Bạn chỉ cần cấu hình trực tiếp trên giao diện web (GUI). Proxmox sẽ tự động gửi metrics định kỳ.
- Cách 3: Triển khai Proxmox VE Exporter qua REST API kết hợp Prometheus. Exporter đóng vai trò trung gian. Nó dùng API Token đọc số liệu toàn bộ cluster từ node vật lý, VM, LXC đến pool ZFS/Ceph.
Ưu và nhược điểm thực tế của từng giải pháp
1. Cài Node Exporter vào từng máy ảo (Per-VM Agent)
Phương án này lấy thông số sâu nhất từ hệ điều hành khách. Bạn sẽ thấy rõ từng tiến trình, RAM cache hay swap bên trong.
Đổi lại, khâu vận hành rất mệt. Cứ tạo một VM mới là bạn phải setup agent, mở port firewall và cập nhật Prometheus target. Quan trọng hơn, agent trong VM không thể cảnh báo khi đĩa cứng máy chủ vật lý lỗi, Ceph pool suy hao hoặc tiến trình KVM host bị treo.
2. Metric Server tích hợp sẵn (đẩy về InfluxDB)
Thiết lập cực nhanh qua vài click chuột trên Proxmox GUI. Bạn không cần cài thêm service phụ trợ nào.
Rào cản xuất hiện nếu hệ thống monitoring chung của bạn đã chuẩn hóa quanh Prometheus và Alertmanager. Dựng riêng một cụm InfluxDB chỉ để hứng log Proxmox gây lãng phí tài nguyên. Việc gom cảnh báo về một mối cũng phức tạp hơn hẳn.
3. Proxmox VE Exporter kết nối qua REST API
Đây là phương án hợp lý nhất cho đội vận hành. Bạn chỉ cần cấp một API Token với quyền đọc. Exporter tự động thu thập số liệu của mọi VM/LXC mới tạo mà không cần chạm vào OS khách. Giải pháp này bao quát từ phần cứng node, tài nguyên cấp phát đến dung lượng lưu trữ tập trung.
Vì sao Proxmox VE Exporter phù hợp cho môi trường Production?
Khi quy mô hệ thống tăng lên, việc yêu cầu các nhóm dev tự cài agent rất dễ bị sót. Sử dụng Proxmox VE Exporter giúp cô lập hoàn toàn tầng ảo hóa với tầng ứng dụng. Bạn có ngay cái nhìn tổng quan về hạ tầng mà không phụ thuộc vào cấu hình bên trong máy ảo.
Các bước triển khai Proxmox VE Exporter và Prometheus
Bước 1: Tạo User và API Token với quyền tối thiểu (Least Privilege)
Tuyệt đối không dùng tài khoản root để monitor. Hãy tạo riêng một user trên realm pve với quyền chỉ đọc.
Mở shell của một node Proxmox bất kỳ và chạy lần lượt các lệnh sau:
# 1. Tạo role chỉ có quyền đọc số liệu hạ tầng
pveum role add MonitoringRole -privs "VM.Audit Datastore.Audit Sys.Audit Sys.Console"
# 2. Tạo user chuyên dụng
pveum user add prometheus-exporter@pve -comment "Prometheus Monitoring User"
# 3. Gán quyền trên toàn cụm cluster
pveum acl modify / -user prometheus-exporter@pve -role MonitoringRole
# 4. Tạo API Token (tắt Privileged Separation để kế thừa quyền của user)
pveum user token add prometheus-exporter@pve monitoring-token --privsep 0
Màn hình sẽ hiển thị chuỗi Value (token secret). Hãy lưu chuỗi này vào password manager ngay. Proxmox sẽ không bao giờ hiển thị lại lần thứ hai.
Bước 2: Cài đặt Proxmox VE Exporter qua Docker Compose
Bạn có thể dựng exporter ngay trên máy chủ giám sát. Tạo file docker-compose.yml như sau:
services:
proxmox-exporter:
image: prompve/prometheus-pve-exporter:latest
container_name: proxmox-pve-exporter
restart: unless-stopped
ports:
- "9221:9221"
volumes:
- ./pve.yml:/etc/prometheus/pve.yml:ro
Tạo tiếp file cấu hình xác thực pve.yml cùng thư mục:
default:
user: prometheus-exporter@pve
token_name: monitoring-token
token_value: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
verify_ssl: false
Khởi chạy container và kiểm tra kết nối:
docker compose up -d
# Test exporter với IP của một node Proxmox (vi du: 192.168.1.10)
curl -s "http://localhost:9221/pve?target=192.168.1.10" | grep pve_up
Nếu kết quả trả về pve_up 1, exporter đã liên kết thành công với Proxmox API.
Bước 3: Cấu hình Scrape Target trên Prometheus
Proxmox VE Exporter hoạt động theo cơ chế query proxy tương tự Blackbox Exporter. Bạn mở prometheus.yml và thêm cấu hình:
scrape_configs:
- job_name: 'proxmox-ve'
scrape_interval: 20s
scrape_timeout: 15s
metrics_path: /pve
static_configs:
- targets:
- '192.168.1.10:8006' # IP Node pve-01
- '192.168.1.11:8006' # IP Node pve-02
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: '192.168.1.200:9221' # IP may chu chay exporter
Tải lại cấu hình Prometheus:
curl -X POST http://localhost:9090/-/reload
Kinh nghiệm thực chiến khi giám sát Proxmox
1. PromQL Queries thiết yếu cần có trên Dashboard
- Phần trăm RAM thực tế của máy ảo: Cần cài sẵn
qemu-guest-agentbên trong VM để có số liệu RAM chính xác nhất.(pve_guest_memory_used_bytes / pve_guest_memory_size_bytes) * 100 - Phát hiện máy ảo bị crash hoặc tắt ngoài ý muốn:
pve_guest_info{type="qemu"} == 0 - Cảnh báo Storage sắp đầy ngưỡng an toàn (trên 85%):
(pve_storage_used_bytes / pve_storage_size_bytes) * 100 > 85
2. Điều chỉnh chu kỳ Scrape Interval hợp lý
Mỗi lượt scrape buộc exporter thực hiện hàng loạt truy vấn API tới cụm cluster. Với cụm chạy hơn 50 VM, đặt scrape_interval: 5s sẽ khiến tiến trình pvedaemon ăn CPU liên tục. Bạn nên duy trì interval từ 15s đến 30s. Con số này vừa đủ mịn để bắt sự cố, vừa an toàn cho API host.
3. Luôn theo dõi Disk I/O Wait
CPU hiếm khi là điểm nghẽn chính. Thắt nút cổ chai ở hệ thống ảo hóa thường đến từ đĩa cứng. Khi nhiều VM cùng ghi dữ liệu dồn dập, chỉ số iowait trên node vật lý sẽ vọt lên cao. Theo dõi chặt các metric pve_storage_* và I/O delay giúp bạn phát hiện sớm ổ cứng suy hao hoặc pool ZFS bị nghẽn trước khi cả cụm tê liệt.

