Исправить вычисление Grafana-алертов Airflow и Kafka без Reduce #28

Closed
opened 2026-08-31 18:19:59 +03:00 by ddmitry · 1 comment
Owner

Симптом

В уроке 5 после остановки airflow-scheduler правило Airflow Scheduler Down не переходит в Alerting. На Grafana 11.5.2 API правил возвращает:

invalid format of evaluation results for the alert definition C: looks like time series data, only reduced data can be alerted on.

Из-за этого учебный опыт «остановить scheduler и увидеть алерт» не работает.

Причина

Правила Airflow и Kafka используют цепочку:

Prometheus range query → Threshold → Threshold

Threshold сохраняет временной ряд, поэтому итоговое условие получает не сведённое к одному числу значение. Поле conditions[].reducer внутри модели Threshold не заменяет отдельное выражение Reduce.

Правильная цепочка:

Prometheus range query → Reduce(last) → Threshold

Дефект воспроизводится во всех четырёх правилах airflow-alert-rules.yml и всех трёх правилах kafka-alert-rules.yml. Правила ClickHouse уже содержат корректный пример.

Воспроизведение

  1. Запустить стенд с Grafana 11.5.2.
  2. Открыть Alerting → Alert rules.
  3. Остановить airflow-scheduler.
  4. Проверить состояние Airflow Scheduler Down или API /api/prometheus/grafana/api/v1/rules.
  5. Увидеть состояние Error вместо Pending/Alerting.

Критерии приёмки

  • Все четыре Airflow-правила используют цепочку query → Reduce(last) → Threshold.
  • Все три Kafka-правила используют ту же цепочку.
  • Исходные пороги и направления сравнений сохранены.
  • Airflow Scheduler Down на нулевом heartbeat проходит Pending → Alerting, а после восстановления возвращается в Normal.
  • В API Grafana нет ошибки only reduced data can be alerted on.
  • Добавлена быстрая автоматическая проверка структуры provisioned alert rules.
  • В уроке 5 указано реалистичное время ожидания с учётом rate(...[5m]) и for: 2m.

Границы

Не менять имена метрик, источники данных и смысл порогов. Изменения ограничить provisioning Grafana, проверкой контракта и текстом урока 5.

## Симптом В уроке 5 после остановки `airflow-scheduler` правило `Airflow Scheduler Down` не переходит в `Alerting`. На Grafana 11.5.2 API правил возвращает: ```text invalid format of evaluation results for the alert definition C: looks like time series data, only reduced data can be alerted on. ``` Из-за этого учебный опыт «остановить scheduler и увидеть алерт» не работает. ## Причина Правила Airflow и Kafka используют цепочку: ```text Prometheus range query → Threshold → Threshold ``` `Threshold` сохраняет временной ряд, поэтому итоговое условие получает не сведённое к одному числу значение. Поле `conditions[].reducer` внутри модели `Threshold` не заменяет отдельное выражение `Reduce`. Правильная цепочка: ```text Prometheus range query → Reduce(last) → Threshold ``` Дефект воспроизводится во всех четырёх правилах `airflow-alert-rules.yml` и всех трёх правилах `kafka-alert-rules.yml`. Правила ClickHouse уже содержат корректный пример. ## Воспроизведение 1. Запустить стенд с Grafana 11.5.2. 2. Открыть `Alerting → Alert rules`. 3. Остановить `airflow-scheduler`. 4. Проверить состояние `Airflow Scheduler Down` или API `/api/prometheus/grafana/api/v1/rules`. 5. Увидеть состояние `Error` вместо `Pending`/`Alerting`. ## Критерии приёмки - [ ] Все четыре Airflow-правила используют цепочку `query → Reduce(last) → Threshold`. - [ ] Все три Kafka-правила используют ту же цепочку. - [ ] Исходные пороги и направления сравнений сохранены. - [ ] `Airflow Scheduler Down` на нулевом heartbeat проходит `Pending → Alerting`, а после восстановления возвращается в `Normal`. - [ ] В API Grafana нет ошибки `only reduced data can be alerted on`. - [ ] Добавлена быстрая автоматическая проверка структуры provisioned alert rules. - [ ] В уроке 5 указано реалистичное время ожидания с учётом `rate(...[5m])` и `for: 2m`. ## Границы Не менять имена метрик, источники данных и смысл порогов. Изменения ограничить provisioning Grafana, проверкой контракта и текстом урока 5.
ddmitry added the ready-for-agent label 2026-08-31 18:19:59 +03:00
ddmitry self-assigned this 2026-08-31 18:19:59 +03:00
Author
Owner

Исправление подготовлено в локальной ветке fix/28-grafana-alert-reduce.

Что сделано:

  • во всех 4 правилах Airflow и 3 правилах Kafka добавлена цепочка Prometheus range → Reduce(last) → Threshold;
  • пороги перенесены в Threshold без изменения их значений;
  • аннотации с числом переведены на {{ $values.B.Value }};
  • добавлены регрессионные проверки конфигурации;
  • в уроке 5 уточнено ожидаемое время срабатывания и восстановления.

Проверки:

  • контракты репозитория: 33 passed;
  • тесты generator: 218 passed;
  • docker compose config --quiet: успешно;
  • точная Grafana 11.5.2 с подложным Prometheus: все 7 правил имеют health: ok, lastError: null; Airflow Scheduler Down перешёл в Alerting.

Полный стенд Docker не запускался: Docker Engine сейчас остановлен. Изменения пока не закоммичены и не отправлены в удалённый репозиторий.

Исправление подготовлено в локальной ветке `fix/28-grafana-alert-reduce`. Что сделано: - во всех 4 правилах Airflow и 3 правилах Kafka добавлена цепочка `Prometheus range → Reduce(last) → Threshold`; - пороги перенесены в Threshold без изменения их значений; - аннотации с числом переведены на `{{ $values.B.Value }}`; - добавлены регрессионные проверки конфигурации; - в уроке 5 уточнено ожидаемое время срабатывания и восстановления. Проверки: - контракты репозитория: 33 passed; - тесты generator: 218 passed; - `docker compose config --quiet`: успешно; - точная Grafana 11.5.2 с подложным Prometheus: все 7 правил имеют `health: ok`, `lastError: null`; `Airflow Scheduler Down` перешёл в `Alerting`. Полный стенд Docker не запускался: Docker Engine сейчас остановлен. Изменения пока не закоммичены и не отправлены в удалённый репозиторий.
ddmitry added ready-for-human and removed ready-for-agent labels 2026-09-01 00:53:10 +03:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ddmitry/clickstream-ch-kafka-superset-demo#28