Перейти к основному содержимому
Версия: 6.1

Настройка сбора данных

Оглавление


Общее описание

Конфигурации сбора данных модуля 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 Monitor
  • PORT в блоке input.beats — порт приема данных от Smart Beat
  • PG_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>
WindowsC:\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Основной адрес /metricshttp://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/):

  1. Перенесите содержимое host-config.yaml в конфиг LiteLLM (ключевые поля — success_callback/failure_callback: ["otel"] и цены *_cost_per_token)

  2. Задайте переменные окружения по образцу .env.example — главное: OTEL_EXPORTER_OTLP_ENDPOINT указывает на HTTP-приемник otlp_collector (по умолчанию порт :4318)

  3. Способ доставки переменных зависит от способа запуска 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 в этом случае не нужен
Обратите внимание!

Шлюз и inference приведены на примере LiteLLM и vLLM. Если у вас другой gateway или inference, llm_gateway/, vllm_metrics и litellm_spendlogs служат образцом: модель данных gen_ai.* остается неизменной, адаптируется только способ включения экспорта и извлечения метрик/стоимости под конкретный инструмент.


Соответствие конфигов и индексов

Конфигурационный файл / компонентЦелевой индекс
gpu_metrics.confgen_ai_gpu_metrics
vllm_metrics.confgen_ai_metrics
claude_code.confgen_ai_events
codex.confgen_ai_events, gen_ai_cost
litellm_spendlogs.confgen_ai_cost, gen_ai_events
otlp_collector (OTel Collector + Data Prepper)gen_ai_traces, gen_ai_events, gen_ai_metrics

Проверка сквозного потока

После развертывания всех компонентов:

  1. Убедитесь, что в Smart Monitor появляются новые документы в gen_ai_gpu_metrics* и gen_ai_metrics*
  2. Проверьте появление событий в gen_ai_events* от локальных AI-клиентов (Claude Code, Codex) и AI-агентов
  3. Отправьте запрос через LiteLLM API — проверьте появление трассировок в gen_ai_traces*
  4. Проверьте наличие cost-данных в gen_ai_cost*
  5. Откройте дашборды модуля и убедитесь, что данные отображаются корректно