Требуемые знания:
- module-3/02-prometheus-metrics-collection
Лабораторная: построение Grafana дашборда для CDC
В этой лабораторной работе мы создадим production-ready дашборд для мониторинга Debezium коннектора. Вы научитесь визуализировать ключевые метрики: отставание от источника, пропускную способность и утилизацию внутренней очереди.
Подготовка лабораторного окружения
Проверка доступности сервисов
Убедитесь, что Docker Compose стек запущен:
cd labs/
docker compose ps
Все сервисы должны быть в статусе healthy или running.
Доступ к Grafana
- Откройте браузер: http://localhost:3000
- Войдите с учетными данными:
admin/admin - При первом входе можете пропустить смену пароля
Проверка Prometheus datasource
Grafana уже настроена с Prometheus datasource через provisioning. Проверьте:
- Перейдите в Connections > Data sources
- Убедитесь, что Prometheus отображается как default datasource
- Нажмите на него и протестируйте соединение кнопкой Save & test
Важно: Datasource настроен через provisioning и отмечен как
editable: false. Это означает, что изменения в UI не сохранятся после перезапуска контейнера. Такой подход типичен для production — конфигурация хранится в коде.
Существующий справочный дашборд
В Grafana уже есть дашборд Debezium Connect Monitoring (создан в Phase 4). Он содержит базовые панели:
- Connector Status
- Task Count
- Total Records Polled
- Records Polled Rate
- Connector Lag
Мы создадим новый, более детальный дашборд с фокусом на production мониторинг.
Архитектура дашборда
Эффективный CDC дашборд организован по принципу “от общего к частному”:
Структура production-ready дашборда: от общего к частному
Row 1 (Health Overview): Мгновенное состояние — оператор видит “все в порядке” или “требуется внимание” за секунду.
Row 2 (Time Series): Тренды — понимание динамики, обнаружение аномалий.
Row 3 (Details): Детальная информация для troubleshooting.
Создание дашборда
Шаг 1: Создание нового дашборда
- В левом меню нажмите Dashboards
- Нажмите + New > New Dashboard
- Нажмите Add visualization
- Выберите Prometheus как datasource
Шаг 2: Панель Connector Status (Stat)
Первая панель показывает статус подключения к базе данных.
Query:
debezium_metrics_Connected{context="streaming"}
Panel settings:
- Panel type: Stat
- Title: Connector Status
- Description: Database connection status (1=Connected, 0=Disconnected)
Value mappings (Settings > Value mappings):
| Value | Display text | Color |
|---|---|---|
| 1 | Connected | green |
| 0 | Disconnected | red |
Thresholds:
- Base: red
- 1: green
Position: Width 6, Height 4
Нажмите Apply для сохранения панели.
Шаг 3: Панель Current Lag (Gauge)
Эта панель показывает текущее отставание от источника в секундах.
Query:
debezium_metrics_MilliSecondsBehindSource{context="streaming"} / 1000
Примечание: Делим на 1000 для конвертации из миллисекунд в секунды — проще читать.
Panel settings:
- Panel type: Gauge
- Title: Current Lag (seconds)
- Description: Time behind source database. Normal: under 5s, Warning: 5-30s, Critical: over 30s
- Unit: seconds (s)
Thresholds:
- Base (green): 0
- Yellow: 5
- Red: 30
Gauge options:
- Min: 0
- Max: 60 (показывает полную шкалу до критического уровня)
Position: Width 6, Height 4, рядом с Status
Шаг 4: Панель Events per Second (Stat)
Показывает текущую пропускную способность коннектора.
Query:
rate(debezium_metrics_TotalNumberOfEventsSeen{context="streaming"}[1m])
Panel settings:
- Panel type: Stat
- Title: Events/sec
- Description: Current CDC event throughput (1-minute rate)
- Unit: short
- Decimals: 1
Graph mode: Area (показывает sparkline)
Position: Width 6, Height 4
Шаг 5: Панель Queue Usage (Gauge)
Внутренняя очередь Debezium — критичный индикатор backpressure.
Query:
100 * (1 - (debezium_metrics_QueueRemainingCapacity{context="streaming"} / debezium_metrics_QueueTotalCapacity{context="streaming"}))
Логика: (Total - Remaining) / Total * 100 = процент использования.
Panel settings:
- Panel type: Gauge
- Title: Queue Usage %
- Description: Internal event queue utilization. High values indicate backpressure from Kafka.
- Unit: percent (0-100)
Thresholds:
- Base (green): 0
- Yellow: 50
- Orange: 75
- Red: 90
Position: Width 6, Height 4
Проверка знанийПочему для панели Current Lag используется Gauge, а не Stat? Какое преимущество дает Gauge для метрики отставания?
Промежуточный результат
После первых четырех панелей ваш дашборд должен выглядеть так:
4 панели для мгновенной оценки состояния
Шаг 6: Панель Lag Trend (Time Series)
Теперь добавим временные ряды для анализа трендов.
Query:
debezium_metrics_MilliSecondsBehindSource{context="streaming"} / 1000
Panel settings:
- Panel type: Time series
- Title: Lag Trend
- Description: Historical view of connector lag. Use for capacity planning and anomaly detection.
- Unit: seconds (s)
Legend: Hidden (одна метрика)
Thresholds (визуальные линии на графике):
- Enable threshold lines: On
- Warning line at 5
- Critical line at 30
Position: Width 12, Height 8
Шаг 7: Панель Throughput (Time Series)
Query:
rate(debezium_metrics_TotalNumberOfEventsSeen{context="streaming"}[1m])
Panel settings:
- Panel type: Time series
- Title: Event Throughput
- Description: CDC events processed per second. Drops may indicate source database issues or connector problems.
- Unit: short
Position: Width 12, Height 8
Шаг 8: Панель Queue Utilization (Time Series)
Query:
100 * (1 - (debezium_metrics_QueueRemainingCapacity{context="streaming"} / debezium_metrics_QueueTotalCapacity{context="streaming"}))
Panel settings:
- Panel type: Time series
- Title: Queue Utilization
- Description: Persistent high utilization (over 80%) indicates Kafka write bottleneck.
- Unit: percent (0-100)
Axis:
- Min: 0
- Max: 100
Position: Width 12, Height 8
Шаг 9: Панель Staleness (Time Series)
Метрика “как давно было последнее событие” — полезна для low-traffic таблиц.
Query:
debezium_metrics_MilliSecondsSinceLastEvent{context="streaming"} / 1000
Panel settings:
- Panel type: Time series
- Title: Time Since Last Event
- Description: Seconds since connector received any event. High values on active tables indicate streaming issues.
- Unit: seconds (s)
Position: Width 12, Height 6
Шаг 10: Панель Committed Transactions (Time Series)
Query:
rate(debezium_metrics_NumberOfCommittedTransactions{context="streaming"}[1m])
Panel settings:
- Panel type: Time series
- Title: Transactions/sec
- Description: Source database transaction rate being captured.
- Unit: short
Position: Width 12, Height 6
Проверка знанийЗачем на графике Lag Trend добавлять визуальные threshold lines на 5s и 30s, если алерты уже настроены на эти значения?
Настройка переменных (Variables)
Переменные позволяют фильтровать дашборд по коннектору.
Добавление переменной $connector
- Нажмите на иконку шестеренки (Dashboard settings)
- Перейдите в Variables > Add variable
- Настройте:
| Параметр | Значение |
|---|---|
| Name | connector |
| Type | Query |
| Data source | Prometheus |
| Query | label_values(debezium_metrics_Connected, server) |
| Regex | .* |
| Include All option | On |
| Custom all value | .* |
- Нажмите Update и Save dashboard
Использование переменной в запросах
Обновите все запросы, добавив фильтр по server:
debezium_metrics_MilliSecondsBehindSource{context="streaming", server=~"$connector"}
Теперь вы можете выбирать конкретный коннектор в dropdown меню.
Настройки дашборда
General settings
- Dashboard settings > General
- Title: Debezium Production Monitoring
- Description: Production-focused CDC monitoring with lag, throughput, and queue metrics
- Tags: debezium, cdc, monitoring, production
Time settings
- Dashboard settings > Time options
- Auto-refresh: 15s (соответствует Prometheus scrape interval)
- Time range: Last 1 hour
JSON Model
Для справки — полный дашборд доступен в файле:
labs/monitoring/grafana/dashboards/debezium-production.json
Вы можете импортировать его через Dashboards > Import > Upload JSON file.
Экспорт и сохранение дашборда
Экспорт в JSON
- Откройте Dashboard settings (иконка шестеренки)
- Нажмите JSON Model в левом меню
- Скопируйте JSON или нажмите Save to file
Сравнение с эталоном
Сравните ваш дашборд с debezium-production.json:
- Импортируйте эталонный дашборд
- Сравните набор панелей и запросы
- Обратите внимание на thresholds — они соответствуют alert levels из следующего урока
Интерпретация дашборда
Типичные сценарии
| Симптом | Вероятная причина | Действие |
|---|---|---|
| Lag растет, Queue низкий | Источник генерирует много событий | Проверить нагрузку на БД |
| Lag растет, Queue высокий | Kafka не успевает принимать | Проверить Kafka broker latency |
| Lag стабильный, Staleness растет | Нет новых событий | Нормально для low-traffic таблиц |
| Status Disconnected | Потеря соединения с БД | Проверить сеть и credentials |
Контрольные вопросы
- Почему Queue Usage важнее Queue Remaining Capacity для дашборда?
- Какой Prometheus scrape interval влияет на минимальную детализацию графиков?
- Почему MilliSecondsBehindSource никогда не равен нулю?
Ответы
-
Queue Usage (%) — относительная метрика, сразу показывает “много или мало”. Queue Remaining Capacity — абсолютное значение, требует знания QueueTotalCapacity для интерпретации.
-
15 секунд — данные обновляются с этой частотой. Графики с интервалом меньше 15s не покажут дополнительных деталей.
-
Всегда есть processing time — время от записи в БД до попадания в Kafka. Типичные значения 100-500ms — это нормально.
Следующий шаг
В следующем уроке мы настроим алерты на основе этих метрик. Dashboard показывает “что происходит”, алерты уведомляют “когда нужно действовать”.
Checkpoint: Экспортируйте свой дашборд в JSON и сравните с labs/monitoring/grafana/dashboards/debezium-production.json. Убедитесь, что все ключевые панели присутствуют:
- Connector Status
- Current Lag (gauge)
- Events/sec
- Queue Usage
- Lag Trend (time series)
- Throughput (time series)
Проверьте понимание
Закончили урок?
Отметьте его как пройденный, чтобы отслеживать свой прогресс