Как навести порядок в расходах на LLM с помощью CPA Usage Keeper
Когда гоняешь запросы в разные нейросети через шлюзы вроде CLIProxyAPI, рано или поздно наступает момент хаоса. В логах пролетают тысячи вызовов Claude, OpenAI или Gemini, а в конце месяца прилетает счет, происхождение которого трудно объяснить. Кто именно сжег квоту? Какой скрипт спамил запросами ночью? Где подскочила задержка ответов?
Автор проекта CPA Usage Keeper решил эту головную боль и выкатил отдельную панель мониторинга со встроенным хранилищем на SQLite.

Что под капотом
Штука работает в связке с прокси-сервером CLIProxyAPI (CPA). Сам CPA умеет маршрутизировать запросы к языковым моделям, но глубокой аналитики «из коробки» там немного. Keeper подключается к нему, забирает сырые события через Redis-очередь или HTTP, укладывает их в локальную базу SQLite и рисует аккуратный дашборд на React.
Бэкенд написан на Go. Стек получился легковесным: бинарник запускается моментально, оперативной памяти ест минимум, никаких тяжелых баз данных разворачивать не нужно.

Главные фичи
Дашборд собирает всю статистику по токенам и деньгам в реальном времени:
- Считает потраченные токены, кэш, общую стоимость и метрики RPM/TPM. Можно фильтровать данные по конкретным моделям, источникам запросов или API-ключам.
- Строит тепловые карты активности по часам. Сразу видно, когда нагрузка подскакивает и какие провайдеры начинают тупить с задержкой (TTFT).
- Следит за состоянием файлов авторизации и подключенных провайдеров, умеет автоматически обновлять остаток квот в фоне.
- Дает детальную таблицу всех запросов с возможностью выгрузки.
- Поддерживает режим read-only для отдельных пользователей по их личному API-ключу, чтобы они видели только свой расход.


Как развернуть
Самый быстрый способ поднять связку — взять готовый Docker Compose.
services:
cli-proxy-api:
image: eceasy/cli-proxy-api:latest
container_name: cli-proxy-api
restart: unless-stopped
ports:
- "8317:8317"
volumes:
- ./cpa/config.yaml:/CLIProxyAPI/config.yaml
- ./cpa/auths:/root/.cli-proxy-api
networks:
- cpa-network
cpa-usage-keeper:
image: ghcr.io/willxup/cpa-usage-keeper:latest
container_name: cpa-usage-keeper
restart: unless-stopped
depends_on:
- cli-proxy-api
ports:
- "8080:8080"
environment:
TZ: Europe/Moscow
CPA_BASE_URL: http://cli-proxy-api:8317
CPA_MANAGEMENT_KEY: your-management-key
AUTH_ENABLED: "true"
LOGIN_PASSWORD: strong-password-here
volumes:
- ./keeper:/data
networks:
- cpa-network
networks:
cpa-network:
driver: bridge
Запускается стандартно:
docker compose up -d
Если CPA уже работает на хосте или отдельном сервере, Keeper можно запустить отдельно, прописав переменные окружения CPA_BASE_URL и CPA_MANAGEMENT_KEY. Для пользователей macOS есть установка через Homebrew:
brew tap Willxup/cpa-usage-keeper
brew install cpa-usage-keeper
brew services start cpa-usage-keeper
Эксплуатация и обслуживание
Приятная деталь: автор сразу подумал про долгосрочную работу. В приложении встроен автоматический перенос старых событий. Каждую ночь в 04:30 записи старше 90 дней уходят в архивную таблицу usage_events_archive. За счет этого рабочая база не раздувается, а дашборд продолжает быстро открываться даже спустя месяцы активных тестов.
В комплекте идут автобэкапы SQLite раз в сутки и ротация логов. Для продакшена лучше спрятать Keeper за Nginx или Caddy, включив авторизацию паролем прямо в конфиге.

Кому пригодится
Если вы держите собственный AI-шлюз для команды, пет-проектов или микросервисов, Keeper избавит от ручного разбора JSON-логов. Он закрывает простую задачу: наглядно показывает, куда уходят деньги за токены и насколько стабильно отвечают сторонние нейросети. Поднять его занимает пять минут, а польза видна сразу на первом графике.
