Нормализовать переводы строк в LF

Решение по TD-STYLE-ANALYZERS: LF — инструменты проекта (Python/Node) пишут LF,
CRLF-.sh не работают на Linux CI (sh scripts/ci.sh), большинство файлов уже были
LF. Добавлен .gitattributes (* text=auto eol=lf, бинарные исключения),
.editorconfig переведён на lf, 1029 файлов конвертированы, git add --renormalize.
Из индекса убраны закравшиеся archive/**/__pycache__/*.pyc.
This commit is contained in:
Rustam Khalimov
2026-09-11 19:01:42 +03:00
parent 39c9bdc1b7
commit 713d554dc2
751 changed files with 94507 additions and 94486 deletions
+81 -81
View File
@@ -1,81 +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 }})."
# Правила алертов 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 }})."