# Observability Review — 2026-06-09

**Tool:** SigNoz (self-hosted, https://signoz.chatindex.app)
**Period:** last 24h (сравнение с 7-дневным окном)

## Key Metrics

| Metric | Value (24h) | vs yesterday / 7-day |
|---|---|---|
| Error rate | 0.99% (167 / 16,816 req) | ↑ 9x vs 7-day avg 0.11% |
| p99 latency (MCP SSE) | 4,758,187 ms | long-lived SSE, ожидаемо |
| p99 latency (Search Console URL Insp.) | 6,408 ms (7d) | — |
| p99 latency (LinkedIn API) | 562 ms (24h) | 🟡 приемлемо |
| p99 latency (cron/refresh-tokens) | 338 ms (24h) | 🟢 норма |
| Slow queries (> 100ms) | 0 | без изменений |
| Request volume (24h) | 16,816 | норма |

## Findings

### Ошибки

- **CRITICAL SPIKE**: 167 ошибок за 24ч vs 6 ошибок за предшествующие 6 дней — рост x28.
  - Основной источник: **56 x `GET graph.facebook.com` → HTTP 400** (34% всплеска)
  - Прочие ~111 ошибок — анонимные POST-спаны без `http.route` (неидентифицируемы)
- **7-дневный фон**: 1,421 `POST` → HTTP 400 без атрибута маршрута — персистентная проблема наблюдаемости; не обязательно реальные ошибки, но невозможно диагностировать

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

- **Google Search Console URL Inspection** (7d p99 = **6,408 ms**): значительно превышает желаемый порог 1s; блокирует MCP-вызов на ~6 секунд для 1% запросов
- **MCP SSE (`GET /api/mcp/[apiKey]`)**: p99 = 4.7M ms — long-lived SSE-соединения, артефакт мониторинга, не баг; метрика p99 для этого маршрута не информативна
- **LinkedIn API**: p99 562 ms — приемлемо, тренд стабилен
- **cron/refresh-tokens**: p99 338 ms (24h) / 652 ms (7d) — слегка хуже недельного значения, но в норме

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

- Данных о медленных DB-запросах нет (slow_db_queries: пусто). PrismaInstrumentation активна, запросы трассируются — все укладываются в < 100ms.

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

- LinkedIn API: стабильно (~560ms p99), без ошибок
- Google Search Console: работает, но медленный URL Inspection
- Meta (Facebook/Instagram): 56 ошибок 400 за 24ч — нестабильна, нужна диагностика токенов
- Все другие провайдеры: данных об ошибках нет → статус не определён

## Recurring Issues

| Проблема | Последовательных снапшотов |
|---|---|
| Анонимные POST-400 спаны (1400+/7d без http.route) | ≥ 3 (с 31 мая) |
| MCP SSE p99 как мусорная метрика | ≥ 5 (постоянно) |

## Hypotheses

- cron/refresh-tokens деградирует медленно (282ms → 338ms → 652ms по 7d p99 последовательных снапшотов) — пока в пределах нормы, но тренд вниз; возможно N+1 при большом количестве ServiceConnection
- Небольшое число 404 на `/` (4 за 7d) — возможно бот-сканирование, не проблема
- `.js.map` 404 (несколько за 7d) — sourcemaps не публикуются, это ожидаемо для production

## Recommendations

1. **Добавить timeout 5s для Google Search Console URL Inspection** (p99 6.4s) → снизит worst-case до 5.5s; issue #101
2. **Расследовать всплеск ошибок x28 за последние 24ч** → определить корневую причину и закрыть issue #102
3. **Добавить `http.route` к исходящим MCP-спанам** в `service-fetch.ts` → устранит анонимные POST-400 в SigNoz; issue #103
4. **Добавить обработку Meta Graph API 400** с `OAuthTokenError` при кодах 190/102 → issue #104
5. **Спрятать MCP SSE из p99 дашборда** — либо отдельным фильтром, либо специфичным span name — чтобы метрика p99 была информативной
