Отчёт аналитики никуда не делся — но отдельного экрана «Аналитика» в Мультиагенте больше нет. Его содержимое переехало туда, где им пользуются каждый день: на экраны «Токены», «Стоимость», «Скорость» и «Чаты» в разделе «Менеджмент» (подробнее — на странице Токены, стоимость и скорость). Сам отчёт остался общим источником данных: из него берут числа значок в шапке, таблицы чатов и все машинные адреса, о которых эта страница.
Считается всё по локальной копии списка чатов: Мультиагент сам обновляет её — примерно раз в минуту, плюс сразу после изменений на агентах, — а каждый час сверяет копию с агентами целиком, чтобы цифры не расходились с реальностью даже после пересчёта истории на агенте. Свежие изменения тут же попадают на открытые экраны, без перезагрузки страницы. Открытие любого экрана не отправляет запросов живым агентам: всё уже посчитано по копии.
Метрики для Prometheus
Те же цифры, что на экранах, отдаются по адресу /metrics в формате, который понимает Prometheus и совместимые с ним системы. Ответ собирается из той же копии данных, что читают экраны, поэтому расхождений между панелью и внешними рядами нет; историю копит сам сборщик — Мультиагент ничего не считает постоянно.
- графики — стоимость, токены по видам, модели, сообщения, промпты, коммиты, часы суток и дни недели, распределения и итоги за всё время;
- живое состояние — работает ли агент, сколько чатов идёт, сколько агентов на каждом сервере и во флоте;
- подписи у каждого ряда — агент, его номер, сервер (фабрика) и флот; у флотов — отдельные ряды-сводки по тем же цифрам.
Адрес молчит, пока не заданы обе переменные окружения — MULTIAGENT_METRICS_USERNAME и MULTIAGENT_METRICS_PASSWORD: без них ответ — «не найдено», с неверной парой — отказ со стандартным запросом пароля. Пароль можно задать и отпечатком (SHA-256), а не открытым текстом. Переменные читаются на каждом запросе, так что включить или выключить сбор можно без перезапуска, и вход в панель для сбора не нужен — это отдельная пара.
Две настройки меняют форму данных: MULTIAGENT_METRICS_GRANULARITY — шаг точки (по умолчанию daily, ещё hourly, weekly, monthly) и MULTIAGENT_METRICS_LOOKBACK_DAYS — глубина истории в днях (по умолчанию 30). Границы суток считаются по часовому поясу системы, поэтому цифры совпадают с экранами.
Сбор дешёвый: готовый ответ живёт в памяти 15 секунд, и сколько бы раз ни спрашивали, база за это время читается один раз. Порядок рядов стабилен, нечисловые значения не выводятся вовсе: два сбора подряд без изменения данных дают одинаковый ответ.
scrape_configs:
- job_name: multiagent
scrape_interval: 60s
basic_auth:
username: prometheus
password: <пароль из переменной>
static_configs:
- targets: ["multiagent:8080"]
metrics_path: /metrics
Настраивать вручную ничего не нужно, если поставить на фабрику службу Prometheus из библиотеки инструментов: она сама получает адрес и учётные данные приложения этой фабрики и собирает его метрики — подробнее на странице Инструменты.
GraphQL: тот же отчёт для своих приложений
Второй машинный адрес — /graphql. Он отдаёт тот же отчёт аналитики, что и экраны, но в виде структурированных данных: сводка, разбивка расходов, счётчики работы, все графики по времени, разрезы по модели, агенту и фабрике, профили по часам и дням недели, распределения и строки недавних чатов. Ответы считаются тем же кодом, что и на экранах, поэтому цифры совпадают по определению.
- только чтение: в схеме нет ни одной операции, которая что-то меняет;
- самоописание: схему можно получить запросом или файлом
/graphql/schema— внешняя программа соберёт запрос сама; - условия отчёта: один агент, метки, флот, период и шаг времени; по умолчанию удалённые на агенте чаты не попадают в ответ;
- не только отчёт: отдельными полями доступны флоты, фабрики и агенты со своей аналитикой, а также сводка для значка в шапке;
- большие числа не теряются: токены и другие крупные счётчики передаются без потери точности.
Доступ тоже отдельный: пока не заданы MULTIAGENT_GRAPHQL_USERNAME и MULTIAGENT_GRAPHQL_PASSWORD, адрес отвечает «не найдено»; без верной пары — отказ со стандартным запросом пароля. Пароль принимается и отпечатком SHA-256, и открытым текстом, а меняется без перезапуска.
curl -u portal:<пароль> -X POST https://multiagent.example.com/graphql \
-H 'Content-Type: application/json' \
-d '{"query":"{ analytics(filter:{granularity: DAILY}) { overview { totalCost totalOutputTokens } } }"}'
Архив в ClickHouse
Опционально Мультиагент ведёт долговременный архив аналитики в ClickHouse — на случай, когда нужна история глубже года. Для этого задайте переменную окружения MULTIAGENT_CLICKHOUSE_URL — база и таблица chat_analytics создадутся автоматически. После этого раз в минуту статистика копии чатов (снимки, обновлённые с прошлой загрузки) дописывается в архив, так что историю можно анализировать внешними инструментами.
Кнопка «Дозагрузить статистику в ClickHouse» появляется, только когда архив настроен, и загружает всё, чего в нём не хватает (например, после долгого простоя).
ClickHouse — необязательное дополнение к базе, а не её замена: экраны по-прежнему считают по локальным таблицам, поэтому недоступность архива некритична и ничего не ломает.
Балансы и квоты LLM-аккаунтов анализируются отдельно — см. Аккаунты.