# Observability Review — 2026-06-02

**Tool:** SigNoz (`https://signoz.chatindex.app`)
**Period:** последние 24 ч

## Key Metrics

| Метрика | Значение (2026-06-02) | vs вчера (2026-06-01) |
|---|---|---|
| Всего span'ов | 9 724 | ⬇️ −16.6% (было 11 662) — нормализация после спайка |
| Ошибки (hasError=true) | 0 | ✅ 0% (было 0%) |
| Error rate | 0.0% | ✅ без изменений |
| p99 MCP SSE (GET /api/mcp/[apiKey]) | 9 990 767 ms (~166 мин) | ⬆️ Выросло с ~40 мин — SSE-сессии длиннее |
| p99 MCP tool execution (POST /api/mcp/[apiKey]) | 3 391.5 ms | 🔴 ×16.7 (было 202.5 ms) |
| p99 Google Search Console API | 6 407.8 ms | 🔴 ×30.5 (было 209.9 ms) |
| p99 Google Webmasters API | 1 065.1 ms | 🟡 ×5.1 (было ~209 ms) |
| p99 cron/refresh-tokens | 263.9 ms | 🟡 +24.6% (было 211.8 ms) |
| Медленные DB-запросы (>50 ms) | 0 | ✅ |
| HTTP 4xx/5xx | 20 (14×404, 2×400, 2×403, 2×404) | ℹ️ Большинство — боты/краулеры |

## Findings

### Ошибки

**Ошибок в последние 24 часа: 0 ✅**

Ранее зафиксированные 1 596 ошибок (refresh_connection) полностью исчезли из 7-дневного окна — фиксы #61/#62 подтверждены. HTTP-ошибки (20 штук) — 14×GET 404, без атрибуции маршрута. Вероятно, боты или устаревшие ссылки, не требуют немедленного действия.

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

| Endpoint / Span | p99 (24h) | vs вчера | Оценка |
|---|---|---|---|
| GET /api/mcp/[apiKey] | 9 990 767 ms (~166 мин) | ⬆️ с 40 мин | ℹ️ SSE-поток (ожидаемо) |
| GET (generic outgoing) | 1 387 088 ms (~23 мин) | ⬆️ с 16.8 мин | ℹ️ SSE/исходящие |
| fetch POST searchconsole.googleapis.com | 6 407.8 ms | 🔴 ×30.5 | 🔴 Критично — см. #79 |
| POST /api/mcp/[apiKey] | 3 391.5 ms | 🔴 ×16.7 | 🔴 Деградация — см. #78 |
| fetch POST googleapis.com/webmasters | 1 065.1 ms | 🟡 ×5.1 | 🟡 Медленно |
| POST (generic) | 288.5 ms | 🟡 +38% | 🟡 Норм |
| POST /api/cron/refresh-tokens | 263.9 ms | 🟡 +24.6% | 🟡 Норм |
| executing api route /api/cron/refresh-tokens | 261.4 ms | 🟡 | 🟡 Норм |

Ключевая аномалия: **POST /api/mcp/[apiKey] вырос с 202 мс до 3.4 с** при одновременном снижении объёма запросов (9 724 vs 11 662). Деградация не объясняется нагрузкой — нужно расследовать конкретные MCP-инструменты.

### Database

Медленных DB-запросов не обнаружено (0 записей). Instrumentation на уровне Prisma-запросов отсутствует — slow_db_queries всегда пуст. Реальная производительность БД неизвестна.

### Интеграции

- **Google Search Console API**: 6 407 ms p99 — возможный rate-limit или временная нестабильность. Issue #79 создан.
- **Google Webmasters API**: 1 065 ms p99 — приемлемо, но выросло.
- **OAuth refresh (cron)**: 263 ms, 0 ошибок ✅
- **Неатрибутированные spans**: `GET`, `POST` без route — исходящие HTTP-вызовы (undici/fetch). Поведение стабильно, не регрессировало.

### Объём запросов

9 724 span/24h — возврат к норме после вчерашнего спайка (11 662). Baseline 8 179/day, сегодня +19% — в пределах нормы. Issue #76 (алёрт на объём) остаётся актуальным.

## Recurring Issues

- **Неатрибутированные `GET`/`POST` spans** — 3 снэпшота подряд (31 мая, 1 июня, 2 июня). Исходящие HTTP-запросы без route. Не критично, но ухудшает читаемость данных.
- **Отсутствие Prisma-инструментации** — 3 снэпшота подряд. `slow_db_queries` всегда пуст. Нет видимости в производительность БД.

## Hypotheses

- Деградация Google Search Console p99 (6.4s) может коррелировать с деградацией MCP POST (3.4s) — возможно, часть MCP-инструментов вызывает GSC API синхронно, увеличивая общую latency.
- Рост SSE-сессий (~166 мин p99 vs ~40 мин) может указывать на более длинные пользовательские сессии или "зависшие" соединения без cleanup.

## Recommendations

1. **Расследовать деградацию MCP p99** (#78) — выявить конкретные инструменты в SigNoz trace-viewer, добавить per-tool duration logging в handler.ts.
2. **Кэшировать Google Search Console API** (#79) — TTL 15–30 мин, retry с backoff на 429.
3. **Добавить Prisma OTel instrumentation** — подключить `@prisma/instrumentation` для видимости в DB-запросы (recurring issue, 3 снэпшота подряд без действий).
4. **Снизить приоритет #75 до P2** — 0 ошибок refresh_connection третий день подряд. Circuit breaker полезен, но это не P1.
