# Observability Review — 2026-06-08

**Tool:** SigNoz
**Period:** last 7 days (168h)

## Key Metrics

| Metric | Value | vs предыдущий период |
|---|---|---|
| Error rate (7d) | 0.01% (8 / 147,861) | стабильно (было 0.01%, 8 / 155,466) |
| Request volume (7d) | 147,861 span-ов | -5% vs прошлая неделя |
| p99 latency (MCP SSE) | 4,243,264 ms (~70 мин) | SSE keep-alive, ожидаемо |
| p99 latency (GSC URL Inspection) | 6,408 ms (7-дневный хвост) | в 24h срезе не наблюдается → кеш работает ✅ |
| p99 latency (cron/refresh-tokens) | 651 ms | приемлемо для фоновой задачи |
| Slow DB queries (> 100 ms) | N/A — данных нет | рекуррентная проблема (#81) |
| POST 400 без route attribution | 1,421 span-ов | рекуррентно с May 31 |

## Findings

### Ошибки

- **HTTP 400 — `POST` (без маршрута), 1,421 span-ов** — рекуррентная проблема с May 31.
  В 24h срезе (June 7) не воспроизводилась, но в 7-дневном окне присутствует.
  Создан Issue #95 для расследования и добавления OTel attribution.
- **`/[blocked-action]` 400: 167 + 13 span-ов** — ожидаемые заблокированные MCP actions, норма.
- **`/[blocked-action]` 404: 9 span-ов** — незначительно, возможно несуществующие маршруты.
- **`/` 404: 8 span-ов** — незначительно.
- **Всего ошибок (has_error=true): 8** — 0.01%, отличное состояние.

### Латентность

- **`GET /api/mcp/[apiKey]`** p99 = 4,243,264 ms (~70 мин) — SSE keep-alive, ожидаемо, не проблема.
- **`GET` (анонимный)** p99 = 1,113,141 ms (~18.5 мин) — рекуррентный анонимный span, вероятно SSE-related.
- **`fetch POST searchconsole.googleapis.com/urlInspection`** p99 = 6,408 ms (7d) — хвостовая латентность за старый период; в 24h не проявляется (кеш работает). Закрытый Issue #94.
- **`fetch POST googleapis.com/searchAnalytics/query`** p99 = 1,018 ms — borderline slow (> 1s), мониторинг.
- **`POST /api/cron/refresh-tokens`** p99 = 651 ms — приемлемо для фоновой задачи; следить.
- **LinkedIn API** p99 = 435 ms — норма ✅.

### База данных

- `slow_db_queries: []` — PrismaInstrumentation по-прежнему не возвращает данные о запросах (рекуррентно, #81).

### Объём трафика

- 147,861 span-ов за 7 дней (~21,123/день) — -5% vs прошлая неделя (155,466). Без аномалий.

## Recurring Issues

- **POST 400 без маршрута (1,421 span)** — 4-й снапшот подряд начиная с May 31; Issue #95 создан.
- **Нет Prisma DB-данных в SigNoz** — 8-й снапшот подряд.
- **Анонимный GET span (p99 ~18 мин)** — 8-й снапшот подряд; SSE-природа, без активного issue.

## Hypotheses

- **GSC URL Inspection хвостовая латентность**: 7-дневный p99 = 6.4s, но 24h срез (June 7) GSC не показывает в топ-медленных — кеш работает. Следить 1 неделю; если снова появится в 24h топе — открыть issue.
- **Search Analytics p99 = 1,018 ms**: borderline (> 1s); кешируется ли аналогично GSC Inspection? Если нет — рассмотреть TTL 24h для агрегированных запросов.
- **cron/refresh-tokens p99 = 651 ms**: незначительно для фоновой задачи, но учитывая исторические 175 refresh-failures — следить. Если p99 > 1s или circuit breaker (#75) не реализован — поднять.
- **Снижение объёма -5%**: возможно связано с изменением активности клиентов или таймаутом Threads API. Не аномалия, мониторинг.

## Recommendations

1. **[Issue #95, priority:medium]** Расследовать 1,421 POST 400 без route attribution — добавить OTel `http.route` на все error paths в `/api/mcp/[apiKey]` и middleware.
2. **[Мониторинг]** GSC URL Inspection: если снова появится в 24h топе медленных — ревизия TTL и cache eviction.
3. **[Долгосрочно]** Prisma DB инструментация (#81) — без DB-данных невозможно диагностировать N+1 и медленные запросы.
