Files
Deal/deploy/observability/prometheus-rules.yml
T
stepan a6340ab732 Отключить ресурсные алерты по умолчанию
Правила вынесены в prometheus-resource-rules.yml (не в rule_files);
пороги — через env DEAL_ALERT_* при включении.
2026-09-13 13:47:31 +03:00

83 lines
4.8 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Правила алертов Prometheus для процессов Deal (этап 12, пакет A; Ruling 7 этапа 7).
#
# Подключаются в deploy/observability/prometheus.yml через `rule_files`. Источник метрик — эндпоинты
# /metrics процессов (OTel → экспортёр Prometheus), метка target `service` (core/telegram-service/
# ai-service/ml-service). Имена метрик — в legacy-схеме (global.metric_name_validation_scheme: legacy),
# поэтому точки OTel-имён экранированы в `_` (`deal.sessions.active` → `deal_sessions_active`).
#
# Пороги подобраны консервативно и осознанно «мягкие»: это задел оператору, а не жёсткий SLO —
# уточняйте под реальный профиль нагрузки. Токен-бюджет в Prometheus НЕ алертится намеренно: метрики
# бюджета (`deal_*`) нет (метки низкокардинальные, без tenantId/бюджета). Исчерпание ИИ-бюджета
# доставляется тенанту SSE-тостом (BudgetAlertScheduler), см. техдок §6/§7/§10.
groups:
- name: deal-availability
rules:
# Сервис не отвечает на scrape (недоступен): конфиг включает 4 процесса Deal + сам Prometheus.
- alert: DealServiceDown
expr: up{job="deal"} == 0
for: 2m
labels:
severity: critical
annotations:
summary: "Сервис Deal недоступен — {{ $labels.service }}"
description: "Prometheus не может снять /metrics с {{ $labels.instance }} (service={{ $labels.service }}) более 2 минут."
# Пропажа метрик ядра: scrape ядра или datasource недоступен, хотя Prometheus жив.
- alert: DealCoreMetricsAbsent
expr: absent(deal_sessions_active)
for: 5m
labels:
severity: critical
annotations:
summary: "Нет метрик ядра Deal"
description: "Метрика deal_sessions_active отсутствует более 5 минут — не скрейпится ядро (core:9464) или datasource недоступен."
- name: deal-errors
rules:
# Рост доли 5xx: gRPC-вызовы тоже попадают в http_server_request_duration_seconds_* (gRPC-ингресс).
- alert: DealHigh5xxRatio
expr: |
sum by (service) (rate(http_server_request_duration_seconds_count{http_response_status_code=~"5.."}[5m]))
/
clamp_min(sum by (service) (rate(http_server_request_duration_seconds_count[5m])), 0.001) > 0.05
for: 10m
labels:
severity: warning
annotations:
summary: "Рост 5xx в сервисе {{ $labels.service }}"
description: "Доля 5xx в {{ $labels.service }} выше 5% за 5 минут (текущее значение {{ $value | humanizePercentage }})."
# Абсолютный всплеск 5xx — ловит рост ошибок и на низком трафике, где доля не показательна.
- alert: Deal5xxBurst
expr: sum by (service) (rate(http_server_request_duration_seconds_count{http_response_status_code=~"5.."}[5m])) > 1
for: 5m
labels:
severity: warning
annotations:
summary: "Всплеск 5xx в сервисе {{ $labels.service }}"
description: "Более 1 ответа 5xx/с в {{ $labels.service }} за 5 минут ({{ $value }}/с)."
- name: deal-queues
rules:
# Лаг очереди пайплайна: воркер ходит каждые 2 с, устойчивая глубина = воркер не успевает/залип.
- alert: DealPipelineQueueBacklog
expr: deal_pipeline_queue_depth > 100
for: 15m
labels:
severity: warning
annotations:
summary: "Растёт очередь пайплайна Deal"
description: "Суммарная глубина очереди пайплайна (new+filtered) держится выше 100 более 15 минут ({{ $value }})."
# Лаг ML-outbox: outbox-цикл идёт каждые 10 с; устойчивый рост = ml-service недоступен/отстаёт.
- alert: DealMlOutboxBacklog
expr: deal_ml_outbox_depth > 100
for: 15m
labels:
severity: warning
annotations:
summary: "Растёт очередь обучения ML (outbox)"
description: "Суммарная глубина MlOutbox держится выше 100 более 15 минут ({{ $value }})."