В уроке 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 уже содержат корректный пример.
Воспроизведение
Запустить стенд с Grafana 11.5.2.
Открыть Alerting → Alert rules.
Остановить airflow-scheduler.
Проверить состояние Airflow Scheduler Down или API /api/prometheus/grafana/api/v1/rules.
Увидеть состояние 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.
Исправление подготовлено в локальной ветке 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 сейчас остановлен. Изменения пока не закоммичены и не отправлены в удалённый репозиторий.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Симптом
В уроке 5 после остановки
airflow-schedulerправилоAirflow Scheduler Downне переходит вAlerting. На Grafana 11.5.2 API правил возвращает:Из-за этого учебный опыт «остановить scheduler и увидеть алерт» не работает.
Причина
Правила Airflow и Kafka используют цепочку:
Thresholdсохраняет временной ряд, поэтому итоговое условие получает не сведённое к одному числу значение. Полеconditions[].reducerвнутри моделиThresholdне заменяет отдельное выражениеReduce.Правильная цепочка:
Дефект воспроизводится во всех четырёх правилах
airflow-alert-rules.ymlи всех трёх правилахkafka-alert-rules.yml. Правила ClickHouse уже содержат корректный пример.Воспроизведение
Alerting → Alert rules.airflow-scheduler.Airflow Scheduler Downили API/api/prometheus/grafana/api/v1/rules.ErrorвместоPending/Alerting.Критерии приёмки
query → Reduce(last) → Threshold.Airflow Scheduler Downна нулевом heartbeat проходитPending → Alerting, а после восстановления возвращается вNormal.only reduced data can be alerted on.rate(...[5m])иfor: 2m.Границы
Не менять имена метрик, источники данных и смысл порогов. Изменения ограничить provisioning Grafana, проверкой контракта и текстом урока 5.
Исправление подготовлено в локальной ветке
fix/28-grafana-alert-reduce.Что сделано:
Prometheus range → Reduce(last) → Threshold;{{ $values.B.Value }};Проверки:
docker compose config --quiet: успешно;health: ok,lastError: null;Airflow Scheduler Downперешёл вAlerting.Полный стенд Docker не запускался: Docker Engine сейчас остановлен. Изменения пока не закоммичены и не отправлены в удалённый репозиторий.