Навіщо потрібен моніторинг 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.