Добавлен OTLP-провайдер, реализовано отбрасывание метрик и трейсов в observability + добавлен перезапуск nginx при пересборке контейнеров (ошибка, когда докер меняет адреса сервисов)
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
# SigNoz MVP: dashboards и alerts
|
||||
|
||||
Документ фиксирует versioned-спецификацию первых панелей. Создавайте их через
|
||||
SigNoz Query Builder и экспортируйте полученный Dashboard V2 JSON обратно в
|
||||
репозиторий после проверки реальных имён attributes на production-like данных.
|
||||
|
||||
Обязательные фильтры каждой панели:
|
||||
|
||||
```text
|
||||
service.namespace = han-chat
|
||||
deployment.environment = production-like
|
||||
```
|
||||
|
||||
Добавьте переменные `deployment.environment`, `service.name` и
|
||||
`service.version`. Идентификаторы пользователей, запросов, SMS и сессий
|
||||
переменными dashboard не являются.
|
||||
|
||||
Для Prometheus-scraped SMS/Keycloak metrics имя источника находится в bounded
|
||||
datapoint label `service_name`; для OTLP signals используется resource
|
||||
attribute `service.name`.
|
||||
|
||||
## Dashboard: HAN API RED
|
||||
|
||||
1. **Request rate** — rate/sum `han_http_requests_total`, group by
|
||||
`http.route`, `http.request.method`.
|
||||
2. **Error rate** — доля `han_http_requests_total` с
|
||||
`http.response.status_class=5xx`.
|
||||
3. **Latency p50/p95/p99** — `han_http_request_duration_seconds`, group by
|
||||
route template.
|
||||
4. **Rate-limit decisions** — rate `han_rate_limit_decisions_total`, group by
|
||||
`scope`, `outcome`.
|
||||
5. **Bootstrap outcomes** — rate `han_auth_bootstrap_total`, group by
|
||||
`outcome`.
|
||||
6. **Slow/error traces** — link в Traces с `service.name=api-backend`.
|
||||
|
||||
## Dashboard: HAN SMS
|
||||
|
||||
1. **Send outcomes** — rate `sms_send_total`, group by `provider`,
|
||||
`send_status`.
|
||||
2. **Provider p95 latency** — `sms_provider_request_duration_seconds`.
|
||||
3. **Uncertain outcomes** — rate `sms_uncertain_total`.
|
||||
4. **Callback result/lag** — `sms_callback_total`,
|
||||
`sms_callback_lag_seconds`.
|
||||
5. **Oldest pending** — `sms_pending_oldest_age_seconds`.
|
||||
6. **Journal rows/settings** — `sms_journal_rows`, `sms_settings_valid`.
|
||||
7. **Worker traces** — `service.name=sms-worker`, span `sms.process`.
|
||||
|
||||
## Dashboard: Collector health
|
||||
|
||||
Используйте autocomplete Metrics Explorer для фактических `otelcol_*` имён
|
||||
версии Collector `0.117.0`:
|
||||
|
||||
1. accepted и refused spans/metric points/log records;
|
||||
2. exporter sent/failed;
|
||||
3. sending queue capacity/size;
|
||||
4. tail-sampling sampled/dropped/late spans;
|
||||
5. process RSS/CPU;
|
||||
6. Prometheus scrape failures для `sms-service`, `sms-worker`, `keycloak`;
|
||||
7. отсутствие данных по каждому обязательному `service.name`.
|
||||
|
||||
## Первые alerts
|
||||
|
||||
Alerts создаются после 24 часов baseline. Все правила получают owner, severity
|
||||
и ссылку на `SIGNOZ_RUNBOOK.md`.
|
||||
|
||||
- **API 5xx:** доля 5xx > 5% в течение 5 минут.
|
||||
- **API latency:** p95 выше 750 ms 10 минут; до разделения route-классов это
|
||||
warning, не page.
|
||||
- **SMS uncertain:** рост `sms_uncertain_total` дольше 5 минут.
|
||||
- **SMS pending stale:** `sms_pending_oldest_age_seconds > 300` 5 минут.
|
||||
- **SMS settings invalid:** `sms_settings_valid < 1` 5 минут.
|
||||
- **Collector refused/dropped:** значение > 0 дольше 5 минут.
|
||||
- **Collector queue:** заполнение > 80% 10 минут.
|
||||
- **No telemetry:** обязательный production-like сервис отсутствует 10 минут
|
||||
при ожидаемом трафике.
|
||||
|
||||
Не создавайте SLO по sampled traces. Availability/error budget рассчитываются
|
||||
по metrics. Multi-window burn alerts добавляются после двух недель baseline.
|
||||
|
||||
## Acceptance
|
||||
|
||||
Dashboard считается введённым в эксплуатацию, когда:
|
||||
|
||||
1. панели показывают свежие данные после synthetic request;
|
||||
2. фильтр release отделяет текущий rollout от предыдущего;
|
||||
3. route содержит template, а не UUID/raw URI;
|
||||
4. ни одна metric series не содержит user/session/request/trace identifiers;
|
||||
5. alert проверен контролируемым synthetic failure;
|
||||
6. экспортированный Dashboard V2 JSON сохранён рядом с этим документом.
|
||||
Reference in New Issue
Block a user