Skip to content

Proxy Monitor: Журналы запросов, фильтрация, восстановление деталей и экспорт

Вы уже запустили локальный обратный прокси, но как только возникают 401/429/500, прерывания потока или «вдруг изменилась учётная запись/модель», устранение неполадок легко превращается в слепые догадки.

В этом уроке будет рассказано только об одном: использовать Proxy Monitor чтобы превратить каждый вызов в «воспроизводимые доказательства», чтобы вы знали, откуда пришёл запрос, на какую конечную точку он попал, какой учётной записью и моделью использовался, а также примерно сколько было потрачено токенов.

Что вы сможете сделать после изучения

  • Открыть/приостановить запись на странице /monitor, и понять, повлияет ли это на Token Stats
  • Использовать окно поиска, быструю фильтрацию, фильтрацию учётных записей, чтобы быстро найти одну запись запроса
  • В модальном окне деталей просмотреть и скопировать Request/Response payload, чтобы проанализировать причину сбоя
  • Знать место сохранения данных Proxy Monitor (proxy_logs.db) и поведение очистки
  • Понять реальные границы возможностей «экспорт журналов» текущей версии (GUI vs команды бэкенда)

Ваша текущая проблема

  • Вы видите только «вызов неуспешен/тайм-аут», но не знаете, сбой произошёл на вышестоящем уровне, в прокси или в конфигурации клиента
  • Вы подозреваете, что сработала маршрутизация моделей или ротация учётных записей, но нет цепочки доказательств
  • Вы хотите воспроизвести полный payload запроса (особенно потоковый/Thinking), но в журналах его не видно

Когда использовать этот подход

  • Вы устраняете: сбой аутентификации 401, ограничение частоты 429, ошибка вышестоящего провайдера 5xx, прерывание потока
  • Вы хотите подтвердить: какой учётной записью была использована конкретная запись запроса (X-Account-Email)
  • Вы настраиваете стратегию маршрутизации моделей, хотите подтвердить «имя модели клиента → сопоставленная физическая модель»

🎒 Подготовка перед началом

Предварительные требования

Proxy Monitor записывает «запросы, полученные службой обратного прокси». Поэтому сначала пройдите:

  • Служба обратного прокси запущена и может достигать /healthz
  • Вы знаете текущий Base URL и порт обратного прокси

Если ещё не пройдено, сначала посмотрите Запуск локального обратного прокси и подключение первого клиента.

Что такое Proxy Monitor?

Proxy Monitor — это встроенная «панель журналов запросов» Antigravity Tools. Каждый раз, когда запрос попадает в локальный обратный прокси, он записывает время, путь, код состояния, затраченное время, модель и протокол, и по возможности извлекает потребление токенов из ответа; вы также можете открыть отдельную запись для просмотра payload запроса и ответа, чтобы проанализировать причину сбоя и результат выбора маршрутизации/учётной записи.

Место сохранения данных

Журналы Proxy Monitor записываются в SQLite в каталоге данных: proxy_logs.db. Как найти каталог данных и выполнить резервное копирование, рекомендуется сначала пересмотреть Первый запуск: Каталог данных, журналы, трей и автозапуск.

Основная идея: 6 полей, за которыми нужно следить

В одной записи Proxy Monitor (структура ProxyRequestLog на стороне бэкенда) самые полезные — это следующие поля:

ПолеНа какой вопрос оно отвечает
statusУспешен или неуспешен этот запрос (200-399 против остальных)
url / methodНа какую конечную точку вы действительно попали (например, /v1/messages, /v1/chat/completions)
protocolЭто протокол OpenAI / Claude(Anthropic) / Gemini
account_emailКакой учётной записью в конечном итоге использовался этот запрос (из заголовка ответа X-Account-Email)
model / mapped_modelБыло ли имя модели, запрошенное клиентом, «маршрутизировано/сопоставлено» с другой моделью
input_tokens / output_tokensПотребление токенов этого запроса (можно извлечь, только если есть)

Сначала используйте «сводку», при необходимости откройте «детали»

На странице списка отображается только сводка (без request/response body), открывать одну запись, чтобы загрузить полные детали с бэкенда, чтобы избежать однократного получения слишком больших полей списком.

Следуйте за мной: выполните один вызов, чтобы пройти «замкнутый цикл мониторинга»

Шаг 1: Сначала создайте запрос, который «вы точно знаете, что появится»

Почему Proxy Monitor записывает только запросы, полученные службой обратного прокси. Сначала самым простым запросом подтвердите, есть ли запись, затем можно говорить о фильтрации и деталях.

bash
## 1) Проверка работоспособности (конечно существующая конечная точка)
curl "http://127.0.0.1:PORT/healthz"

## 2) Ещё раз запросите models (если вы включили аутентификацию, не забудьте добавить заголовок)
curl "http://127.0.0.1:PORT/v1/models"
powershell
## 1) Проверка работоспособности (конечно существующая конечная точка)
curl "http://127.0.0.1:PORT/healthz"

## 2) Ещё раз запросите models (если вы включили аутентификацию, не забудьте добавить заголовок)
curl "http://127.0.0.1:PORT/v1/models"

Вы должны увидеть: терминал возвращает {"status":"ok"} (или похожий JSON), а также ответ /v1/models (успех или 401, всё равно).

Шаг 2: Откройте страницу Monitor и подтвердите «статус записи»

Почему У Proxy Monitor есть переключатель «запись/пауза». Вам нужно сначала подтвердить текущий статус, иначе вы можете постоянно отправлять запросы, но список всегда пустой.

В Antigravity Tools откройте в боковой панели API мониторинг (маршрут /monitor).

В верхней части страницы будет кнопка с точкой:

┌───────────────────────────────────────────┐
│  ● Запись   [Поиск]  [Обновить] [Очистить]      │
└───────────────────────────────────────────┘

Если вы видите «На паузе», нажмите один раз, чтобы переключиться на «Запись».

Вы должны увидеть: статус кнопки становится «Запись»; в списке начинают появляться только что сделанные записи запросов.

Шаг 3: Используйте «поиск + быстрая фильтрация», чтобы найти одну запись

Почему При реальном устранении неполадок вы обычно помните только фрагмент: в пути есть messages, или код состояния 401, или в имени модели есть gemini. Окно поиска как раз предназначено для такой памяти.

Поиск Proxy Monitor будет использовать ваш ввод как «ключевое слово нечёткого поиска», и на стороне бэкенда с помощью SQL LIKE сопоставлять эти поля:

  • url
  • method
  • model
  • status
  • account_email

Вы можете попробовать несколько типичных ключевых слов:

  • healthz
  • models
  • 401 (если вы как раз создали 401)

Также можно нажать кнопку «Быстрая фильтрация»: Только ошибки / Chat / Gemini / Claude / Генерация изображений.

Вы должны увидеть: в списке остаются только ожидаемые вами запросы.

Шаг 4: Откройте детали, чтобы восстановить «payload запроса + payload ответа»

Почему Списка достаточно, чтобы ответить на «что произошло». Чтобы ответить на «почему», обычно нужно увидеть полный payload запроса/ответа.

Откройте любую запись, появится модальное окно деталей. Вы можете сосредоточиться на проверке:

  • Протокол (OpenAI/Claude/Gemini)
  • Используемая модель и Сопоставленная модель
  • Используемая учётная запись
  • Потребление токенов (ввод/вывод)

Затем используйте кнопку для копирования:

  • Payload запроса (Request)
  • Payload ответа (Response)

Вы должны увидеть: в деталях есть два блока JSON (или текст) для предпросмотра; после копирования вы можете вставить в рабочий билет/заметку для анализа.

Шаг 5: Когда вам нужно «воспроизвести с чистого листа», очистите журналы

Почему При устранении неполадок страшнее всего «старые данные мешают суждению». После очистки воспроизведите один раз, успех/неуспех будет очень ясным.

Нажмите кнопку «Очистить» в верхней части, появится диалоговое окно подтверждения.

Это необратимая операция

Очистка удалит все записи в proxy_logs.db.

Вы должны увидеть: после подтверждения список очищается, статистика возвращается к 0.

Контрольная точка ✅

  • [ ] Вы можете видеть в /monitor только что сделанные вами записи /healthz или /v1/models
  • [ ] Вы можете отфильтровать определённую запись с помощью окна поиска (например, ввести healthz)
  • [ ] Вы можете открыть одну запись, чтобы просмотреть payload запроса/ответа, и скопировать его
  • [ ] Вы знаете, что очистка журналов напрямую удалит все исторические записи

Напоминания о возможных ошибках

СценарийКак вы можете понять (❌)Фактическое поведение (✓)
"На паузе" = полностью отсутствуют накладные расходы мониторингаСчитаете, что после паузы запросы не будут анализироватьсяПауза влияет только на «записывать ли в журнал Proxy Monitor». Однако анализ запроса/ответа (включая анализ поточных данных SSE) всё ещё происходит, просто проанализированные данные не сохраняются. Token Stats всё ещё будет записывать (независимо от того, включён ли мониторинг).
Журналы двоичных/больших пакетов пустыСчитаете, что мониторинг сломанДвоичные запросы/ответы будут отображаться как [Binary Request Data] / [Binary Response Data]. Тело ответа свыше 100MB будет помечено как [Response too large (>100MB)]; тело запроса свыше ограничения не записывается.
Хотите использовать Monitor, чтобы найти «кто инициировал запрос»Считаете, что можно追溯到 имя процесса клиентаMonitor записывает информацию на уровне HTTP (метод/путь/модель/учётная запись), не включает «имя процесса вызывающей стороны». Вам нужно объединить это с собственными журналами клиента или с сетевым перехватом системы, чтобы определить источник.
Данные Token Stats аномальны при включённом мониторингеСчитаете, что статистика невернаПри включённом мониторинге данные Token Stats могут быть записаны дважды (один раз в начале функции мониторинга, один раз при асинхронной записи в базу данных). Это поведение исходного кода текущей версии.

Экспорт и долгосрочное сохранение: сначала чётко определите границы возможностей

1) Что можно сделать в текущем GUI

В текущем UI Monitor (ProxyMonitor.tsx) вы можете:

  • Искать/фильтровать/просматривать страницы
  • Открывать детали для просмотра и копирования payload
  • Очистить все журналы

Но не найдено кнопки «экспорт» (в исходном коде не видно соответствующего UI).

2) Какие возможности экспорта уже есть на стороне бэкенда (подходит для вторичной разработки)

Команды Tauri на стороне бэкенда предоставляют два способа экспорта:

  • export_proxy_logs(file_path): экспортировать все журналы из базы данных в файл JSON
  • export_proxy_logs_json(file_path, json_data): красиво записать переданный вами массив JSON в файл (требуется, чтобы ввод был форматом массива)

Если вы хотите выполнить вторичную разработку GUI или написать собственный скрипт вызова, можно напрямую использовать эти команды.

3) Самый простой «экспорт»: напрямую создать резервную копию proxy_logs.db

Так как Proxy Monitor по сути является SQLite, вы также можете рассматривать proxy_logs.db как «пакет доказательств устранения неполадок» и создавать резервные копии вместе (например, вместе с token_stats.db). Расположение каталога данных см. Первый запуск.

Рекомендуемая литература

Краткое содержание урока

  • Ценность Proxy Monitor — «воспроизводимость»: запись кода состояния/пути/протокола/учётной записи/маршрутизации моделей/потребления токенов и предоставление деталей запросов
  • Поиск и быстрая фильтрация — это вход в устранение неполадок: сначала сузьте диапазон, затем откройте детали для просмотра payload
  • Очистка журналов — необратимая операция; экспорт в данный момент больше склонен к «возможностям вторичной разработки» и «резервному копированию файла базы данных»

Предварительный просмотр следующего урока

Следующий урок мы изучим Token Stats: Статистические показатели с точки зрения затрат и интерпретация графиков, превращая «чувство, что это дорого» в количественную оптимизацию.


Приложение: Ссылка на исходный код

Нажмите, чтобы развернуть и просмотреть местоположение исходного кода

Дата обновления: 2026-01-23

ФункцияПуть к файлуНомер строки
Вход на страницу Monitor (монтирование ProxyMonitor)src/pages/Monitor.tsx1-12
UI Monitor: таблица/фильтрация/модальное окно деталейsrc/components/proxy/ProxyMonitor.tsx13-713
UI: чтение конфигурации и синхронизация enable_loggingsrc/components/proxy/ProxyMonitor.tsx174-243
UI: переключение записи (запись в config + set_proxy_monitor_enabled)src/components/proxy/ProxyMonitor.tsx254-267
UI: прослушивание событий в реальном времени (proxy://request) и дедупликацияsrc/components/proxy/ProxyMonitor.tsx273-355
UI: очистка журналов (clear_proxy_logs)src/components/proxy/ProxyMonitor.tsx389-403
UI: загрузка одной детали (get_proxy_log_detail)src/components/proxy/ProxyMonitor.tsx505-519
Промежуточное ПО мониторинга: захват запроса/ответа, анализ токенов, запись в monitorsrc-tauri/src/proxy/middleware/monitor.rs13-337
ProxyMonitor: переключатель enabled, запись в БД, отправка событийsrc-tauri/src/proxy/monitor.rs33-194
Серверная сторона: монтирование промежуточного ПО мониторинга (layer)src-tauri/src/proxy/server.rs183-194
Команды Tauri: get/count/filter/detail/clear/exportsrc-tauri/src/commands/proxy.rs180-314
SQLite: путь к proxy_logs.db, структура таблицы и SQL фильтрацииsrc-tauri/src/modules/proxy_db.rs1-416
Описание дизайна мониторинга (может отличаться от реализации, см. исходный код)docs/proxy-monitor-technical.md1-53

Ключевые константы:

  • MAX_REQUEST_LOG_SIZE = 100 * 1024 * 1024: максимальный размер тела запроса, который может прочитать промежуточное ПО мониторинга (превышение приведёт к сбою чтения)
  • MAX_RESPONSE_LOG_SIZE = 100 * 1024 * 1024: максимальный размер тела ответа, который может прочитать промежуточное ПО мониторинга (используется для больших ответов, таких как изображения)

Ключевые функции/команды:

  • monitor_middleware(...): на уровне HTTP собирает запрос и ответ, и вызывает monitor.log_request(...)
  • ProxyMonitor::log_request(...): запись в память + SQLite, и отправка сводки через событие proxy://request
  • get_proxy_logs_count_filtered(filter, errors_only) / get_proxy_logs_filtered(...): фильтрация и разбиение на страницы в списке
  • get_proxy_log_detail(log_id): загрузка полного тела запроса/ответа одной записи журнала
  • export_proxy_logs(file_path): экспорт всех журналов в файл JSON (в текущем UI кнопка не открыта)