Для мониторинга VSAN с помощью Prometheus можно использовать набор скриптов в репозитории VmWare с одноименным названием: vsan-integration-for-prometheus

Есть два способа мониторинга:

  • Забирать метрики с хостов ESXI с помощью Prometheus. Хосты ESXI могут отдавать метрики для Prometheus с эндпоинта /vsanmetrics из коробки;
  • Развернуть prometheus exporter, который будет обращаться к VCenter, забирать данные по API, конвертировать их в формат для Prometheus, и отдавать их на эндпоинт экспортера /vsan/metrics/;

Рассмотрим эти два способа, при этом первый способ мы выполним с помощью скриптов, второй с помощью Docker.

Все действия были опробованы на версии 7.0U2

Настройка сбора метрик с ESXI-хостов напрямую

Склонируем репозиторий

git clone https://github.com/bshagun/vsan-integration-for-prometheus.git

Первым делом нам нужно получить bearer token, для этого переходим в папку vsan-prometheus-setup в скачанном репозитории:

1cd vsan-integration-for-prometheus/vsan-prometheus-setup/

Установим модуль для Python pyvmomi :

1python -m pip install pyvmomi

Для генерации токена пользователю нужны следующие привилегии (взято из документации к репозиторию):

  • System.view privilege on the RootFolder;
  • System.read privilege on cluster objects for checking vSAN metrics capability;
  • Host.Inventory.EditCluster privilege on cluster objects for applying metrics configuration

Запустим скрипт vsanSetupToken.py для получения токена:

1python vsanSetupToken.py -s <АДРЕС VCENTER> -u <ПОЛЬЗОВАТЕЛЬ> -c <ПАРОЛЬ>

Копируем сгенерированный токен и переходим в папку vsan-prometheus-servicediscovery:

1cd ../vsan-prometheus-servicediscovery/

Необходимо задать переменные для генерации конфига:

1export CONFIG_DIR=<Файл формата JSON, в который будет сгенерирован конфиг, например /etc/prometheus/vsan-discovery.json>
2export BEARER_TOKEN=<Сгенерированный выше bearer token>
3export VCENTER=<адрес нашего VCenter>
4export SCHEME="https"

И запустить скрипт:

python vsanServicediscovery.py

Скрипт настроен для работы, как сервис, или для запуска в докере, он опрашивает наш VCenter на предмет новых эндпоинтов каждые 5 минут, поэтому мы увидим примерно такое сообщение:

 12022 - 12 - 08 11: 38: 35, 878 INFO[0xb-user][{
 2    "targets": ["vcenter.0xbbeer.ru:443"],
 3    "labels": {
 4        "__metrics_path__": "/vsan/metrics/host-3234",
 5        "cluster_name": "0xbbeer-VSAN",
 6        "cluster_id": "domain-xf777"
 7    }
 8}, {
 9    "targets": ["vcenter.0xbbeer.ru:443"],
10    "labels": {
11        "__metrics_path__": "/vsan/metrics/host-3235",
12        "cluster_name": "0xbbeer-VSAN",
13        "cluster_id": "domain-xf777"
14    }
15}, {
16    "targets": ["vcenter.0xbbeer.ru:443"],
17    "labels": {
18        "__metrics_path__": "/vsan/metrics/host-5343",
19        "cluster_name": "0xbbeer-VSAN",
20        "cluster_id": "domain-xf777"
21    }
22}
23]

можем нажимать CTRL+C для выхода из скрипта.

Проверить, что файл, указанный в переменной CONFIG_DIR, появился и содержит JSON с таргетами. Например, предплоложим, что наш конфиг хранится в файле по пути /etc/prometheus/vsan-discovery.json :

1cat /etc/prometheus/vsan-discovery.json

Теперь осталось добавить конфиг в Prometheus и указать путь к сгенерированному файлу в секции file_sd_configs:

1 - job_name: "VSAN-PROMETHEUS"
2    bearer_token: <Сгенерированный выше BEARER TOKEN>
3    scheme: https
4    tls_config:
5      insecure_skip_verify: true
6    file_sd_configs:
7    - files:
8       - "ПУТЬ К СГЕНЕРИРОВАННОМУ ФАЙЛУ, например:  /etc/prometheus/vsan-discovery.json"

Перезапускаем Prometheus, данные должны пойти.

На заметку:

Секция file_sd_configs в конфиге Prometheus, по умолчанию поддерживает перечитывание указанного файла раз в 5 минут. Т.е например, если мы оставим скрипт vsan-prometheus-servicediscovery запущенным как службу, то, к примеру, при добавлении новых esxi хостов, они будут добавлены в мониторинг автоматически.

Настройка сбора метрик с помощью Vsan-Prometheus-Exporter

Если мы хотим не заморчиваться с зависимостями, установкой модулей и тд, можно развернуть экспортер в Docker-e.

Скачиваем репозиторий:

1git clone https://github.com/vmware/vsan-integration-for-prometheus.git

Сгенерируем baerer-token, это можно сделать как и в пункте выше или с помощью докер файла в репозитории vsan-prometheus-setup, я это сделаю с помощью docker с образом из docker hub:

1docker run -it vmware/vsan-prometheus-setup:v20210717 \
2--host <АДРЕС VCENTER> \
3--username <ПОЛЬЗОВАТЕЛЬ VCENTER> \
4--cluster <ИМЯ VSAN CLUSTER-а> 

У нас запросит пароль от пользователя VCenter, после его ввода получим baerer token:

1Enter password for host 10.160.29.255 and username administrator@vsphere.local:
2Successfully connected to vCenter!
3Successfully generate a new token:
4171892aa-24dc-450f-be6b-cdc5cf

Записываем полученный ключ и переходим в папку vsan-prometheus-exporter:

1cd ../vsan-prometheus-exporter/

Так как у меня версия VmWare 7.0.2U, а в Docker файле указан модуль pyvmomi для 7.0.3, они несовместимы, и если у Вас VmWare ниже версии 7.0.3, то нам нужно поменять версию модуля в Docker файле:

nano Dockerfile

Изменяем строку Run, где укажем версию модуля pyvmomi==7.0.2:

RUN dnf install -y python3 python3-pip && pip3 install setuptools && pip3 install pyvmomi==7.0.2 flask gunicorn==19.9.0 && tdnf clean all

Сохраняем и запускаем сборку:

docker build -t vsan-prometheus-exporter .

Запускаем собранный vsan-prometheus-exporter :

docker run -d --rm -p 8080:8080 -e BEARER_TOKEN=<ТОКЕН ПОЛУЧЕННЫЙ В ШАГЕ ВЫШЕ> \ 
-e VCENTER=<АДРЕС VCENTER> \
-e VCPORT=<ПОРТ VCENTER> \
-e VCUSER=<ПОЛЬЗОВАТЕЛЬ VCENTER> \
-e VCPASSWORD=<ПАРОЛЬ VCENTER> \
-e CLUSTERNAME=<ИМЯ КЛАСТЕРА В VCENTER> vsan-prometheus-exporter

Проверим работу, нам должен выдаться список метрик:

$ curl -H 'Authorization: Bearer <ПОЛУЧЕННЫЙ ВЫШЕ BAERER TOKEN>' 127.0.0.1:8080/vsan/metrics/serviceDiscovery

И добавим сбор с нашего экспортера в Prometheus:

1job_name: "VSAN-EXPORTER"
2    scrape_interval: 60s
3    metrics_path: /vsan/metrics
4    authorization:
5      credentials: 'BAERER TOKEN полученный выше' 
6    static_configs:
7      - targets: ["АДРЕС_ЭКСПОРТЕРА:8080"]

Вывод метрик в Grafana

В репозитории лежат шаблоны дашбордов для графаны в папке grafana-dashboard.

Пример дашборда (взят из репозитория):

grafana-vsan-layers.png