ESXi là một nền tảng ảo hóa của VMware, được sử dụng để tạo và quản lý máy ảo trên các máy chủ vật lý. Nó cho phép nhiều hệ điều hành và ứng dụng chạy trên cùng một máy chủ vật lý mà không cần phải cài đặt trực tiếp lên phần cứng. ESXi cung cấp các tính năng như quản lý tài nguyên, chia sẻ tài nguyên, ảo hóa mạng và bảo mật.
vCenter là một sản phẩm của VMware, cung cấp một nền tảng quản lý tập trung cho các môi trường ảo hóa. vCenter cho phép bạn quản lý và giám sát các máy chủ ESXi, tạo và quản lý các máy ảo, tổ chức tài nguyên ảo, và cung cấp các tính năng bảo mật và sao lưu. Nó cung cấp giao diện đồ họa và API cho việc quản lý và tự động hóa quy trình.
Prometheus là một hệ thống giám sát mã nguồn mở được sử dụng phổ biến trong các môi trường ảo hóa và đám mây. Nó được sử dụng để thu thập và lưu trữ dữ liệu giám sát từ các hệ thống và ứng dụng khác nhau, và cung cấp khả năng truy vấn, hiển thị và cảnh báo dựa trên dữ liệu này. Prometheus có khả năng giám sát các thông số như hiệu suất hệ thống, tài nguyên, sự cố và các chỉ số khác của hệ thống và ứng dụng.
Nhu cầu giám sát ESXi và vCenter vì việc giám sát là quan trọng để đảm bảo hiệu suất, khả năng sẵn sàng và an ninh của hệ thống ảo hóa. Bằng cách giám sát ESXi và vCenter, người quản trị có thể theo dõi các chỉ số quan trọng như sử dụng tài nguyên, hiệu suất máy chủ, tải CPU, bộ nhớ và lưu trữ, và xác định các vấn đề tiềm ẩn hoặc cảnh báo khi có sự cố xảy ra. Điều này giúp cải thiện khả năng hoạt động, tối ưu hóa tài nguyên và đảm bảo tính sẵn sàng của hệ thống ảo hóa.
2. Triển khai.
Bước 1 – Cài đặt Prometheus.
Thực hiện theo bài https://wiki.hoanghd.com/cach-cai-dat-prometheus-len-he-dieu-hanh-ubuntu/
Bước 2 – Cài đặt các công cụ và thư viện cần thiết để giám sát hệ thống ESXi và vCenter và chuẩn bị cho việc sử dụng vmware_exporter để thu thập dữ liệu giám sát.
Cập nhật danh sách các gói phần mềm trên hệ thống Linux của bạn từ các nguồn cung cấp.
sudo apt update -y
Cài đặt các gói phần mềm cần thiết trên hệ thống của bạn. Đây là một danh sách các gói bao gồm:
python3
: Cung cấp môi trường thực thi Python phiên bản 3.curl
: Công cụ dùng để truy xuất và tương tác với các URL từ dòng lệnh.net-tools
: Bộ công cụ mạng dùng để cung cấp các tiện ích như ifconfig, netstat, và arp.git
: Hệ thống quản lý mã nguồn phân tán, được sử dụng để sao chép và quản lý mã nguồn từ kho lưu trữ.wget
: Công cụ được sử dụng để tải xuống file tin từ các URL.python3-pip
: Trình quản lý gói Python, được sử dụng để cài đặt các gói thư viện Python từ Pypi.
sudo apt install python3 curl net-tools git wget python3-pip -y
Cài đặt gói thư viện PyYAML cho Python 3. PyYAML là một thư viện cho phép bạn làm việc với dữ liệu YAML trong Python. Dữ liệu YAML thường được sử dụng để cấu hình và mô tả dữ liệu cấu trúc.
pip3 install --ignore-installed PyYAML
Cài đặt gói vmware_exporter thông qua pip3. vmware_exporter là một bộ sưu tập metric exporter dành cho Prometheus, được sử dụng để thu thập dữ liệu giám sát từ các hệ thống ESXi và vCenter và truyền cho Prometheus để xử lý và hiển thị.
pip3 install vmware_exporter
Bước 3 – Tìm kiếm thư mục lưu trữ config của vmware_exporter
bằng lệnh find / -name "vmware_exporter"
.
$ find / -name "vmware_exporter"
/usr/local/bin/vmware_exporter
/usr/local/lib/python3.6/dist-packages/vmware_exporter
Câu lệnh find / -name "vmware_exporter"
được sử dụng để tìm kiếm tất cả các file hoặc thư mục có tên là “vmware_exporter” trên toàn bộ hệ thống file của máy tính.
Bước 4 – Cấu hình vmware_exporter
, thiết lập các thông số cần thiết để kết nối và thu thập dữ liệu giám sát từ máy chủ vSphere.
Chạy đoạn script dưới để tạo file /usr/local/lib/python3.6/dist-packages/vmware_exporter/config.yml
và ghi vào các nội dung như dưới.
cat > /usr/local/lib/python3.6/dist-packages/vmware_exporter/config.yml << 'OEF'
default:
vsphere_host: 192.168.12.45
vsphere_user: 'root'
vsphere_password: 'Hoanghd164'
ignore_ssl: True
specs_size: 5000
fetch_custom_attributes: True
fetch_tags: True
fetch_alarms: True
collect_only:
vms: True
vmguests: True
datastores: True
hosts: True
snapshots: True"
OEF
Dưới đây là mô tả ý nghĩa của các thông số trong cấu hình mẫu:
vsphere_host
: Địa chỉ IP hoặc tên miền của máy chủ vSphere ESXi hoặc vCenter.vsphere_user
: Tên người dùng để đăng nhập vào máy chủ vSphere.vsphere_password
: Mật khẩu tương ứng với người dùng trên máy chủ vSphere.ignore_ssl
: Có bỏ qua chứng chỉ SSL không. Nếu đặt làTrue
, vmware_exporter sẽ bỏ qua các lỗi chứng chỉ SSL không hợp lệ.specs_size
: Kích thước tối đa của các yêu cầu API khi lấy thông tin về máy ảo và máy chủ.fetch_custom_attributes
: Xác định liệu có thu thập thông tin thuộc tính tùy chỉnh từ máy ảo không.fetch_tags
: Xác định liệu có thu thập thông tin về nhãn từ máy ảo không.fetch_alarms
: Xác định liệu có thu thập thông tin về cảnh báo từ máy chủ không.collect_only
: Xác định các loại đối tượng sẽ được thu thập thông tin, bao gồmvms
,vmguests
,datastores
,hosts
, vàsnapshots
.
Nếu bạn có nhiều thiết bị ESXI thì bạn hãy thêm 1 khối cho ESXI mới ví dụ như dưới.
cat > /usr/local/lib/python3.6/dist-packages/vmware_exporter/config.yml << 'OEF'
default:
vsphere_host: 192.168.12.45
vsphere_user: 'root'
vsphere_password: 'Hoanghd164'
ignore_ssl: True
specs_size: 5000
fetch_custom_attributes: True
fetch_tags: True
fetch_alarms: True
collect_only:
vms: True
vmguests: True
datastores: True
hosts: True
snapshots: True"
esxi1:
vsphere_host: 192.168.12.46
vsphere_user: 'root'
vsphere_password: 'Hoanghd164'
ignore_ssl: True
specs_size: 5000
fetch_custom_attributes: True
fetch_tags: True
fetch_alarms: True
collect_only:
vms: True
vmguests: True
datastores: True
hosts: True
snapshots: True"
esxi2:
vsphere_host: 192.168.12.47
vsphere_user: 'root'
vsphere_password: 'Hoanghd164'
ignore_ssl: True
specs_size: 5000
fetch_custom_attributes: True
fetch_tags: True
fetch_alarms: True
collect_only:
vms: True
vmguests: True
datastores: True
hosts: True
snapshots: True"
OEF
Bước 5 – Tạo user để phân quyền cho vmware_exporter.
useradd -M -r -s /bin/false vmware_exporter
Bước 6 – Thực hiện phân quyền để đảm bảo rằng người dùng “vmware_exporter” có các quyền và quyền sở hữu cần thiết để thực thi và truy cập vào các file và thư mục liên quan đến vmware_exporter trong hệ thống.
chown -R vmware_exporter:vmware_exporter /usr/local/lib/python3.6/dist-packages/vmware_exporter
chown vmware_exporter:vmware_exporter /usr/local/bin/vmware_exporter
Bước 7 – Tạo file service cho vmware_exporter để systemd quản lý.
Sử dụng lệnh cat dưới đây để tạo file service cho vmware_exporter
và nhớ thay đổi đường dẫn đến file config.yml
theo đúng với hệ thống của bạn.
cat > /etc/systemd/system/vmware_exporter.service << 'OEF'
[Unit]
Description=VMWare Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=vmware_exporter
Group=vmware_exporter
Type=simple
ExecStart=/usr/bin/python3 /usr/local/bin/vmware_exporter -c /usr/local/lib/python3.6/dist-packages/vmware_exporter/config.yml
ExecReload=/bin/kill -HUP \$MAINPID
SyslogIdentifier=vmware_exporter
Restart=always
[Install]
WantedBy=multi-user.target
OEF
Cập nhật dịch vụ mới bằng lệnh systemctl daemon-reload
sau đó khởi động vmware_exporter
và bật tính năng tự khởi động theo OS cho nó.
systemctl start vmware_exporter
systemctl enable vmware_exporter
Kiểm tra trạng thái vmware_exporter.
$ systemctl status vmware_exporter
● vmware_exporter.service - VMWare Exporter
Loaded: loaded (/etc/systemd/system/vmware_exporter.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2023-07-11 07:46:06 UTC; 1h 15min ago
Main PID: 9280 (python3)
Tasks: 6 (limit: 4915)
CGroup: /system.slice/vmware_exporter.service
└─9280 /usr/bin/python3 /usr/local/bin/vmware_exporter -c /usr/local/lib/python3.6/dist-packages/vmware_exporter/config.ym
Kiểm tra xem port 9272 mà vmware_exporter được chạy hay chưa.
$ netstat -tlnp | grep 9272
tcp 0 0 0.0.0.0:9272 0.0.0.0:* LISTEN 9280/python3
Bước 8 – Khai báo bổ sung target cho prometheus để thu thập từ vmware_exporter.
Bạn có thể dùng vi
sửa file /etc/prometheus/prometheus.yml
để thêm đoạn cấu hình dưới hoặc dùng lệnh cat
dưới để bổ sung vào dưới cùng của file cấu hình prometheus.
cat > /etc/prometheus/prometheus.yml << 'OEF'
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
## Khai bao target cho vcenter
- job_name: 'vcenter_node'
scrape_timeout: 15s
scrape_interval: 15s
metrics_path: '/metrics'
static_configs:
- targets:
- '192.168.12.45'
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 192.168.13.232:9272
OEF
Hãy thay đổi các thành phần sau phù hợp với hệ thống của ba
- job_name: tên của job.
- targets: địa chỉ IP của ESXI hoặc vCenter.
- replacement: địa chỉ IP và port của vmware_exporter
Nếu bạn có nhiều ESXI thì hãy thêm các khối cho từng ESXI như dưới:
cat > /etc/prometheus/prometheus.yml << 'OEF'
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
## Khai bao target cho vcenter
- job_name: 'vcenter_node1'
scrape_timeout: 15s
scrape_interval: 15s
metrics_path: '/metrics'
static_configs:
- targets:
- '192.168.12.45'
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 192.168.13.232:9272
- job_name: 'vcenter_node2'
scrape_timeout: 15s
scrape_interval: 15s
metrics_path: '/metrics'
static_configs:
- targets:
- '192.168.12.46'
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 192.168.13.232:9272
- job_name: 'vcenter_node3'
scrape_timeout: 15s
scrape_interval: 15s
metrics_path: '/metrics'
static_configs:
- targets:
- '192.168.12.46'
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 192.168.13.232:9272
OEF
Khởi động lại Prometheus bằng lệnh systemctl restart prometheus.service
, sau đó bạn hãy kiểm tra lại trạng thái Prometheus bằng lệnh systemctl status prometheus.service
.
$ systemctl status prometheus.service
● prometheus.service - Prometheus
Loaded: loaded (/etc/systemd/system/prometheus.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2023-07-11 07:48:02 UTC; 1h 15min ago
Main PID: 9364 (prometheus)
Tasks: 13 (limit: 4915)
CGroup: /system.slice/prometheus.service
└─9364 /usr/local/bin/prometheus --config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/var/lib/prometheus/ --web.console.templates=/etc/prometheus/consoles --web.console.libraries=/etc/prometheus/console_libraries --web.listen-address=0.0.0.0:9090
Bước 9 – Truy cập vào UI của prometheus để xem đã thấy target của vCenter
Truy cập vào địa chỉ: http://<prometheus_ip>9090/
sau đó vào tab Status
==> Targets
hoặc vào thẳng địa chỉ http://
bạn sẽ thấy target prometheus_ip
:9090/targetsvcenter_node
đã xuất hiện và ở trạng thái UP
.
Nếu bạn click vào url của target này (cụ thể là http://<prometheus_ip>:9272/metrics)
bạn sẽ thấy các metric đã xuất hiện.
Giờ giả sử mình querry vmware_datastore_vms
, bạn sẽ thấy kết quả trả về là 0 tương đương với mình chẳng có máy ảo nào đang chạy trên máy chủ ESXI này.
Kết quả này đúng với thực trạng hiện tại trên ESXI.
Bước 10 – Cài đặt Grafana.
Trên Ubuntu bạn cài đặt Grafana theo hướng dẫn này https://wiki.hoanghd.com/huong-dan-cai-dat-grafana/
.
Bước 11 – Thêm Dashboard vào Grafana.
Mình sử dụng Dashboard này để ví dụ cho bạn https://grafana.com/grafana/dashboards/10076-vmware-esxi/
, ngoài ra bạn có thể tự thiết kế Dashboard cho riêng mình tùy theo nhu cầu của bạn, do mình không sử dụng VMWare nên mình không thiết kế Dashboard cho nó mà thay vào đó mình sử dụng Dashboard này để ví dụ cho các bạn thôi.
Do mình lười viết hướng dẫn thêm Dashboard nên bạn làm theo bước 5 của bài https://wiki.hoanghd.com/lam-the-nao-de-monitor-postgresql-tren-windows-voi-prometheus-va-grafana/
này để thêm Dashboard nhé.
Trong Dashboard dưới có 2 biểu đồ vm Memory Usage và vm CPU usage của mình hiện không có dữ liệu là do trong ESXI của mình không có máy ảo nào cả nên không có thông tin cho VM, đơn giản vậy thôi nhé.