* feat(docs): mirror every docs/ page in all 65 locales Extends the documentation mirrors from the 22-page core set (#13940) to every Markdown page under docs/: 152 sources x 65 locales = 9,880 mirrors (6,208 new), language bars rewritten for the full locale list, state adopted so the blocking drift gate now covers all 152 pages. run-translation.mjs: an oversized block made only of table rows or list items (PROVIDER_REFERENCE.md 244-row table, FREE_TIERS.md 71-item list) is cut at item boundaries and rejoined without a blank line — the single 16-40 KB request outlived the backend socket for verbose scripts. 48 older mirrors whose tables had lost rows were retranslated with --force. * docs(i18n): refresh mirrors for the sources the base changed since the branch cut Section-level retranslation of the 29 docs (and README.md) whose source or mirrors moved on release/v3.8.51 during the run, then state adoption; the drift gate is green again on the merged tree.
47 KiB
Monitoring & Observability Guide (Русский)
🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇳🇬 ha · 🇮🇱 he · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇦🇲 hy · 🇮🇩 id · 🇳🇬 ig · 🇮🇹 it · 🇯🇵 ja · 🇬🇪 ka · 🇰🇭 km · 🇮🇳 kn · 🇰🇷 ko · 🇱🇹 lt · 🇱🇻 lv · 🇮🇳 ml · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇲🇲 my · 🇳🇵 ne · 🇳🇱 nl · 🇳🇴 no · 🇮🇳 or · 🇮🇳 pa · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇱🇰 si · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW
Кратко: OmniRoute поставляется со встроенным мониторингом состояния, автопилотом провайдеров, отслеживанием квот и хуками наблюдаемости. В этом руководстве рассматриваются панель мониторинга, оповещения и устранение неполадок.
Исходные файлы:
src/lib/monitoring/observability.ts— снимок наблюдаемостиsrc/lib/monitoring/comboHealthAutopilot.ts— автопилот состояния комбинацийsrc/lib/monitoring/providerHealthAutopilot.ts— автопилот провайдеровsrc/lib/monitoring/providerHealthMatrix.ts— матрица состояния провайдеровsrc/lib/localHealthCheck.ts— локальная проверка состоянияsrc/lib/tokenHealthCheck.ts— состояние обновления токеновsrc/lib/proxyHealth.ts— кеш состояния прокси (описан в PROXY_GUIDE.md)
Обзор
В OmniRoute предусмотрено 3 уровня мониторинга:
┌──────────────────────────────────────────────────────────────┐
│ Уровень 1: Состояние системы (на уровне сервера) │
│ ├─ localHealthCheck.ts — БД, порты, нативные зависимости │
│ ├─ db/healthCheck.ts — целостность, FK, потерянные артефакты │
│ └─ Панель мониторинга: /dashboard/health │
├──────────────────────────────────────────────────────────────┤
│ Уровень 2: Состояние провайдеров (отказоустойчивость │
│ для каждого провайдера) │
│ ├─ providerHealthAutopilot.ts — автоматический выключатель, │
│ │ периоды ожидания │
│ ├─ providerHealthMatrix.ts — оценки состояния по │
│ │ провайдерам/моделям │
│ └─ Панель мониторинга: /dashboard/providers │
├──────────────────────────────────────────────────────────────┤
│ Уровень 3: Наблюдаемость в реальном времени │
│ (снимки среды выполнения) │
│ ├─ observability.ts — автоматические выключатели, сеансы, │
│ │ квота │
│ ├─ tokenHealthCheck.ts — состояние обновления токенов OAuth │
│ └─ Инструменты MCP: omniroute_get_health, │
│ omniroute_get_session_snapshot │
└──────────────────────────────────────────────────────────────┘
Страницы панели мониторинга
/dashboard/health (Состояние системы)
Панель мониторинга состояния верхнего уровня показывает:
| Раздел | Что отображается |
|---|---|
| Состояние сервера | Время работы, версия, порт, активные подключения |
| База данных | Подключение, целостность, размер WAL, последние миграции |
| Сводка провайдеров | Количество активных и исправных провайдеров, число разомкнутых автоматических выключателей |
| Мониторы квот | Активные сеансы, оповещения, исчерпанные квоты |
| Последние ошибки | Последние 10 ошибок с трассировками стека |
| Использование ресурсов | Память, ЦП, индикатор нагрузки на кучу |
/dashboard/providers (Состояние провайдеров)
Панель мониторинга для каждого провайдера:
| Столбец | Описание |
|---|---|
| Провайдер | Идентификатор провайдера + отображаемое имя |
| Состояние | Зелёный/жёлтый/красный статус |
| Выключатель | Разомкнутое/замкнутое/полуразомкнутое состояние |
| Подключения | Количество подключений, последнее обновление |
| Модели | Доступные модели, состояние каждой модели |
| Стоимость | Стоимость за сегодня, тенденция за 7 дней |
| Ошибки | Число ошибок за последние 24 ч, основной класс ошибок |
Нажмите на провайдера, чтобы увидеть:
- Последние запросы с разбивкой задержки
- Оценки состояния для каждого подключения
- Блокировки для каждой модели
- Рекомендации автопилота
/dashboard/quota (Отслеживание квот)
Для каждого API-ключа:
- Текущее использование относительно лимита (индикатор выполнения)
- Динамика квоты (график за 30 дней)
- Время следующего сброса
- История оповещений
/dashboard/combos (Состояние комбинаций)
Для каждой комбинации:
- Стратегия + целевые объекты
- Состояние каждого целевого объекта
- Последние события переключения на резерв
- Доля успешных запросов (24 ч, 7 дн., 30 дн.)
API проверки работоспособности
OmniRoute предоставляет две HTTP-точки проверки работоспособности. Они не являются взаимозаменяемыми для оркестраторов.
| Путь | Назначение | Нагрузка | Использование |
|---|---|---|---|
GET /healthz |
Проверка жизнеспособности/готовности жизненного цикла (ok / starting / stopping) |
Минимальная (только флаг фазы) | Готовность Kubernetes; щадящая проверка жизнеспособности, если необходимо использовать HTTP |
GET /api/monitoring/health |
Подробная сводка по системе и провайдерам (БД, куча, количество записей в каталоге, …) | Высокая (синхронная работа с БД / мониторингом) | Панели мониторинга, глубокие внешние проверки, встроенная проверка работоспособности Docker |
Примечание: Матрицы состояния провайдеров, проблемы автопилота, мониторы квот, состояние токенов и подробные данные о задержках, не входящие в
/api/monitoring/health, доступны через инструмент MCPobservability_snapshotили страницы панели мониторинга — отдельных REST-маршрутов для них нет.
Оба маршрута выполняются в том же цикле событий Node, что и обработка запросов. CPU-зависимый путь (обработка большого каталога GET /v1/models, сжатие длинного контекста / подсчёт токенов) может задержать все HTTP-обработчики, включая /healthz. Занятый цикл событий ≠ мёртвый процесс. Предпочтительно устранить причину нагрузки; настройка проверок лишь уменьшает количество ошибочных завершений процесса.
Легковесная проверка оркестратора
GET /healthz
# или HEAD /healthz
- 200 + тело
ok, когда фаза жизненного цикла сервера находится в состоянии готовности - 503 +
starting/stoppingво время запуска или завершения работы - Реализация:
src/app/healthz/route.ts(без проверки связи с БД)
Состояние системы (подробная проверка)
GET /api/monitoring/health
Ответ:
{
"status": "healthy",
"version": "3.8.16",
"uptime": 123456,
"checks": {
"database": { "status": "pass", "latency_ms": 2 },
"writeable": { "status": "pass" },
"integrity": { "status": "pass", "result": "ok" },
"foreign_keys": { "status": "pass", "violations": 0 },
"heap_pressure": { "status": "pass", "usage_mb": 142, "threshold_mb": 512 },
"active_sessions": 12,
"providers": {
"total": 7,
"healthy": 6,
"degraded": 1,
"down": 0
}
}
}
credentialHealth: кеш проверок и test_status в SQLite
GET /api/monitoring/health → credentialHealth — это метрика кеша проверок в памяти,
а не актуальная выгрузка provider_connections.test_status. После #12532 путь
обработки запроса считывает только getCachedCredentialHealthSummary(); фоновые проверки
обновляют кеш вне цикла событий.
| Уровень | Где | Что это означает |
|---|---|---|
| Метрика кеша проверок | credentialHealth.total / healthy / failed / unknown / stale |
Последние результаты проверки состояния учётных данных, которые всё ещё хранятся в памяти процесса. Значение source всегда равно probe-cache. |
| Сведения об ошибочных подключениях | credentialHealth.failedConnections |
Присутствуют только при failed > 0. Ограниченный список строк кеша со status=error (connectionId, status, очищенные lastError / lastErrorType). Если список был ограничен, устанавливается failedOmitted. |
| Закреплённый статус SQLite | credentialHealth.staleDbNonOkCount |
Количество строк активных (is_active=1) подключений, у которых сохранённый test_status имеет известное состояние, отличное от успешного (error, expired, credits_exhausted, banned, deactivated, unavailable). |
Эти два уровня могут намеренно расходиться:
- Метрика
failed=0, когдаstaleDbNonOkCount>0— в SQLite всё ещё хранится закреплённыйtest_status(например,expiredилиcredits_exhausted), который последний снимок кеша проверок не учитывает какstatus=error. - Метрика
failed>0, когда согласно SQLite всё исправно — недавняя проверка завершилась ошибкой и была закеширована; строка БД ещё не обновлена или впоследствии была очищена.
Не создавайте оповещения исключительно на основе provider_connections.test_status при сборе данных
из этой конечной точки. Используйте failed + failedConnections для актуальных ошибок проверок и
staleDbNonOkCount, когда требуется количество сохранённых закреплённых статусов.
Рекомендации по проверкам Kubernetes
OmniRoute представляет собой один процесс Node (с одним циклом событий). Стандартная Docker-проверка HEALTHCHECK обращается к легковесному маршруту /healthz. /api/monitoring/health слишком ресурсоёмок для интервалов проверки жизнеспособности kubelet.
| Проверка | Рекомендуемая цель | Примечания |
|---|---|---|
| Запуск | HTTP GET /healthz с большим failureThreshold (или длительным startPeriod) |
Холодный запуск + миграция SQLite могут занять более нескольких секунд |
| Готовность | HTTP GET /healthz |
Состояние жизненного цикла ok / starting / stopping (200 или 503). Проверка по-прежнему может нестабильно срабатывать, если цикл событий заблокирован вычислениями CPU. Ответ 200, полученный через несколько секунд, не означает исправную работу (#10303) — это значит, что цикл событий был лишён ресурсов до выполнения обработчика, возвращающего 3 байта |
| Работоспособность | HTTP GET /livez или TCP на основном порту сервиса (PORT, по умолчанию 20128) |
/livez проверяет только, что процесс запущен (всегда возвращает 200, если обработчик выполняется). Но он использует тот же цикл событий — занятость ≠ отказ, и он выявляет нехватку ресурсов цикла событий (#10303) не лучше, чем TCP. Предпочитайте TCP, если HTTP-проверки завершаются по тайм-ауту под нагрузкой каталога/сжатия; в любом случае не завершайте pod из-за кратковременных задержек цикла событий |
| Глубокая проверка состояния | GET /api/monitoring/health из внешней системы проверки |
Не предназначено для livenessProbe kubelet или частой readinessProbe |
Пример конфигурации (настройте пороговые значения с учётом нагрузки при холодном запуске и сжатии):
ports:
- name: http
containerPort: 20128
startupProbe:
httpGet:
path: /healthz
port: http
failureThreshold: 30
periodSeconds: 5
readinessProbe:
httpGet:
path: /healthz
port: http
periodSeconds: 5
timeoutSeconds: 2
failureThreshold: 6
livenessProbe:
httpGet:
path: /livez
port: http
periodSeconds: 10
timeoutSeconds: 3
failureThreshold: 6
# При задержке цикла событий HTTP-запрос к /livez всё равно может завершиться
# по тайм-ауту. TCP — более консервативная альтернатива:
# tcpSocket:
# port: http
Не направляйте проверку работоспособности kubelet на /api/monitoring/health. Этот путь выполняет реальную работу с БД и мониторингом и под нагрузкой будет давать ложные срабатывания.
См. также: #10052 (проверки, когда цикл событий занят), #9685 / #10055 (чрезмерная нагрузка из-за расчёта цен каталога), #10117 (чрезмерная нагрузка из-за подсчёта токенов при сжатии).
Необязательная обработка запросов (память, навыки, обновление токенов)
Извлечение памяти, внедрение навыков и обновление токенов OAuth используют основной цикл событий Node совместно с /healthz. Это функции, переключаемые в панели управления (memoryEnabled, skillsEnabled), а не пул рабочих процессов. См. Окружение — нагрузка на цикл событий.
Состояние провайдера
REST-эндпоинт отсутствует. Данные о состоянии провайдеров доступны через MCP-инструмент
observability_snapshotили на странице/dashboard/providersпанели управления.
Сведения о провайдере
REST-эндпоинт отсутствует. Подробные сведения по каждому провайдеру доступны на странице
/dashboard/providersпанели управления.
Автопилот состояния провайдеров
Модуль providerHealthAutopilot.ts представляет собой самовосстанавливающуюся систему, которая:
- Обнаруживает проблемы провайдеров (разомкнутые цепи, периоды ожидания, блокировки, предупреждения о квотах)
- Формирует рекомендуемые действия для их устранения
- При необходимости автоматически выполняет действия с низким уровнем риска
Типы обнаруживаемых проблем
| Тип проблемы | Серьёзность | Пример условия |
|---|---|---|
provider_circuit_open |
критическая | Цепь разомкнута после 5 сбоев |
provider_circuit_half_open |
предупреждение | Цепь проверяет восстановление |
connection_cooldown |
предупреждение | Подключение находится в периоде ожидания после 429 |
stale_connection_error |
предупреждение | Последнее обновление завершилось сбоем более 30 минут назад |
terminal_connection_error |
критическая | OAuth отозван, ключ недействителен |
inactive_connection |
информационная | Подключение отключено в настройках |
model_lockout |
предупреждение | Конкретная модель помещена в карантин |
quota_monitor_warning |
предупреждение | Использовано не менее 80% квоты |
Типы формируемых действий
| Действие | Риск | Описание |
|---|---|---|
clear_provider_breaker |
средний | Сбросить автоматический выключатель в замкнутое состояние |
clear_connection_cooldown |
низкий | Снять период ожидания с подключения |
clear_stale_connection_error |
низкий | Сбросить флаг устаревшей ошибки |
clear_model_lockout |
низкий | Повторно включить модель из карантина |
reactivate_connection |
средний | Повторно включить деактивированное подключение |
deactivate_connection |
высокий | Отключить проблемное подключение |
API
REST-эндпоинт отсутствует. Проблемы, обнаруженные автопилотом, доступны через инструмент MCP
observability_snapshotили панель мониторинга. Автопилот работает внутри системы; его поведение настраивается через БД настроек (полеautopilotModeдля каждого подключения), а не через переменные окружения — командаgrep -rnдля переменной окружения режима автопилота не возвращает результатов.
Режим автопилота
По умолчанию автопилот работает в ручном режиме — он обнаруживает проблемы и формирует рекомендуемые действия, но не применяет их автоматически. Действия можно применить через панель мониторинга.
Автопилот состояния комбинаций
comboHealthAutopilot.ts — это ориентированный на комбинации аналог автопилота провайдеров. Он:
- Обнаруживает неработоспособные комбинации
- Рекомендует изменить порядок целей
- Предлагает отключить неисправные цели
- Автоматически удаляет неработающие цели после N сбоев
Примеры проблем с комбинациями
Комбинация "always-on" (стратегия приоритетов)
├─ Цель 1: openai/gpt-5 (работоспособна)
├─ Цель 2: anthropic/claude-opus-4-6 (⚠️ модель заблокирована до 14:00)
└─ Цель 3: kiro/claude-sonnet-4-5 (работоспособна)
Рекомендуемое действие: изменить порядок — переместить kiro выше anthropic до истечения срока блокировки
Мониторы квот
observability.ts предоставляет мониторы квот для каждого сеанса для провайдеров с подпиской (Claude Code, Codex, GitHub Copilot):
interface QuotaMonitorSnapshot {
sessionId: string;
provider: string;
accountId: string;
status: "starting" | "idle" | "healthy" | "warning" | "exhausted" | "error";
lastQuotaPercent: number | null; // 0–100
lastQuotaUsed: number | null;
lastQuotaTotal: number | null;
lastResetAt: string | null;
nextPollAt: string | null;
totalPolls: number;
totalAlerts: number;
consecutiveFailures: number;
}
Значения статусов
| Статус | Когда | Действие интерфейса |
|---|---|---|
starting |
Выполняется первоначальный опрос | Индикатор загрузки |
idle |
Нет недавней активности | Скрыть с панели мониторинга |
healthy |
Осталось более 50% квоты | Зелёная точка |
warning |
Осталось менее 50% квоты | Жёлтое предупреждение |
exhausted |
Квота = 0% | Красный блок, перенаправление к следующему провайдеру |
error |
Опрос завершился сбоем | Красная точка, вскоре повторить попытку |
API
REST-эндпоинт отсутствует. Данные монитора квот доступны через инструмент MCP
observability_snapshotили панель мониторинга.
Снимок наблюдаемости
Инструмент MCP observability_snapshot возвращает полный снимок состояния системы для ИИ-агентов:
{
"circuitBreakers": [
{
"name": "openai",
"state": "closed",
"failureCount": 0,
"lastFailureTime": null,
"retryAfterMs": null
}
],
"sessions": [
{
"sessionId": "sess-123",
"createdAt": 1234567890,
"lastActive": 1234567999,
"requestCount": 42,
"connectionId": "conn-456",
"ageMs": 109
}
],
"quotaMonitors": {/* см. выше */},
"uptime": 12345,
"version": "3.8.16"
}
Агенты используют его для принятия решений о маршрутизации — например: «если цепь openai разомкнута, сначала направить запрос к anthropic».
Проверка состояния токенов
Провайдерам OAuth (Claude Code, GitHub Copilot, Cursor) требуется периодическое обновление токенов. src/lib/tokenHealthCheck.ts запускает фоновый планировщик:
- Цикл сканирования: каждые 60 секунд (сканирование с интервалом
TICK_MS = 60 * 1000вsrc/lib/tokenHealthCheck.ts:30) - Интервал проверки состояния каждого подключения: по умолчанию 60 минут (
DEFAULT_HEALTH_CHECK_INTERVAL_MIN = 60); настраивается через базу данных настроек - Упреждающее обновление при ошибке 401: обрабатывается перехватчиком соответствующего подключения
Состояние токена
interface TokenHealth {
connectionId: string;
provider: string;
status: "valid" | "expiring_soon" | "expired" | "refresh_failed";
expiresAt: string;
lastRefresh: string;
nextRefresh: string;
consecutiveFailures: number;
}
Конфигурация
Конфигурация проверки состояния токенов обрабатывается внутри tokenHealthCheck.ts.
Состояние токенов
Конечная точка REST отсутствует. Данные о состоянии токенов доступны через панель управления или инструмент MCP
observability_snapshot.
Оповещения
Встроенные каналы
OmniRoute поддерживает 3 канала оповещений:
| Канал | Настройка | Сценарий использования |
|---|---|---|
| Баннер панели управления | Всегда включён | Уведомления внутри приложения |
| Вебхук | Настройте URL | Slack, Discord, PagerDuty |
| Журнал | По умолчанию | Для внешней агрегации журналов |
Настройка вебхука
Примечание: Настройка оповещений через вебхук выполняется на странице Settings панели управления. Параметры URL вебхука, фильтрации событий и настройки полезной нагрузки см. в интерфейсе Settings.
Типы оповещений
| Оповещение | Условие | Уровень серьёзности по умолчанию |
|---|---|---|
provider_circuit_open |
Цепь размыкается | critical |
provider_circuit_half_open |
Цепь тестирует восстановление | info |
quota_warning |
Квота использована на 80% и более | warning |
quota_exhausted |
Квота использована на 100% | critical |
token_refresh_failed |
3 и более последовательных сбоев обновления | warning |
token_expired |
Срок действия токена истёк | critical |
combo_target_unhealthy |
Цель комбинации в режиме ожидания более 1 ч | warning |
db_integrity_warning |
Нарушений внешних ключей > 0 | warning |
heap_pressure |
Использование кучи > 80% от порогового значения | warning |
Метрики производительности
Отслеживаемые метрики
| Метрика | Тип | Источник |
|---|---|---|
request_count |
счётчик | services/usage.ts |
request_latency_ms |
гистограмма | services/usage.ts |
tokens_consumed |
счётчик | services/usage.ts |
cost_usd |
счётчик | services/usage.ts |
provider_errors |
счётчик | services/errorClassifier.ts |
circuit_state_changes |
счётчик | services/resilience.ts |
cache_hits |
счётчик | services/signatureCache.ts |
compression_savings |
гистограмма | services/compression/stats.ts |
quota_used |
индикатор | services/quotaMonitor.ts |
memory_used_mb |
индикатор | observability.ts |
Процентили задержки (p50/p95/p99)
REST-эндпоинт отсутствует. Данные о процентилях задержки доступны на странице панели мониторинга
/dashboard/health. Экспорт в Prometheus/OpenTelemetry запланирован на v3.9.
Экспорт в Prometheus / OpenTelemetry (этап 2)
В v3.9 запланирован встроенный экспорт в Prometheus, OpenTelemetry и Datadog.
Пока используйте опрос /api/monitoring/health с помощью любой системы мониторинга на основе HTTP (Prometheus blackbox exporter, HTTP-проверка Datadog и т. д.).
Рецепты настройки оповещений
Slack
Примечание: Оповещения через вебхуки настраиваются на странице Settings панели управления — специальных переменных окружения для вебхуков нет (
grep -rnне находит ни одного совпадения). URL вебхука, фильтрацию событий и настройку полезной нагрузки см. в интерфейсе Settings.
Discord
Оповещения через вебхуки настраиваются в том же интерфейсе Settings, что и для Slack. Discord принимает полезную нагрузку JSON той же структуры.
PagerDuty
Оповещения через вебхуки настраиваются в том же интерфейсе Settings. Ключи маршрутизации PagerDuty Events API v2 задаются в интерфейсе Settings.
Пользовательский вебхук (JSON)
Подойдёт любой HTTP-эндпоинт, принимающий POST-запросы с телом в формате JSON. Укажите URL в интерфейсе Settings.
Настройка панели мониторинга
Настройка панели состояния
Создайте файл ~/.omniroute/dashboard.json:
{
"health": {
"sections": ["server_status", "database", "providers", "quota_monitors", "recent_errors"],
"refresh_interval_ms": 5000
}
}
Закрепление провайдера в верхней части
{
"health": {
"pinned_providers": ["openai", "anthropic"]
}
}
Устранение неполадок
«Провайдер отображается как работоспособный, но запросы завершаются ошибкой»
- Проверьте проблемы автопилота — возможно, модель заблокирована
- Просмотрите недавние ошибки, относящиеся к конкретному классу ошибок
- Запустите проверку подключения в карточке провайдера
- Проверьте, не применяется ли провайдером ограничение частоты запросов на вышестоящей стороне (локально это не отображается)
«Квота отображается как доступная, но я получаю ошибки 429»
- Код 429 означает, что, по данным провайдера, вы исчерпали свою квоту
- Данные OmniRoute об использовании квоты могут быть устаревшими — актуальные данные находятся на стороне провайдера
- Данные о квоте автоматически обновляются внутренним монитором квот
«Комбинация не работает, хотя все целевые ресурсы выглядят работоспособными»
- Проверьте состояние комбинации на панели мониторинга на наличие проблем с порядком целевых ресурсов
- Просмотрите события переключения на резервный ресурс — возможно, комбинация слишком быстро исчерпывает доступные варианты
- Убедитесь, что стратегия соответствует вашему сценарию использования (приоритет, циклический перебор или автоматический режим)
«Проверка состояния базы данных завершается ошибкой»
- Выполните
sqlite3 ~/.omniroute/storage.sqlite "PRAGMA integrity_check;" - Если результат — «ok», это ложная тревога: проверка состояния слишком строгая
- Если результат любой другой — остановите OmniRoute и следуйте руководству по аварийному восстановлению
«Нагрузка на кучу памяти достигла критического уровня»
# Проверьте текущее состояние кучи
node -e "console.log(process.memoryUsage())"
# Запустите сборку мусора вручную (если используется --expose-gc)
node --expose-gc -e "global.gc(); console.log(process.memoryUsage())"
# Уменьшите количество параллельных запросов (задаётся на странице Settings панели управления, а не через переменную окружения)
# Переменной окружения `MAX_CONCURRENT_REQUESTS` не существует — настройте этот параметр в Settings → Concurrency.
См. также
- USAGE_QUOTA_GUIDE.md — отслеживание использования и затрат
- DATABASE_GUIDE.md — схема БД и её состояние
- PROXY_GUIDE.md — состояние прокси (отдельный кэш)
- ARCHITECTURE.md — архитектура системы
- RESILIENCE_GUIDE.md — подробности о предохранителе
- Исходный код:
src/lib/monitoring/(4 файла, 2121 строка кода)