SaaS-мониторинг Telegram: ядро (модули Cards/Kanban/Pipeline/Tenants/Settings/ Discovery, Api, Infrastructure), сервисы telegram/ai/ml/storage, фронт Vue, контракты и grpc-hosting, деплой-конфиги (dev/prod/observability/CI-раннер), Gitea Actions CI, документация (ТЗ, техдок, api-map, код-стайл, планы, бэклог). Текущее состояние: все этапы роадмапа 0–12 закрыты, сборка 5 sln 0/0, тесты 1340/130/52/38/9 зелёные.
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
# Правила алертов 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 }})."
|
||||
Reference in New Issue
Block a user