1. Mở đầu.
Proxmox Virtual Environment (Proxmox VE) là một nền tảng ảo hóa mã nguồn mở mạnh mẽ và linh hoạt, cho phép bạn quản lý các máy chủ ảo và containervà lưu trữ trong một môi trường đơn giản và hiệu quả. Để đảm bảo hoạt động ổn định và hiệu quả của các máy chủ và ứng dụng chạy trên Proxmox VE, việc giám sát và thu thập thông tin là điều rất quan trọng.
Trong bài viết này, mình sẽ giới thiệu cách sử dụng Prometheus và Prometheus PVE Exporter để thực hiện việc giám sát Proxmox VE một cách chi tiết và hiệu quả.
2. Tóm tắt quy trình triển khai.
- Giới thiệu về Prometheus PVE Exporter: Chúng ta sẽ tìm hiểu về Prometheus PVE Exporter, ứng dụng này giúp thu thập thông tin từ các node Proxmox VE và xuất nó dưới dạng các metric có thể được giám sát bởi Prometheus.
- Cài đặt và Xác thực: Hướng dẫn cách cài đặt và cấu hình Prometheus PVE Exporter, bao gồm việc xác thực sử dụng mật khẩu hoặc token.
- Cấu hình Prometheus: Mình sẽ hướng dẫn cách cấu hình Prometheus để nó có thể lấy dữ liệu từ Prometheus PVE Exporter trên các node Proxmox VE.
- Thực hiện giám sát: Mô tả các metric được xuất bởi Prometheus PVE Exporter và cách bạn có thể sử dụng chúng để giám sát tình trạng và hiệu suất của các máy chủ và ứng dụng Proxmox VE.
3. Cài đặt.
Có 2 lựa chọn cho bạn đó là sử dụng lệnh Pip hoặc Docker Container.
– Sử dụng lệnh Pip.
Dưới đây là một số thông tin về cách cài đặt và sử dụng ứng dụng này.
Yêu cầu bạn cần cài đặt Python 3.6 trở lên.
Bạn có thể cài đặt ứng dụng này bằng pip bằng cách chạy lệnh sau:
python3 -m pip install prometheus-pve-exporter
Sau khi cài đặt, bạn có thể sử dụng lệnh pve_exporter --help
để xem hướng dẫn sử dụng.
Lệnh python3 -m pip install prometheus-pve-exporter nên được thực thi trên máy chủ Prometheus hoặc bất kỳ máy chủ nào mà bạn đã cấu hình để chạy Prometheus PVE Exporter. Điều này là để cài đặt Prometheus PVE Exporter trên máy chủ thu thập dữ liệu, tức là máy chủ Prometheus, không phải trên nút Proxmox VE.
Sử dụng Docker.
Nếu bạn muốn sử dụng Docker, bạn có thể pull image từ Docker Hub bằng lệnh sau.
docker pull prompve/prometheus-pve-exporter
Để chạy ứng dụng trong Docker, bạn có thể sử dụng lệnh sau.
docker run --name prometheus-pve-exporter -d -p 127.0.0.1:9221:9221 -v /path/to/pve.yml:/etc/pve.yml prompve/prometheus-pve-exporter
Lệnh này sẽ tạo một container Docker có tên là prometheus-pve-exporter
, đưa ứng dụng vào chế độ nền và lắng nghe 9221 trên máy local với cổng 9221 trên container. Ngoài ra, nó sẽ mount một file cấu hình từ /path/to/pve.yml
vào /etc/pve.yml
trong container.
Tương tự như cài bằng pip thì nếu sử dụng Docker bằng lệnh docker run --name prometheus-pve-exporter -d -p 127.0.0.1:9221:9221 -v /path/to/pve.yml:/etc/pve.yml prompve/prometheus-pve-exporter bạn cũng nên được thực thi trên máy chủ Prometheus hoặc bất kỳ máy chủ nào mà bạn đã cấu hình để chạy Prometheus PVE Exporter. Điều này là để cài đặt Prometheus PVE Exporter trên máy chủ thu thập dữ liệu, tức là máy chủ Prometheus, không phải trên nút Proxmox VE.
Sử dụng ứng dụng.
Sau khi ứng dụng đã được chạy, bạn có thể truy cập nó thông qua địa chỉ http://localhost:9221/ trên máy local của bạn. Ứng dụng này sẽ cung cấp các thông tin về Proxmox VE node mà bạn muốn giám sát.
Bạn có thể sử dụng các tham số tùy chọn để chỉ định các chức năng cụ thể bạn muốn kích hoạt hoặc vô hiệu hóa.
Bạn cũng có thể chỉ định một máy chủ Proxmox VE cụ thể bằng cách sử dụng tham số target
trong URL.
Dưới đây là một số metric mà Prometheus PVE Exporter thu thập được.
# HELP pve_up Node/VM/CT-Status is online/running
# TYPE pve_up gauge
pve_up{id="node/proxmox"} 1.0
pve_up{id="qemu/100"} 1.0
# HELP pve_disk_size_bytes Size of storage device
# TYPE pve_disk_size_bytes gauge
pve_disk_size_bytes{id="qemu/100"} 6.8719476736e+010
pve_disk_size_bytes{id="node/proxmox"} 3.1044079616e+010
pve_disk_size_bytes{id="storage/proxmox/local"} 3.1044079616e+010
pve_disk_size_bytes{id="storage/proxmox/local-lvm"} 6.9243764736e+010
pve_disk_size_bytes{id="storage/proxmox/vms"} 1.934882766848e+012
# HELP pve_disk_usage_bytes Disk usage in bytes
# TYPE pve_disk_usage_bytes gauge
pve_disk_usage_bytes{id="qemu/100"} 0.0
pve_disk_usage_bytes{id="node/proxmox"} 1.7571426304e+010
pve_disk_usage_bytes{id="storage/proxmox/local"} 1.7571426304e+010
pve_disk_usage_bytes{id="storage/proxmox/local-lvm"} 6.619703908e+09
pve_disk_usage_bytes{id="storage/proxmox/vms"} 8.32870981632e+011
# HELP pve_memory_size_bytes Size of memory
# TYPE pve_memory_size_bytes gauge
pve_memory_size_bytes{id="qemu/100"} 1.7179869184e+010
pve_memory_size_bytes{id="node/proxmox"} 6.739961856e+010
# HELP pve_memory_usage_bytes Memory usage in bytes
# TYPE pve_memory_usage_bytes gauge
pve_memory_usage_bytes{id="qemu/100"} 1.6573280275e+010
pve_memory_usage_bytes{id="node/proxmox"} 5.3907812352e+010
# HELP pve_network_transmit_bytes Number of bytes transmitted over the network
# TYPE pve_network_transmit_bytes gauge
pve_network_transmit_bytes{id="qemu/100"} 7.75070828e+09
# HELP pve_network_receive_bytes Number of bytes received over the network
# TYPE pve_network_receive_bytes gauge
pve_network_receive_bytes{id="qemu/100"} 1.529756162e+09
# HELP pve_disk_write_bytes Number of bytes written to storage
# TYPE pve_disk_write_bytes gauge
pve_disk_write_bytes{id="qemu/100"} 1.50048127488e+011
# HELP pve_disk_read_bytes Number of bytes read from storage
# TYPE pve_disk_read_bytes gauge
pve_disk_read_bytes{id="qemu/100"} 7.473739264e+09
# HELP pve_cpu_usage_ratio CPU usage (value between 0.0 and pve_cpu_usage_limit)
# TYPE pve_cpu_usage_ratio gauge
pve_cpu_usage_ratio{id="qemu/100"} 0.105009724408557
pve_cpu_usage_ratio{id="node/proxmox"} 0.984243806697115
# HELP pve_cpu_usage_limit Maximum allowed CPU usage
# TYPE pve_cpu_usage_limit gauge
pve_cpu_usage_limit{id="qemu/100"} 1.0
pve_cpu_usage_limit{id="node/proxmox"} 4.0
# HELP pve_uptime_seconds Number of seconds since the last boot
# TYPE pve_uptime_seconds gauge
pve_uptime_seconds{id="qemu/100"} 315039.0
pve_uptime_seconds{id="node/proxmox"} 315069.0
# HELP pve_storage_shared Whether or not the storage is shared among cluster nodes
# TYPE pve_storage_shared gauge
pve_storage_shared{id="storage/proxmox/local"} 0.0
pve_storage_shared{id="storage/proxmox/local-lvm"} 0.0
pve_storage_shared{id="storage/proxmox/vms"} 0.0
# HELP pve_guest_info VM/CT info
# TYPE pve_guest_info gauge
pve_guest_info{id="qemu/100",name="samplevm1",node="proxmox",type="qemu"} 1.0
# HELP pve_storage_info Storage info
# TYPE pve_storage_info gauge
pve_storage_info{id="storage/proxmox/local",node="proxmox",storage="local"} 1.0
pve_storage_info{id="storage/proxmox/local-lvm",node="proxmox",storage="local-lvm"} 1.0
pve_storage_info{id="storage/proxmox/vms",node="proxmox",storage="vms"} 1.0
# HELP pve_node_info Node info
# TYPE pve_node_info gauge
pve_node_info{id="node/proxmox",level="",name="proxmox",nodeid="0"} 1.0
# HELP pve_onboot_status Proxmox vm config onboot value
# TYPE pve_onboot_status gauge
pve_onboot_status{id="qemu/201",node="proxmox",type="qemu"} 1.0
# HELP pve_version_info Proxmox VE version info
# TYPE pve_version_info gauge
pve_version_info{release="7.1",repoid="6fe299a0",version="7.1-5"} 1.0
3. Sử dụng authentication.
Để sử dụng xác thực (authentication) với ứng dụng Prometheus PVE Exporter, bạn có thể sử dụng một file cấu hình pve.yml
hoặc sử dụng biến môi trường (environment variables).
Dưới đây là các cách bạn có thể thực hiện xác thực:
3.1. Sử dụng file cấu hình pve.yml
.
Xác thực bằng mật khẩu (password authentication).
Để xác thực bằng mật khẩu, bạn có thể sử dụng file pve.yml
với nội dung sau.
default:
user: prometheus@pve
password: sEcr3T!
# Optional: set to false to skip SSL/TLS verification
verify_ssl: true
Trong trường hợp này, bạn cần cung cấp tên người dùng và mật khẩu của bạn. Nếu bạn muốn tắt xác minh SSL/TLS, bạn có thể đặt verify_ssl
thành false
.
Xác thực bằng token (token authentication)
Để xác thực bằng token, bạn có thể sử dụng file pve.yml
với nội dung sau.
default:
user: prometheus@pve
token_name: "your-token-id"
token_value: "..."
Trong trường hợp này, bạn cần cung cấp tên người dùng và giá trị của token. Token có thể được tạo và quản lý trên Proxmox VE.
3.2. Sử dụng biến môi trường (environment variables).
Nếu bạn muốn sử dụng biến môi trường thay vì file cấu hình pve.yml
, bạn có thể sử dụng các biến môi trường sau:
PVE_USER
: Tên người dùng.PVE_PASSWORD
: Mật khẩu người dùng (cần thiết cho xác thực mật khẩu).PVE_TOKEN_NAME
: Tên của token (cần thiết cho xác thực token).PVE_TOKEN_VALUE
: Giá trị của token (cần thiết cho xác thực token).PVE_VERIFY_SSL
: Đặt thànhtrue
hoặcfalse
để xác định xem có kiểm tra xác minh SSL/TLS hay không (mặc định làtrue
).PVE_MODULE
: Tên module cấu hình (mặc định làdefault
).
4. Cấu hình Proxmox VE.
Để đảm bảo an toàn, bạn nên tạo một người dùng với quyền chỉ đọc (PVEAuditor role) để thu thập thông tin về dịch vụ và tài nguyên. Truy cập vào tài liệu của Proxmox để biết cách tạo một người dùng này và sau đó gán cho người dùng quyền truy cập đến các phần tử bạn muốn giám sát (ví dụ: /path permission). Điều này giúp đảm bảo rằng người dùng Prometheus PVE Exporter chỉ có quyền truy cập thông tin mà họ cần mà không ảnh hưởng đến tính bảo mật của hệ thống Proxmox VE.
Cấu hình Prometheus cho việc giám sát Proxmox VE sử dụng Prometheus PVE Exporter có thể được thực hiện trên cùng một node Proxmox VE hoặc trên một máy chủ Prometheus riêng biệt. Dưới đây là ví dụ về cách cấu hình Prometheus để giám sát Proxmox VE:
Ví dụ về cấu hình Prometheus khi Prometheus PVE Exporter chạy trên node Proxmox VE.
scrape_configs:
- job_name: 'pve'
static_configs:
- targets:
- 192.168.1.2:9221 # Địa chỉ của node Proxmox VE với PVE exporter.
- 192.168.1.3:9221 # Địa chỉ của node Proxmox VE với PVE exporter.
metrics_path: /pve
params:
module: [default]
Trong ví dụ này, bạn đang cấu hình Prometheus để lấy dữ liệu từ các node Proxmox VE với PVE Exporter chạy trên cùng một node. Điều này có nghĩa rằng bạn chỉ cần cung cấp địa chỉ IP của các node Proxmox VE và cổng mà PVE Exporter đang lắng nghe.
Ví dụ về cấu hình Prometheus khi Prometheus PVE Exporter chạy trên máy chủ Prometheus riêng biệt.
scrape_configs:
- job_name: 'pve'
static_configs:
- targets:
- 192.168.1.2 # Địa chỉ IP của node Proxmox VE.
- 192.168.1.3 # Địa chỉ IP của node Proxmox VE.
metrics_path: /pve
params:
module: [default]
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 127.0.0.1:9221 # Địa chỉ IP của Prometheus PVE Exporter.
Trong ví dụ này, bạn đang cấu hình Prometheus để lấy dữ liệu từ các node Proxmox VE mà không cần chỉ định cổng, vì PVE Exporter đang chạy trên các node khác. Bạn sử dụng relabel_configs
để định hình lại các nhãn (labels) để chỉ định đúng đích (target) của PVE Exporter.
Sau khi bạn đã cấu hình Prometheus, bạn có thể sử dụng các truy vấn và đồ thị để theo dõi và giám sát dữ liệu từ Proxmox VE trên giao diện Prometheus hoặc trực quan hóa dữ liệu bằng cách sử dụng Grafana với các bảng điều khiển đã được cung cấp.
- Bạn có thể sử dụng Dashboard này cho loạt metric ở trên nhé:
- URL:
https://grafana.com/grafana/dashboards/10347-proxmox-via-prometheus/
. - Dashboard ID: 10347
- Dashboard Json File:
https://wiki.hoanghd.com/wp-content/uploads/codes/grafana-dashboard-proxmox-exporter.yml
Nếu bạn chưa biết sử dụng Grafana, hãy tham khảo https://wiki.hoanghd.com/category/monitor/grafana/
.
Kết luận.
Việc giám sát Proxmox VE là một phần quan trọng của việc quản lý hệ thống và đảm bảo rằng các máy chủ ảo và container hoạt động ổn định. Prometheus và Prometheus PVE Exporter cung cấp một giải pháp mạnh mẽ để thu thập và giám sát dữ liệu từ Proxmox VE một cách dễ dàng và linh hoạt. Bằng cách sử dụng các metric được xuất bởi Prometheus PVE Exporter, bạn có thể nắm bắt thông tin quan trọng về tài nguyên, hiệu suất và trạng thái của hệ thống Proxmox VE. Điều này giúp bạn duyệt qua tình trạng của hệ thống, phát hiện vấn đề sớm và thực hiện điều chỉnh cần thiết để đảm bảo hoạt động ổn định và hiệu quả của môi trường ảo hóa của bạn.
Nguồn tham khảo https://github.com/prometheus-pve/prometheus-pve-exporter
.