90 lines
4.3 KiB
Markdown
90 lines
4.3 KiB
Markdown
# 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 сохранён рядом с этим документом.
|