Мониторинг Camunda 8 (Self-Managed) с помощью Prometheus и Grafana

Camunda 8 имеет кардинально отличающуюся от 7-й версии архитектуру. Движок (Zeebe) написан на Quarkus, а компоненты Operate, Tasklist и Connectors работают на Spring Boot. Это создает сложности при настройке единого конвейера сбора метрик, так как разные компоненты используют разные механизмы и пути для их отдачи.

В данной статье описан пошаговый процесс интеграции Camunda 8.4+ с Prometheus и Grafana, а также разобраны типичные ошибки, с которыми сталкиваются инженеры при настройке мониторинга на production-окружении.

Архитектура решения

Мониторинг строится по классической схеме: Prometheus опрашивает (scrape) эндпоинты Camunda, агрегирует данные и выступает источником данных (Data Source) для Grafana, где отображаются дашборды и срабатывают алерты.

Особенность заключается в разделении портов и путей:

  • Zeebe Broker отдает бизнес-метрики и метрики здоровья кластера.
  • Spring Boot компоненты (Operate, Tasklist, Connectors) отдают метрики через Spring Actuator.

Шаг 1: Включение экспорта метрик в Camunda

По умолчанию экспорт метрик в Camunda 8 отключен. Необходимо добавить переменные окружения в docker-compose.yml на сервере Camunda.

Для Zeebe Broker: Включает встроенный Prometheus экспортер на порту 9600 (порт мониторинга Zeebe).

zeebe:
environment:
- ZEEBE_BROKER_EXPORTERS_PROMETHEUS_ENABLED=true

Для Operate, Tasklist, Connectors: Включает Spring Boot Actuator для Prometheus на внутренних портах 8080.

operate:
environment:
- MANAGEMENT_PROMETHEUS_METRICS_EXPORT_ENABLED=true
tasklist:
environment:
- MANAGEMENT_PROMETHEUS_METRICS_EXPORT_ENABLED=true
connectors:
environment:
- MANAGEMENT_PROMETHEUS_METRICS_EXPORT_ENABLED=true

Важно для Production: Добавление переменных требует перезапуска контейнеров. Рекомендуется выполнять плавающий рестарт (docker-compose up -d --force-recreate <service_name>), начиная с Zeebe, чтобы минимизировать даунтайм.

Шаг 2: Настройка Prometheus

На сервере мониторинга (где установлен Prometheus) необходимо сконфигурировать файл prometheus.yml.

Ключевой момент: для Zeebe используется путь /metrics, а для Spring Boot компонентов — /actuator/prometheus.

global:
scrape_interval: 15s

scrape_configs:
# Zeebe Broker (порт 9600)

  • job_name: ‘zeebe’
    metrics_path: ‘/metrics’
    static_configs:
    • targets: [‘IP_CAMUNDA:9600’]
    Operate (внешний порт 8081)
  • job_name: ‘operate’
    metrics_path: ‘/actuator/prometheus’
    static_configs:
    • targets: [‘IP_CAMUNDA:8081’]
    Tasklist (внешний порт 8082)
  • job_name: ‘tasklist’
    metrics_path: ‘/actuator/prometheus’
    static_configs:
    • targets: [‘IP_CAMUNDA:8082’]
    Connectors (внешний порт 8085)
  • job_name: ‘connectors’
    metrics_path: ‘/actuator/prometheus’
    static_configs:
    • targets: [‘IP_CAMUNDA:8085’]

Шаг 3: Настройка Grafana и алертов

  1. В Grafana добавьте Data Source типа Prometheus (URL: http://prometheus:9090).
  2. Импортируйте дашборд. Из-за несовпадения ID на grafana.com, надежнее импортировать дашборд через JSON-модель.
  3. Настройте базовые алерты (см. таблицу рекомендуемых алертов ниже).

Рекомендуемые алерты для Camunda 8

Название алертаPromQL выражениеПорог / УсловиеОписание проблемы
Zeebe Service Downup{job="zeebe"} == 0Состояние = 0 на протяжении 2 минPrometheus не может достучаться до Zeebe Broker. Упал сервис или сеть.
Incidents Growingsum(rate(zeebe_incident_events_total{action="created"}[5m])) > 0Больше 0 на протяжении 5 минВ процессах возникают ошибки (инциденты), требующие ручного вмешательства.
ES Export Latency Highhistogram_quantile(0.95, sum(rate(zeebe_elasticsearch_exporter_flush_latency_seconds_bucket[5m])) by (le)) > 1Больше 1 секунды на протяжении 5 минElasticSearch не справляется с нагрузкой. Zeebe начнет тормозить.
Job Processing Backlograte(zeebe_job_events_total{action="created"}[5m]) > rate(zeebe_job_events_total{action="completed"}[5m]) * 2Условие истинно 10 минЗадачи создаются быстрее, чем воркеры их обрабатывают.

Возможные ошибки и их решения (Troubleshooting)

В процессе интеграции на Production-окружении могут возникать следующие ошибки.

Ошибка / СимптомПричинаРешение
HTTP status 404 при запросе на IP:9600/metricsПо умолчанию порт 9600 слушает Zeebe Gateway (Spring Boot обертка), а не Broker. У обертки выключен Actuator, а встроенный экспортер Broker не активирован.Добавить переменную ZEEBE_BROKER_EXPORTERS_PROMETHEUS_ENABLED=true в docker-compose.yml и перезапустить Zeebe.
HTTP status 404 при запросе на IP:8081/metrics (Operate/Tasklist)Spring Boot компоненты не отдают метрики по пути /metrics.Изменить путь скрейпинга в prometheus.yml с /metrics на /actuator/prometheus.
Prometheus показывает статус 0 (Down) в Targets, но curl с сервера Grafana работает1. IPv6 глюк Linux (Prometheus стучится по IPv6, Docker отбрасывает).
2. Фаервол блокирует запросы от демона Prometheus, но пропускает ручные curl.
1. Указать в prometheus.yml цель в виде IP-адреса без DNS-разрешения.
2. Проверить ufw / iptables на сервере Camunda, разрешить входящие соединения с IP Prometheus на порты 9600, 8081, 8082, 8085.
Переменные окружения добавлены в docker-compose.yml, но изменений нетDocker Compose не пересоздает контейнеры, если не изменился образ (image).Использовать флаг принудительного пересоздания: docker-compose up -d --force-recreate <service_name>.
context deadline exceeded в Prometheus TargetsZeebe отдает слишком большой объем метрик (мегабайты), и Prometheus не успевает скачать их за дефолтный таймаут (10 сек).Увеличить scrape_timeout в prometheus.yml для job zeebe (например, до 20с), при этом scrape_interval должен быть больше таймаута.
Дашборд импортирован, но графики пустые (No Data)В импортированном JSON дашборда не сопоставлена переменная Data Source с реальным Prometheus.Зайти в Settings -> Variables дашборда, раскрыть переменную DS_PROMETHEUS и из выпадающего списка выбрать ваш созданный Data Source.
Добавить комментарий 0

Ваш электронный адрес не будет опубликован. Обязательные поля помечены *