Для мониторинга 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.
Пример дашборда (взят из репозитория):