Friday, November 15, 2024

Làm thế nào để Monitor VMWare với Prometheus và Grafana

-

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ồm vms, 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 visử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://prometheus_ip:9090/targets bạn sẽ thấy target vcenter_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é.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories