Перейти к основному содержимому

Чтобы получить чистую Markdown-версию этой страницы, добавьте .md к этому URL. Для полного индекса документации см. https://docs.nvidia.com/dynamo/llms.txt. Для полного содержимого, включая справочник API и примеры SDK, см. https://docs.nvidia.com/dynamo/llms-full.txt.

Руководство разработчика по метрикам

Это руководство объясняет, как создавать и использовать пользовательские метрики в компонентах Dynamo с помощью API метрик Dynamo.

Экспонирование метрик

Все метрики, созданные через API метрик Dynamo, автоматически публикуются на HTTP-эндпоинте /metrics в виде текста в формате Prometheus Exposition Format, если задана следующая переменная окружения:

  • DYN_SYSTEM_PORT=<port> - Порт для эндпоинта метрик (задайте положительное значение, чтобы включить; по умолчанию -1, что означает отключено)

Пример:

DYN_SYSTEM_PORT=8081 python -m dynamo.vllm --model <model>

Текстовые метрики в формате Prometheus Exposition Format будут доступны по адресу: http://localhost:8081/metrics

Константы имён метрик

Модуль prometheus_names.rs предоставляет централизованные константы имён метрик и функции нормализации, чтобы обеспечить единообразие во всех компонентах Dynamo.


API метрик в Rust

API метрик доступен через метод .metrics() у объектов runtime, namespace, component и endpoint. Подробности о иерархической структуре см. в разделе Runtime Hierarchy.

Доступные методы

  • .metrics().create_counter(): Создать метрику-счётчик
  • .metrics().create_gauge(): Создать метрику gauge
  • .metrics().create_histogram(): Создать метрику histogram
  • .metrics().create_countervec(): Создать счётчик с метками
  • .metrics().create_gaugevec(): Создать gauge с метками
  • .metrics().create_histogramvec(): Создать histogram с метками

Создание метрик

use dynamo_runtime::DistributedRuntime;

let runtime = DistributedRuntime::new()?;
let endpoint = runtime.namespace("my_namespace").component("my_component").endpoint("my_endpoint");

// Simple metrics
let requests_total = endpoint.metrics().create_counter(
"requests_total",
"Total requests",
&[]
)?;

let active_connections = endpoint.metrics().create_gauge(
"active_connections",
"Active connections",
&[]
)?;

let latency = endpoint.metrics().create_histogram(
"latency_seconds",
"Request latency",
&[],
Some(vec![0.001, 0.01, 0.1, 1.0, 10.0])
)?;

Использование метрик

// Counters
requests_total.inc();

// Gauges
active_connections.set(42.0);
active_connections.inc();
active_connections.dec();

// Histograms
latency.observe(0.023); // 23ms

Векторные метрики с метками

// Создание векторных метрик с именами меток
let requests_by_model = endpoint.metrics().create_countervec(
"requests_by_model",
"Requests by model",
&["model_type", "model_size"],
&[]
)?;

let memory_by_gpu = endpoint.metrics().create_gaugevec(
"gpu_memory_bytes",
"GPU memory by device",
&["gpu_id", "memory_type"],
&[]
)?;

// Use with specific label values
requests_by_model.with_label_values(&["llama", "7b"]).inc();
memory_by_gpu.with_label_values(&["0", "allocated"]).set(8192.0);

Дополнительные возможности

Пользовательские корзины histogram:

let latency = endpoint.metrics().create_histogram(
"latency_seconds",
"Request latency",
&[],
Some(vec![0.001, 0.01, 0.1, 1.0, 10.0])
)?;

Постоянные метки:

let counter = endpoint.metrics().create_counter(
"requests_total",
"Total requests",
&[("region", "us-west"), ("env", "prod")]
)?;

Связанная документация