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

For clean Markdown content of this page, append .md to this URL. For the complete documentation index, see https://docs.nvidia.com/dynamo/llms.txt. For full content including API reference and SDK examples, see https://docs.nvidia.com/dynamo/llms-full.txt.

Метрики

Обзор

В этом руководстве показано, как собирать и визуализировать метрики компонентов Dynamo с помощью kube-prometheus-stack. kube-prometheus-stack предоставляет мощный и гибкий способ настроить мониторинг для приложений Kubernetes через такие пользовательские ресурсы, как PodMonitor, что упрощает автоматическое обнаружение и сбор метрик с компонентов Dynamo.

Предварительные требования

Установка kube-prometheus-stack

Если у вас еще нет готового стека Prometheus, скорее всего, вам стоит установить kube-prometheus-stack. Это набор манифестов Kubernetes, который включает Prometheus Operator, Prometheus, Grafana и другие компоненты мониторинга в заранее настроенной конфигурации. Стек добавляет пользовательские ресурсы, которые упрощают развертывание и управление мониторингом в Kubernetes:

  • PodMonitor: автоматически обнаруживает и собирает метрики из подов на основе селекторов по меткам
  • ServiceMonitor: похож на PodMonitor, но работает с Service
  • PrometheusRule: определяет правила оповещений и записи

Для базовой установки:

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
# Values allow PodMonitors to be picked up that are outside of the kube-prometheus-stack helm release
helm install prometheus -n monitoring --create-namespace prometheus-community/kube-prometheus-stack \
--set prometheus.prometheusSpec.podMonitorSelectorNilUsesHelmValues=false \
--set prometheus.prometheusSpec.podMonitorNamespaceSelector.matchLabels=null \
--set prometheus.prometheusSpec.probeNamespaceSelector.matchLabels=null

Команды ниже предполагают, что вы установили kube-prometheus-stack способом, описанным выше. В зависимости от конфигурации стека мониторинга вам может потребоваться скорректировать последующие команды kubectl в этом документе соответствующим образом (например, изменить имена Namespace или Service).

Установка Dynamo Operator

Прежде чем настраивать сбор метрик, убедитесь, что Dynamo operator установлен в вашем кластере. Подробные инструкции по развертыванию Dynamo operator см. в нашем Руководстве по установке. Обязательно задайте dynamo-operator.dynamo.metrics.prometheusEndpoint в значение endpoint Prometheus, который вы установили на предыдущем шаге.

helm install dynamo-platform ...
--set dynamo-operator.dynamo.metrics.prometheusEndpoint=http://prometheus-kube-prometheus-prometheus.monitoring.svc.cluster.local:9090

Node Exporter для метрик CPU/памяти

Панель Dynamo в Grafana включает виджеты для загрузки CPU на уровне узла, системной нагрузки и использования ресурсов контейнеров. Эти метрики собираются и экспортируются в Prometheus через node-exporter, который предоставляет метрики оборудования и ОС из Linux-систем.

Установка kube-prometheus-stack, описанная выше, по умолчанию включает node-exporter. Если вы используете собственную конфигурацию Prometheus, убедитесь, что node-exporter развернут как DaemonSet на узлах кластера.

Чтобы проверить, что node-exporter запущен:

kubectl get daemonset -A | grep node-exporter

Если node-exporter не запущен, вы можете установить его через kube-prometheus-stack или развернуть отдельно. Дополнительные сведения см. в документации node-exporter.

Сбор метрик DCGM (необязательно)

Метрики использования GPU собираются и экспортируются в Prometheus через dcgm-exporter. Панель Dynamo в Grafana включает виджет, связанный с использованием GPU в вашем развертывании Dynamo. Чтобы этот виджет заполнялся, убедитесь, что dcgm-exporter запущен в кластере. Чтобы проверить это, выполните следующую команду:

kubectl get daemonset -A | grep dcgm-exporter

Если вывод пустой, необходимо установить dcgm-exporter. Дополнительные сведения см. в официальной документации dcgm-exporter.

Развертывание DynamoGraphDeployment

Начнем с развертывания простого агрегированного vLLM-развертывания:

export NAMESPACE=dynamo-system # namespace where dynamo operator is installed
pushd examples/backends/vllm/deploy
kubectl apply -f agg.yaml -n $NAMESPACE
popd

Это создаст два компонента:

  • Frontend-компонент, публикующий метрики на HTTP-порту
  • Worker-компонент, публикующий метрики на системном порту

Оба компонента предоставляют endpoint /metrics в формате OpenMetrics, но с разными метриками, соответствующими их ролям. Подробнее о:

Проверка развертывания

Отправим несколько тестовых запросов, чтобы заполнить метрики:

curl localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen/Qwen3-0.6B",
"messages": [
{
"role": "user",
"content": "In the heart of Eldoria, an ancient land of boundless magic and mysterious creatures, lies the long-forgotten city of Aeloria. Once a beacon of knowledge and power, Aeloria was buried beneath the shifting sands of time, lost to the world for centuries. You are an intrepid explorer, known for your unparalleled curiosity and courage, who has stumbled upon an ancient map hinting at ests that Aeloria holds a secret so profound that it has the potential to reshape the very fabric of reality. Your journey will take you through treacherous deserts, enchanted forests, and across perilous mountain ranges. Your Task: Character Background: Develop a detailed background for your character. Describe their motivations for seeking out Aeloria, their skills and weaknesses, and any personal connections to the ancient city or its legends. Are they driven by a quest for knowledge, a search for lost familt clue is hidden."
}
],
"stream": true,
"max_tokens": 30
}'

Подробнее о проверке развертывания см. в README vLLM.

Настройка сбора метрик

Включение телеметрии NIXL (необязательно)

Чтобы включить метрики телеметрии NIXL дополнительно к метрикам Dynamo, задайте следующие переменные окружения в worker-компоненте:

spec: services: YourWorker: envs:

  • name: NIXL_TELEMETRY_ENABLE value: "y"

Телеметрия NIXL отключена по умолчанию. Если ее включить, метрики NIXL будут доступны на порту, указанном в NIXL_TELEMETRY_PROMETHEUS_PORT (по умолчанию 19090).

Создание PodMonitor

Prometheus Operator использует ресурсы PodMonitor для автоматического обнаружения и сбора метрик из подов. Чтобы включить это обнаружение, Dynamo operator автоматически создает ресурс PodMonitor и добавляет такие метки ко всем подам:

  • nvidia.com/metrics-enabled: "true" - включает сбор метрик
  • nvidia.com/dynamo-component-type: "frontend|worker" - определяет тип компонента

Вы можете отключить сбор метрик для отдельных развертываний, добавив эту аннотацию в свой DynamoGraphDeployment:

apiVersion: nvidia.com/v1
kind: DynamoGraphDeployment
metadata:
name: my-deployment
annotations:
nvidia.com/enable-metrics: "false"
spec:
# …

Настройка панели Grafana

Примените конфигурацию панели Dynamo, чтобы добавить ее в Grafana:

kubectl apply -n monitoring -f deploy/observability/grafana-dynamo-dashboard-configmap.yaml

Панель встроена в ConfigMap. Поскольку она помечена как grafana_dashboard: "1", Grafana обнаружит ее и добавит в список доступных панелей. Панель включает виджеты для:

  • частоты запросов Frontend
  • времени до первого токена
  • задержки между токенами
  • длительности запроса
  • длины входной и выходной последовательностей
  • использования GPU через DCGM
  • загрузки CPU узла и системной нагрузки
  • использования CPU контейнером на каждый под
  • использования памяти на каждый под

Просмотр метрик

В Prometheus

kubectl port-forward svc/prometheus-kube-prometheus-prometheus 9090:9090 -n monitoring

Откройте http://localhost:9090 и попробуйте такие примеры запросов:

  • dynamo_frontend_requests_total
  • dynamo_frontend_time_to_first_token_seconds_bucket

Prometheus UI showing Dynamo metrics

В Grafana

# Get Grafana credentials
export GRAFANA_USER=$(kubectl get secret -n monitoring prometheus-grafana -o jsonpath="{.data.admin-user}" | base64 --decode)
export GRAFANA_PASSWORD=$(kubectl get secret -n monitoring prometheus-grafana -o jsonpath="{.data.admin-password}" | base64 --decode)
echo "Grafana user: $GRAFANA_USER"
echo "Grafana password: $GRAFANA_PASSWORD"

# Port forward Grafana service
kubectl port-forward svc/prometheus-grafana 3000:80 -n monitoring

Откройте http://localhost:3000 и войдите, используя учетные данные, полученные выше.

После входа найдите панель Dynamo в разделе General.

Grafana dashboard showing Dynamo metrics

Метрики Operator

Note: The metrics described above are for Dynamo applications (frontends, workers). The Dynamo Operator itself also exposes metrics for monitoring controller reconciliation, webhook validation, and resource inventory.

See the Operator Metrics Guide for details on operator-specific metrics and the operator dashboard.