# Observability Review — 2026-06-12

**Tool:** SigNoz  
**Period:** последние 24 ч / 7 дней

## Key Metrics

| Metric | Value (24h) | Value (7d) | vs Jun 11 (7d) |
|---|---|---|---|
| Error rate | 0.01% (1 / 16 197) | 0.39% (614 / 157 005) | ↑ 0.03 п.п. |
| p99 latency (MCP SSE) | 19 451 с | 4 759 с | без изменений (SSE keep-alive) |
| p99 latency (threads_publish_thread) | — | 9 977 мс | без изменений |
| p99 latency (OpenRouter credits) | — | 6 505 мс | без изменений |
| p99 latency (Google OAuth callback) | — | 1 314 мс | без изменений |
| p99 latency (refresh_connection) | 304 мс | — | — |
| Slow queries (> 100ms) | 0 | 0 | без изменений |
| Request volume (7d) | — | 157 005 | ↓ ~13 860 vs 170 865 (rolling window) |

## Findings

### Errors

**24h окно (очень здоровое):**
- Всего 1 ошибка в 16 197 запросах — 0.01%. Лучший показатель за последние снапшоты.
- 2 × 404 на `/` и 1 × 400 на `[blocked-action]` (middleware, ожидаемо).

**7d окно:**
- **459 ошибок 400 от `GET graph.facebook.com`** — доминирует 74% всех ошибок. Issue #109 (status:blocked, high).
- 4 ошибки 404 на `.js.map` — source map'ы не поставляются в standalone output. Незначительно.
- 4 ошибки 400 на `[blocked-action]` — ожидаемо.

### Security

- **КРИТИЧНО: OAuth access_token Threads в именах OTel-спанов** — 3-й снапшот подряд с этой уязвимостью. Токены пользователей вида `THAAXGXKfTLNRBY...` видны в SigNoz. Issue #108 (status:blocked, critical). Необходимо снять блокировку.

### Latency

- `GET /api/mcp/[apiKey]` p99 ≈ 19 451 с (24h) — SSE keep-alive соединения. Ожидаемо.
- `mcp.tool threads_publish_thread` p99 = 9 977 мс — Threads API медленный, issue #107 (status:blocked).
- `fetch GET openrouter.ai/api/v1/credits` p99 = 6 505 мс — без кэша, issue #110 (status:blocked).
- `GET /api/oauth/google/callback` p99 = 1 314 мс — **2-й снапшот подряд**, создан issue #111 (medium).
- `mcp.tool linkedin_create_post` p99 = 1 675 мс — выше порога 1 с, частично связано с issue #107 (tcp/tls).
- `refresh_connection` / `oauth.fetch_token` p99 = 304 мс (24h) — приемлемо.

### DB

- Prisma `slow_db_queries` пуст — либо запросов > 100 мс нет, либо Prisma spans не коррелируют корректно с сервисом в текущей выборке.

### Integrations

- Threads API работает, но медленно (p99 ≈ 6–10 с); токены утекают в трейсы.
- Meta Graph API продолжает давать 400 (~66/день).
- OpenRouter, LinkedIn, Google OAuth — работают, но с накопленными проблемами (см. issues).

## Recurring Issues

| Проблема | Снапшотов подряд | Issues |
|---|---|---|
| Tokens Threads в OTel spans | 3 | #108 (critical, blocked) |
| Meta Graph API 400 errors | 3 | #109 (high, blocked) |
| OpenRouter credits без кэша | 3 | #110 (medium, blocked) |
| TCP/TLS failures к сторонним API | 2+ | #107 (medium, blocked) |
| Google OAuth callback > 1 s | **2** | #111 (medium, proposed) |

## Hypotheses

- `GET` (unnamed span) p99 ≈ 1 035 с (7d) — вероятно, второй SSE/long-polling span. Не критично, но стоит проверить корректность `http.route` в этом span.
- Source map 404 (`.js.map`) — Next.js standalone не включает source maps. DevTools их запрашивают. Можно настроить `productionBrowserSourceMaps: true` в `next.config.ts` если нужна отладка в prod.
- 24h волна очень чистая (1 ошибка) — возможно, Meta OAuth соединения временно прекратились или пользователи не делали Meta-операций. Стоит проверить завтра.

## Recommendations

1. **#108 (critical, blocked)** — Снять блокировку. Добавить `SpanProcessor` в `instrumentation.node.ts`, который редактирует `access_token=...` из `http.url` и имени span'а. Рассмотреть ротацию уже утёкших Threads-токенов.
2. **#109 (high, blocked)** — Снять блокировку. Расследовать, сколько уникальных подключений затронуто ошибкой 400. При коде 190/102 → `OAuthTokenError` + `revokeConnectionWithNotification`.
3. **#111 (medium, new)** — Профилировать `handleOAuthCallback` в `oauth-flow.ts`, убрать последовательные Prisma-вызовы, добавить explicit timeout на Google token endpoint.
4. **#110 (medium, blocked)** — Кэшировать `GET /api/v1/credits` на 60 с в памяти или Redis; устранит ~6.5 с p99 для OpenRouter спана.
5. **#107 (medium, blocked)** — Включить `autoSelectFamily: true` для node:https (уже в safe-fetch.ts? перепроверить) чтобы снизить TCP/TLS latency к X, LinkedIn, Threads.
