# Observability Review — 2026-05-30

**Tool:** SigNoz (`https://signoz.chatindex.app`)
**Service:** `scopegate`
**Period:** last 24h

## Key Metrics

| Metric | Value | vs yesterday |
|---|---|---|
| Error rate | 1.26% (250 / 19 795 spans) | n/a (first snapshot) |
| p99 latency (slowest endpoint) | 299 585 мс — `GET /api/mcp/[apiKey]` | n/a |
| Slow queries (> 100ms) | Нет данных (DB instrumentation не настроена) | n/a |
| Request volume | 19 795 spans / 24h | n/a (first snapshot) |

## Findings

### Latency

- **`GET /api/mcp/[apiKey]`** — p99 = 299 585 мс (~5 минут): критично. Соединения достигают потолка HTTP-таймаута. Вероятна SSE/streaming природа, но без keep-alive или reconnect это означает разрыв соединений. → [Issue #59](https://github.com/alifanov/scopegate/issues/59)
- **`POST /api/cron/refresh-tokens`** — p99 = 679.8 мс: выше порога 500 мс. OAuth-вызов занимает 214.8 мс, оставшиеся ~465 мс — внутренняя обработка. → [Issue #60](https://github.com/alifanov/scopegate/issues/60)
- **`POST`** (generic) — p99 = 536 мс: немного выше порога, нет детализации маршрута.
- **`fetch POST https://oauth2.googleapis.com/token`** — p99 = 214.8 мс: внешний вызов Google OAuth, приемлемо.
- **`GET /login`**, **`GET /`** — p99 < 200 мс: отличный показатель.

### Errors

- **610 HTTP 400 на POST**: причина неизвестна — нет разбивки по маршрутам. Возможно, middleware из fix(#58) блокирует невалидные Server Action ID. → [Issue #61](https://github.com/alifanov/scopegate/issues/61)
- Общий error rate 1.26% — умеренный, требует мониторинга.

### Database

- Данные о DB-запросах недоступны: `slow_db_queries` пуст. Prisma-инструментация либо не настроена, либо данные не дошли до SigNoz.

### Integrations

- Трассировки поступают корректно, 5 top-уровневых маршрутов видны в SigNoz.
- Лог-сэмплы пусты (`error_log_samples = []`) — возможно, уровень ERROR не достигается или логи не пробрасываются в SigNoz.

## Recurring Issues

Первый снапшот — сравнение с предыдущими периодами недоступно.

## Hypotheses

- **DB instrumentation**: судя по пустому `slow_db_queries`, Prisma-спаны не попадают в SigNoz. Вероятно, `@opentelemetry/instrumentation-prisma` не подключён или не передаёт DB спаны. Порог для issue: если ситуация повторится в следующем снапшоте.
- **Пустые error logs**: либо приложение не эмитирует ERROR-уровень через OTel Logger, либо лог-трансport не настроен. Стоит проверить `instrumentation.node.ts`.

## Recommendations

1. **`GET /api/mcp/[apiKey]` (p99 = 299 с)** → добавить SSE keep-alive пинги каждые 30 с + клиентский reconnect → ожидаемый результат: p99 < 60 000 мс или документирование ожидаемого поведения.
2. **`POST /api/cron/refresh-tokens` (p99 = 679 мс)** → профилировать внутренние шаги через дополнительные спаны → ожидаемый результат: p99 < 500 мс.
3. **610 HTTP 400** → добавить `http.route` в трассировку POST → ожидаемый результат: разбивка ошибок по маршрутам в SigNoz.
4. **DB instrumentation** → подключить `@prisma/instrumentation` или `opentelemetry-instrumentation-prisma` → ожидаемый результат: slow queries видны в SigNoz.
5. **Error logs** → убедиться, что `ConsoleLogRecordExporter` или OTLP log exporter настроен в `instrumentation.node.ts`.
