Зачем нужен мониторинг AI?
AI-агенты в продакшне требуют мониторинга: сколько токенов тратится, как долго отвечает модель, какие запросы вызывают ошибки, насколько корректны ответы. Без мониторинга вы не знаете о проблемах до жалоб пользователей.
Langfuse — open-source AI observability
>docker run -d --name langfuse \
-p 3000:3000 \
-e DATABASE_URL=postgresql://postgres:password@host:5432/langfuse \
-e NEXTAUTH_SECRET=random-secret \
--restart always \
langfuse/langfuse:latestИнтеграция с LangChain
from langfuse.callback import CallbackHandler
from langchain_ollama import OllamaLLM
handler = CallbackHandler(
public_key="pk-...",
secret_key="sk-...",
host="http://localhost:3000"
)
llm = OllamaLLM(model="llama3.2", callbacks=[handler])
result = llm.invoke("Тестовый запрос")Ключевые метрики для AI-агентов
| Метрика | Что измеряет | Цель |
|---|---|---|
| Latency | Время ответа | < 5 сек |
| Token usage | Расход токенов | Оптимизация стоимости |
| Error rate | Процент ошибок | < 1% |
| User feedback | Оценка ответов | Улучшение качества |
Системные метрики через Prometheus
# prometheus.yml
scrape_configs:
- job_name: "ollama"
static_configs:
- targets: ["localhost:11434"]
metrics_path: "/metrics"Частые ошибки при настройке
Langfuse не стартует из-за базы данных
Error: P1001: Can't reach database server at `host`:5432Langfuse требует отдельно поднятую PostgreSQL и не поднимает её сама внутри образа. Проверьте, что переменная DATABASE_URL указывает на реально доступный хост и порт, а сама база создана заранее — контейнер только применяет миграции, но не создаёт сервер СУБД.
Трейсы из LangChain не появляются в интерфейсе
Частая причина — callback-обработчик Langfuse не передан в вызов модели, а только создан в коде. Убедитесь, что объект handler явно указан в параметре callbacks при каждом вызове цепочки, а не только при инициализации LLM.
Дашборд Prometheus показывает пустые графики по Ollama
up{job="ollama"} == 0Метрика up равна нулю, когда Prometheus не может достучаться до эндпоинта скрейпинга. Проверьте, что порт Ollama доступен с машины, где крутится Prometheus, и что путь /metrics действительно отдаёт данные, а не 404 — часть версий Ollama требует отдельного включения экспорта метрик.
Langfuse формирует неверные ссылки за reverse proxy
Warning: NEXTAUTH_URL is not set, using fallbackБез явно заданного NEXTAUTH_URL, указывающего на реальный публичный адрес за Nginx, сервис может генерировать redirect-ссылки на внутренний адрес контейнера. Задайте эту переменную окружения равной внешнему HTTPS-домену перед первым запуском. Проверить это проще всего, попробовав открыть страницу входа через публичный адрес и убедившись, что после логина браузер не перекидывает на внутренний порт контейнера.
Варианты AI observability
Выбор инструмента зависит от того, что именно нужно наблюдать: содержимое LLM-вызовов, системные метрики сервера или и то, и другое сразу.
| Инструмент | Фокус | Self-hosted |
|---|---|---|
| Langfuse | Трейсинг LLM-вызовов и промптов | Да |
| Prometheus + Grafana | Системные и кастомные метрики | Да |
| Облачные SaaS-платформы observability | Трейсинг и аналитика без своей инфраструктуры | Нет |
| Простое логирование в файл | Базовая отладка на старте проекта | Да |
Когда такой мониторинг избыточен
Полноценный observability-стек оправдан не на любом этапе проекта — иногда он добавляет инфраструктуру без пользы.
- Прототип с единичными ручными запросами — трейсинг каждого вызова не даёт полезных данных при таком объёме
- Команда из одного разработчика без внешних пользователей — хватит обычного логирования в файл
- Бюджет VDS не позволяет держать ещё один сервис с собственной базой данных — Langfuse требует отдельную PostgreSQL и заметный объём RAM
- Нужна только проверка аптайма сервиса, а не разбор содержимого ответов — для этого достаточно простого healthcheck
- Все LLM-вызовы уже логируются в существующую систему логирования приложения — дублировать её вторым сервисом не всегда оправдано
Проверка результата
После настройки стоит убедиться, что данные действительно доходят от вызова модели до дашборда.
- Откройте интерфейс Langfuse и убедитесь, что тестовый вызов модели появился в списке трейсов
- Проверьте, что в трейсе видны промпт, ответ и время выполнения
- Откройте
/metricsу Ollama напрямую и убедитесь, что эндпоинт отдаёт данные - Проверьте в Prometheus, что таргет
ollamaнаходится в статусеUP - Откройте Langfuse через публичный домен и убедитесь, что редиректы не ведут на внутренний адрес контейнера
curl http://localhost:11434/metrics | headПо теме: агенты, которые стоит мониторить — что такое AI-агент, фреймворк с готовыми callback'ами — LangChain на VDS.