Настройка мониторинга кластера YDB

Страница входит в раздел Обзор наблюдаемости и описывает настройку сбора метрик кластера YDB в Prometheus и визуализацию в Grafana. На каждом узле метрики также доступны во встроенном HTTP-интерфейсе мониторинга — раздел Доступ к метрикам через веб-интерфейс.

Совет

Перед началом работы ознакомьтесь с описанием метрик и справочником по дашбордам Grafana.

Определите, как развернут кластер YDB:

Настройка мониторинга с помощью Prometheus и Grafana

Подготовка к установке

Полный цикл развертывания Prometheus и Grafana в этом разделе не рассматривается — обратитесь к документации выбранных продуктов.

Варианты подготовки конфигурации сбора метрик

Конфигурацию сбора метрик с узлов YDB можно подготовить одним из способов ниже. Во всех случаях потребуется файл prometheus_ydb.yml — в нем описан сбор метрик YDB.

Список узлов хранения и динамических узлов базы данных указывается в файлах ydbd-storage.yml и ydbd-database.yml соответственно. Пути к этим файлам задаются в prometheus_ydb.yml (подробнее — в разделе Запуск Prometheus с подготовленной конфигурацией).

Рекомендуемый способ получить согласованный набор файлов — сгенерировать конфигурацию сбора метрик с использованием плейбука generate_promconf.

Перейдите в рабочий каталог сценария Ansible для вашего кластера:

cd <path_to_ansible_project>

Запустите плейбук генерации конфигурации для Prometheus:

ansible-playbook ydb_platform.ydb.generate_promconf

Плейбук создаст каталог promconf со следующим содержимым:

  • prometheus_ydb.yml — файл конфигурации Prometheus.
  • ydbd-storage.yml — список узлов хранения кластера.
  • ydbd-database.yml — список динамических узлов базы данных.
  • ca.crt — сертификат, использованный при развертывании кластера.
  • grafana-dashboards — каталог с шаблонами дашбордов для Grafana. Шаблоны загружаются из репозитория GitHub.

Проверьте содержимое сгенерированных файлов ydbd-storage.yml и ydbd-database.yml. Список узлов и портов должен совпадать с фактической топологией кластера, в том числе с узлами, отображаемыми во встроенном UI кластера.

Пример проверки содержимого каталога с конфигурацией:

cd promconf
ls -la

Пример вывода:

-rw-rw-r-- 1 1818 ca.crt
drwxrwxr-x 2 4096 grafana-dashboards
-rw-rw-r-- 1 17532 prometheus_ydb.yml
-rw-rw-r-- 1 165 ydbd-database.yml
-rw-rw-r-- 1 164 ydbd-storage.yml

Проверка доступности узлов — по HTTPS; см. Метрики в формате Prometheus.

Скопируйте файлы из каталога ydb/deploy/prometheus репозитория YDB.

Заполните секции targets в ydbd-storage.yml и ydbd-database.yml: укажите хосты и порты мониторинга (--mon-port) всех узлов хранения и динамических узлов баз данных, с которых нужно собирать метрики (как определить порт, см. Как определить порт мониторинга).

В prometheus_ydb.yml для задач сбора метрик задайте scheme: http и отключите или удалите параметры tls_config.

Проверка доступности узлов — по HTTP; см. Метрики в формате Prometheus.

Скопируйте файлы из каталога ydb/deploy/prometheus репозитория YDB.

Заполните секции targets в ydbd-storage.yml и ydbd-database.yml: укажите хосты и порты мониторинга (--mon-port) всех узлов хранения и динамических узлов баз данных, с которых нужно собирать метрики (как определить порт, см. Как определить порт мониторинга).

В prometheus_ydb.yml для задач сбора метрик задайте scheme: https и настройте tls_config. Укажите путь к сертификату центра сертификации (CA), которым подписаны сертификаты TLS кластера:

scheme: https
tls_config:
    ca_file: '<ydb-ca-file>'

Убедитесь, что все пути в tls_config указывают на существующие файлы и что пользователь, под которым запущен Prometheus, имеет права на их чтение.

Если в вашей конфигурации используются клиентский сертификат и ключ, добавьте их в tls_config:

tls_config:
    ca_file: '<ydb-ca-file>'
    cert_file: '<ydb-client-cert-file>'
    key_file: '<ydb-client-key-file>'

Проверка доступности узлов — по HTTPS (curl с https://, см. Метрики в формате Prometheus). Укажите в curl флаг --cacert с тем же путём, что в ca_file.

Если YDB запущен локально в конфигурации «один узел» и мониторинг слушает на одном порту (часто 8765), в обоих файлах — ydbd-storage.yml и ydbd-database.yml — в секции targets укажите один и тот же адрес, например localhost:8765 или <hostname>:8765.

Независимо от выбранного способа подготовки конфигурации шаги запуска и проверки Prometheus ниже одинаковы.

Запуск Prometheus с подготовленной конфигурацией

Отредактированные файлы положите в любую удобную директорию на машине, где запускается Prometheus (рядом с бинарником или отдельно, например /etc/prometheus). Файлы prometheus_ydb.yml, ydbd-storage.yml и ydbd-database.yml расположите в одной папке.

В prometheus_ydb.yml в каждой задаче секции scrape_configs параметр file_sd_configs указывает, из каких файлов брать список целей — ydbd-storage.yml и ydbd-database.yml. По умолчанию пути в file_sd_configs относительные: Prometheus ищет эти файлы относительно рабочей директории процесса при старте. Если задать абсолютные пути, запускать Prometheus можно из любой рабочей директории.

Если Prometheus поднимается только для YDB, в параметре --config.file укажите полный или относительный путь к prometheus_ydb.yml. Перед запуском перейдите в каталог с конфигурацией и запустите процесс из него:

cd <path_to_config_dir>
prometheus --config.file=prometheus_ydb.yml

Если Prometheus уже используется для других систем, не подменяйте основной конфиг файлом prometheus_ydb.yml в --config.file. Добавьте в существующий файл конфигурации (обычно prometheus.yml) задачи из секции scrape_configs в prometheus_ydb.yml — все записи с job_name, начинающимся с ydb/.

Убедитесь, что ydbd-storage.yml и ydbd-database.yml доступны по путям в file_sd_configs перенесенных задач (см. абзац про file_sd_configs выше).

Секцию global: из prometheus_ydb.yml переносите только при необходимости и сверьте значения с уже заданными в вашем конфиге. Запускайте Prometheus с вашим конфигом, например:

prometheus --config.file=<your_prometheus.yml>

После изменений проверьте конфигурацию:

promtool check config <your_prometheus.yml>

Проверьте, что Prometheus запущен и отвечает:

curl "http://localhost:9090/-/healthy"

В веб-интерфейсе Prometheus (как правило, порт 9090) откройте StatusTargets и убедитесь, что группы опроса метрик находятся в состоянии UP (успешный сбор). Исключение — группа, связанная с топиками: при отсутствии топиков в базе данных для нее может отображаться ответ 204 No content. Это не признак ошибки конфигурации.

Настройка Grafana

Подключение Prometheus как источника данных

  1. Откройте веб-интерфейс Grafana.
  2. Перейдите в ConnectionsData sourcesAdd data source.
  3. Выберите тип Prometheus.
  4. В поле Name укажите произвольное имя источника данных, например ydb.
  5. В поле Prometheus server URL укажите URL экземпляра Prometheus, в котором уже настроен сбор метрик с кластера YDB (например, http://localhost:9090, если Grafana и Prometheus на одной машине и Prometheus слушает стандартный порт).
  6. При необходимости заполните поля аутентификации, TLS и таймаутов в соответствии с политикой вашей инсталляции.
  7. Нажмите Save & test в нижней части экрана. При корректной настройке отобразится сообщение об успешном запросе к API Prometheus (например, Successfully queried the Prometheus API).

Дополнительно см. инструкцию Prometheus по созданию источника данных в Grafana.

Импорт дашбордов

Готовые дашборды YDB находятся в репозитории. Если вы использовали плейбук Ansible для генерации конфигурации Prometheus, шаблоны дашбордов будут размещены в подкаталоге grafana-dashboards. Импортируйте JSON-файлы в Grafana через веб-интерфейс или provisioning.

Состав панелей и рекомендации по использованию дашбордов приведены в справочнике по дашбордам Grafana.

Результат

Пример дашборда в Grafana

После импорта откройте дашборд YDB Essential Metrics. В верхней части выберите источник данных Prometheus (как в подключении) и имя базы данных.

пример дашборда YDB Essential Metrics в Grafana

После настройки убедитесь, что цели YDB в Prometheus в состоянии UP (см. Запуск Prometheus с подготовленной конфигурацией), а на дашборде YDB Essential Metrics отображаются метрики.

Доступ к метрикам через веб-интерфейс

Помимо сбора в Prometheus, каждый узел кластера предоставляет встроенный HTTP-интерфейс для просмотра метрик в браузере. Интерфейс показывает текущие значения метрик на момент запроса, без истории; непрерывный сбор и хранение настраивают в Prometheus (см. выше). Интерфейс слушает порт --mon-port (по умолчанию 8765) на хосте узла.

Главная страница — http://<ydb-server-address>:<ydb-port>/counters/: на ней отображается список групп метрик (подсистем). Имена групп и метрик — в описании метрик.

где:

  • <ydb-server-address> — адрес сервера YDB;
  • <ydb-port> — порт мониторинга узла, параметр --mon-port при запуске. Значение по умолчанию: 8765. Как определить порт на конкретном хосте, см. ниже.

При включенном TLS на узле используйте схему https:// в URL.

Как определить порт мониторинга (--mon-port)

Если порт неизвестен, определите его на хосте, где запущен узел YDB (по SSH или в локальной консоли). Если в кластере несколько серверов, при необходимости выполните команду на каждом из них.

ps aux | grep ydbd

пример вывода ps aux с параметром --mon-port у процессов ydbd

В выводе может быть несколько процессов ydbd с разными значениями --mon-port (например, статический и динамический узел на одном сервере). Добавьте в мониторинг все порты тех узлов, метрики которых нужно собирать. На скриншоте выделены отдельные значения только для примера — ориентируйтесь на фактический вывод команды на ваших хостах.

Группы метрик на главной странице

На главной странице перечислены группы метрик по подсистемам — auth, compile, grpc, kqp, pdisks, vdisks и другие. Каждая группа — ссылка на страницу с метриками этой подсистемы.

пример веб-интерфейса мониторинга YDB со списком групп метрик

Просмотр метрик группы (подсистемы)

Чтобы открыть метрики одной группы (подсистемы), перейдите по URL:

http://<ydb-server-address>:<ydb-port>/counters/counters=<servicename>/

Используйте http или https в соответствии с настройкой TLS кластера (как в Метриках в формате Prometheus).

Например, метрики утилизации ресурсов сервера — в группе utils:

http://<ydb-server-address>:<ydb-port>/counters/counters=utils

Метрики в формате Prometheus

Тот же узел отдает метрики в формате Prometheus — по URL с суффиксом /prometheus. Именно эти адреса опрашивает Prometheus (параметр metrics_path в scrape_configs).

http://<ydb-server-address>:<ydb-port>/counters/counters=<servicename>/prometheus

Проверить доступность эндпоинта:

curl "http://<ydb-server-address>:<ydb-port>/counters/counters=<servicename>/prometheus"
https://<ydb-server-address>:<ydb-port>/counters/counters=<servicename>/prometheus

Проверить доступность эндпоинта:

curl --cacert <path-to-ca.crt> "https://<ydb-server-address>:<ydb-port>/counters/counters=<servicename>/prometheus"

Укажите в --cacert тот же путь, что в ca_file в tls_config (см. подготовку конфигурации). При самоподписанном сертификате для диагностики можно добавить флаг -k.

Связь с конфигурацией Prometheus

В шаблонном prometheus_ydb.yml хосты и порты совпадают с ydbd-storage.yml и ydbd-database.yml. Для каждой группы метрик в scrape_configs задан metrics_path вида /counters/counters=<servicename>/prometheus — те же подсистемы, что в списке на главной странице веб-интерфейса.

Другие системы с поддержкой формата Prometheus (Zabbix, Amazon CloudWatch и др.) подключают к тем же URL.

См. также

Предыдущая
Следующая