Настройка сбора данных
Оглавление
- Общее описание
- Последовательность настройки
- Соответствие конфигов и индексов
- Проверка сквозного потока
Общее описание
Конфигурации сбора данных модуля AI Observability предназначены для развертывания и настройки инфраструктуры сбора AI-телеметрии.
Структура конфигураций сбора
ai_observability/
├── sm_data_collector_pipelines/ # (input + filter + output)
│ ├── gpu_metrics.conf # GPU-метрики → gen_ai_gpu_metrics
│ ├── vllm_metrics.conf # vLLM-метрики → gen_ai_metrics
│ ├── claude_code.conf # События локального Claude Code → gen_ai_events
│ ├── codex.conf # События локального Codex → gen_ai_events, gen_ai_cost
│ └── litellm_spendlogs.conf # LiteLLM cost/usage → gen_ai_cost, gen_ai_events
├── sample/ # Примеры входных и нормализованных данных
├── SmartBeatManager/
│ └── apps/
│ ├── scriptbeat_gpu_metrics # Scriptbeat: скрейп /metrics DCGM Exporter
│ ├── scriptbeat_vllm_metrics # Scriptbeat: скрейп /metrics vLLM
│ ├── filebeat_claude_code # Filebeat: чтение логов Claude Code / Claude Desktop
│ └── filebeat_codex # Filebeat: чтение сессий Codex
├── otlp_collector/ # OpenTelemetry Collector + Data Prepper (docker-compose)
│ ├── docker-compose.yml
│ ├── otel-collector/config.yaml
│ ├── data-prepper/pipelines.yaml
│ └── .env.example
└── llm_gateway/
└── litellm/ # Оверлей-конфиги для включения OTLP-экспорта LiteLLM
Последовательность настройки
Шаг 1. Настройка Smart Monitor Data Collector
Smart Monitor Data Collector основан на Logstash, в дальнейшем в тексте может использоваться как альтернативное имя.
Smart Monitor Data Collector принимает данные от Smart Beat и из PostgreSQL LiteLLM.
1.1. Размещение pipeline-конфигов
Содержимое sm_data_collector_pipelines/ разместите в /app/logstash/config/conf.d.
1.2. Ключи keystore
В logstash.keystore должны присутствовать ключи:
| Ключ | Назначение |
|---|---|
ES_PWD | Пароль пользователя logstash для Smart Monitor |
PG_PWD | Пароль пользователя PostgreSQL LiteLLM (litellm_spendlogs.conf) |
JDBC_DRIVER_LIBRARY | Путь к PostgreSQL JDBC-драйверу (litellm_spendlogs.conf) |
sudo -u logstash /app/logstash/bin/logstash-keystore add ES_PWD
sudo -u logstash /app/logstash/bin/logstash-keystore add PG_PWD
sudo -u logstash /app/logstash/bin/logstash-keystore add JDBC_DRIVER_LIBRARY
1.3. Подключение пайплайнов в pipelines.yml
Добавьте в /app/logstash/config/pipelines.yml:
### AI Observability
- pipeline.id: gpu_metrics
path.config: "/app/logstash/config/conf.d/gpu_metrics.conf"
- pipeline.id: vllm_metrics
path.config: "/app/logstash/config/conf.d/vllm_metrics.conf"
- pipeline.id: claude_code
path.config: "/app/logstash/config/conf.d/claude_code.conf"
pipeline.workers: 1
- pipeline.id: codex
path.config: "/app/logstash/config/conf.d/codex.conf"
pipeline.workers: 1
- pipeline.id: litellm_spendlogs
path.config: "/app/logstash/config/conf.d/litellm_spendlogs.conf"
1.4. Замена плейсхолдеров в конфигах
В размещенных *.conf замените:
HOST:PORTв блокеoutput.opensearch— адрес и порт Smart MonitorPORTв блокеinput.beats— порт приема данных от Smart BeatPG_HOST,PG_PORT,PG_DBвlitellm_spendlogs.conf— параметры подключения к PostgreSQL LiteLLM
Стоимость вызовов Codex рассчитывается в codex.conf по таблице цен (USD за 1M токенов) — проверьте и при необходимости скорректируйте под используемые модели.
1.5. Перезапуск Logstash
systemctl restart logstash
Шаг 2. Настройка Smart Beat Manager
Smart Beat Manager управляет агентами сбора на GPU-хостах и других рабочих станциях.
2.1. Размещение приложений
Каталоги из SmartBeatManager/apps/ разместите в /app/smartBeatManager/apps, а бинарные дистрибутивы Beat — в /app/smartBeatManager/binaries:
/app/smartBeatManager/binaries/scriptbeat-oss-<версия>-linux-x86_64.tar.gz
/app/smartBeatManager/binaries/filebeat-oss-<версия>-linux-x86_64.tar.gz
2.2. Параметры приложений
Во всех конфигурациях Beat замените HOST:PORT на адрес и порт Logstash.
Файлы локальных клиентов (filebeat_claude_code, filebeat_codex):
Замените <HOME> на домашний каталог пользователя в зависимости от ОС:
| ОС | Путь |
|---|---|
| macOS | /Users/<user> |
| Linux | /home/<user> |
| Windows | C:\Users\<user> |
| Приложение | Источник данных | Что собирается |
|---|---|---|
filebeat_claude_code | <HOME>/.claude/projects/**/*.jsonl | Сессии Claude Code: запросы, ответы, токены |
filebeat_claude_code | <HOME>/Library/Logs/Claude/main.log и *.log | События Claude Desktop (macOS) |
filebeat_codex | <HOME>/.codex/sessions/**/*.jsonl | Сессии Codex (раскладка YYYY/MM/DD/rollout-*.jsonl) |
Логи Claude Desktop (Library/Logs/Claude/*.log) актуальны для macOS. На других ОС, если Claude Desktop не используется, этот вход можно отключить — сбор сессий Claude Code (.claude/projects) от этого не зависит.
GPU-хосты (scriptbeat_gpu_metrics):
GPU-метрики собираются с DCGM Exporter. Скрипт collect_gpu_metrics.py скрейпит его HTTP-эндпойнт /metrics (Prometheus). DCGM Exporter устанавливается на GPU-хост как нативный сервис через systemd.
Настроить через переменные окружения скрипта:
| Переменная | Назначение | По умолчанию |
|---|---|---|
DCGM_EXPORTER_URL | Основной адрес /metrics | http://127.0.0.1:9400/metrics |
DCGM_EXPORTER_FALLBACK_URL | Резервный адрес | http://127.0.0.1:9401/metrics |
DCGM_KEEP_METRICS | Список метрик DCGM_FI_DEV_* (пустое = все) | Эталонный набор включая XID_ERRORS, TOTAL_ENERGY_CONSUMPTION |
2.3. Подключение групп в serverclasses.yml
Добавьте в /app/smartBeatManager/etc/serverclasses.yml (замените GPU_HOSTS и WORKSTATION_HOSTS на реальные адреса или маски хостов):
- name: ai_gpu_metrics
apps:
- scriptbeat_gpu_metrics
- scriptbeat_vllm_metrics
binaries:
- scriptbeat-oss-<версия>-linux-x86_64.tar.gz
filters:
- GPU_HOSTS
- name: ai_local_clients
apps:
- filebeat_claude_code
- filebeat_codex
binaries:
- filebeat-oss-<версия>-linux-x86_64.tar.gz
filters:
- WORKSTATION_HOSTS
2.4. Перезапуск Smart Beat Manager
systemctl restart smartBeatManager
Шаг 3. Настройка OTLP-домена
OTLP-домен принимает телеметрию от AI-агентов и LLM-gateway, которые умеют экспортировать OpenTelemetry.
Поток данных:
AI-агенты / LLM-gateway
│ OTLP (gRPC/HTTP)
▼
OpenTelemetry Collector
│ OTLP gRPC
▼
Data Prepper
│ OpenSearch bulk ingest
▼
gen_ai_traces / gen_ai_events / gen_ai_metrics
3.1. Запуск приемника
Заполните otlp_collector/.env по образцу .env.example (порты, адрес и пароль Smart Monitor) и запустите:
docker compose -f otlp_collector/docker-compose.yml up -d
3.2. Проверка
docker compose -f otlp_collector/docker-compose.yml ps
Оба контейнера (otel-collector, data-prepper) должны быть в статусе running.
Шаг 4. Подключение LLM-gateway
llm_gateway/ — это оверлей-конфиги, которые включают экспорт телеметрии в OTLP-домен на уже работающем у вас шлюзе. Сам шлюз пакет не устанавливает.
На примере LiteLLM (llm_gateway/litellm/):
-
Перенесите содержимое
host-config.yamlв конфиг LiteLLM (ключевые поля —success_callback/failure_callback: ["otel"]и цены*_cost_per_token) -
Задайте переменные окружения по образцу
.env.example— главное:OTEL_EXPORTER_OTLP_ENDPOINTуказывает на HTTP-приемникotlp_collector(по умолчанию порт:4318) -
Способ доставки переменных зависит от способа запуска LiteLLM:
- docker-compose — подключите
otel.override.ymlкак override-файл:docker compose -f docker-compose.yml -f llm_gateway/litellm/otel.override.yml up -d - systemd / иной запуск — пропишите переменные в окружении сервиса;
otel.override.ymlв этом случае не нужен
- docker-compose — подключите
Шлюз и inference приведены на примере LiteLLM и vLLM. Если у вас другой gateway или inference, llm_gateway/, vllm_metrics и litellm_spendlogs служат образцом: модель данных gen_ai.* остается неизменной, адаптируется только способ включения экспорта и извлечения метрик/стоимости под конкретный инструмент.
Соответствие конфигов и индексов
| Конфигурационный файл / компонент | Целевой индекс |
|---|---|
gpu_metrics.conf | gen_ai_gpu_metrics |
vllm_metrics.conf | gen_ai_metrics |
claude_code.conf | gen_ai_events |
codex.conf | gen_ai_events, gen_ai_cost |
litellm_spendlogs.conf | gen_ai_cost, gen_ai_events |
otlp_collector (OTel Collector + Data Prepper) | gen_ai_traces, gen_ai_events, gen_ai_metrics |
Проверка сквозного потока
После развертывания всех компонентов:
- Убедитесь, что в
Smart Monitorпоявляются новые документы вgen_ai_gpu_metrics*иgen_ai_metrics* - Проверьте появление событий в
gen_ai_events*от локальных AI-клиентов (Claude Code, Codex) и AI-агентов - Отправьте запрос через LiteLLM API — проверьте появление трассировок в
gen_ai_traces* - Проверьте наличие cost-данных в
gen_ai_cost* - Откройте дашборды модуля и убедитесь, что данные отображаются корректно