Чтобы получить чистую 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")]
)?;