Перейти к основному контенту

Мониторинг через Prometheus и Grafana

Prometheus собирает метрики каждого узла Клавдия, а Grafana отображает их на панели мониторинга. Используйте этот способ, если в вашей инфраструктуре уже работают Prometheus и Grafana.

Перед началом

  • Подготовьте Prometheus и Grafana.
  • Используйте сборку Клавдия с поддержкой Prometheus. Если её нет в установленном образе, получите подходящую сборку у поставщика.
  • Разрешите доступ от Prometheus к порту метрик каждого узла.
  • Выберите свободный порт. В примере используется 9100; он может быть уже занят другим средством мониторинга.

Включите метрики узла

  1. В .env каждого опрашиваемого узла задайте:

    KLVD_METRICS_PORT=9100
    
  2. Убедитесь, что переменная передаётся в контейнер klvd-node через Docker Compose. Одной записи в .env недостаточно, если compose-файл её не использует.

  3. Примените изменения:

    cd /opt/klvd
    docker compose up -d --force-recreate klvd-node
    
  4. Проверьте маршруты с сервера Prometheus:

    curl --fail --show-error http://10.0.0.1:9100/metrics
    curl --fail --show-error http://10.0.0.1:9100/livez
    curl --fail --show-error http://10.0.0.1:9100/readyz
    
Маршрут Назначение
/metrics метрики в текстовом формате Prometheus
/livez проверка работоспособности процесса узла
/readyz проверка готовности узла

Ограничьте доступ к порту метрик средствами сети. Доступность /metrics сама по себе не подтверждает готовность всех компонентов архива.

Настройте Prometheus

Добавьте задание в существующий раздел scrape_configs файла prometheus.yml:

scrape_configs:
  - job_name: klavdii
    scrape_interval: 15s
    static_configs:
      - targets:
          - '10.0.0.1:9100'
          - '10.0.0.2:9100'

Опрашивайте узлы напрямую. Если собирать метрики через балансировщик, один адрес будет возвращать показатели разных узлов и история станет неоднозначной.

Проверьте конфигурацию и примените её принятым в вашей установке способом:

promtool check config /etc/prometheus/prometheus.yml

Создайте панель Grafana

  1. Добавьте Prometheus как источник данных Grafana.
  2. Создайте панели по выражениям ниже.
  3. Используйте метку instance, чтобы различать узлы.
Панель Выражение PromQL Единицы
Загрузка CPU klvd_cpu_util{job="klavdii"} %
Используемая память klvd_mem_used_kb{job="klavdii"} * 1024 байты
Доля используемой памяти 100 * klvd_mem_used_kb{job="klavdii"} / klvd_mem_limit_kb{job="klavdii"} %; требуется ненулевой лимит
Средняя нагрузка klvd_loadavg{job="klavdii"} / 100 нагрузка; отдельная линия для каждой метки window
Очередь SMTP klvd_smtp_queue_depth{job="klavdii"} сообщения
Активные сеансы SMTP klvd_smtp_active_sessions{job="klavdii"} сеансы
Успешность сбора метрик up{job="klavdii"} 1 — опрос успешен, 0 — ошибка

Все перечисленные метрики Клавдия — показатели текущего состояния (gauge (!)). klvd_loadavg отдаётся в масштабе ×100; средняя нагрузка не является процентом загрузки CPU.

up формируется Prometheus. Значение 1 означает успешный опрос /metrics, а не полную готовность архива. Для проверки /readyz настройте отдельную HTTP-проверку средствами вашей системы мониторинга.

{{СКРИНШОТ}}

Настройте оповещения

Создайте правила для недоступного опроса (up == 0), длительной высокой загрузки CPU и растущей очереди SMTP. Для начала используйте выдержку 5m, затем уточните пороги по обычной нагрузке. Настройте доставку оповещений через используемый в вашей инфраструктуре Alertmanager или Grafana.

Проверьте результат

  1. В Prometheus откройте [Status] (!) → [Targets] (!) и убедитесь, что каждый адрес задания klavdii имеет состояние UP.
  2. Выполните запрос klvd_cpu_util{job="klavdii"}: должны быть отдельные серии для узлов.
  3. В Grafana проверьте единицы измерения и сравните показатели с {{ССЫЛКА:maintenance.dashboard|панелью состояния}}.
  4. В окно обслуживания проверьте срабатывание оповещения при недоступном опросе, затем восстановите узел.

Если метрики не доступны

Проверьте поддержку Prometheus в сборке, передачу KLVD_METRICS_PORT в контейнер, конфликт порта и сетевые правила. При ошибке графика проверьте наличие нужной метрики в /metrics и её метки. Пустая серия не означает нулевую нагрузку.

Связанные материалы

Навигация по книге