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

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 в Kubernetes с помощью Grafana Loki и Alloy. Эта конфигурация представляет собой простой эталонный вариант настройки логирования, которому можно следовать в кластерах Kubernetes, включая Minikube и MicroK8s.

Эта конфигурация предназначена для разработки и тестирования. Для production-среды обратитесь к официальной документации по high-availability конфигурациям.

Обзор компонентов

  • Grafana Loki: быстая и экономичная Kubernetes-native система агрегации логов.

  • Grafana Alloy: OpenTelemetry collector, который заменяет Promtail и собирает логи, метрики и трассировки из pod-ов Kubernetes.

  • Grafana: платформа визуализации для запросов и анализа логов.

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

1. Dynamo Kubernetes Platform

Это руководство предполагает, что Dynamo Kubernetes Platform уже установлена. Подробнее см. Dynamo Kubernetes Platform.

2. Kube-prometheus

Хотя в этом руководстве Prometheus не используется, предполагается, что Grafana уже установлена вместе с kube-prometheus. Подробнее см. kube-prometheus.

3. Переменные окружения

Переменные настройки Kubernetes

Задаются следующие env variables:

  • MONITORING_NAMESPACE: namespace, где установлен Loki
  • DYN_NAMESPACE: namespace, где установлена Dynamo Kubernetes Platform
export MONITORING_NAMESPACE=monitoring
export DYN_NAMESPACE=dynamo-system

Переменные логирования Dynamo

ПеременнаяОписаниеПример
DYN_LOGGING_JSONLВключает формат логирования JSONL (требуется для Loki)true
DYN_LOGУровни логирования по целям <default_level>,<module_path>=<level>,<module_path>=<level>DYN_LOG=info,dynamo_runtime::system_status_server:trace
DYN_LOG_USE_LOCAL_TZИспользует локальный часовой пояс для временных метокtrue

Шаги установки

1. Установка Loki

Сначала установим Loki в single binary mode, который идеально подходит для тестирования и разработки:

# Add the Grafana Helm repository
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update

# Install Loki
helm install --values deploy/observability/logging/values/loki-values.yaml loki grafana/loki -n $MONITORING_NAMESPACE

Наша конфигурация (loki-values.yaml) настраивает Loki в простой схеме, подходящей для тестирования и разработки. Для хранения используется локальный MinIO. Поды установки можно посмотреть так:

kubectl get pods -n $MONITORING_NAMESPACE -l app=loki

2. Установка Grafana Alloy

Далее установите Grafana Alloy collector, чтобы собирать логи из кластера Kubernetes и пересылать их в Loki. Здесь мы используем Helm chart k8s-monitoring, предоставленный Grafana, для установки collector:

# Generate a custom values file with the namespace information
envsubst < deploy/observability/logging/values/alloy-values.yaml > alloy-custom-values.yaml

# Install the collector
helm install --values alloy-custom-values.yaml alloy grafana/k8s-monitoring -n $MONITORING_NAMESPACE

Файл values (alloy-values.yaml) включает такие настройки collector:

  • destination для пересылки логов в Loki
  • namespace, из которого собирать логи
  • метки pod-ов, которые будут сопоставлены с метками Loki
  • метод сбора (kubernetesApi или чтение /var/log/containers/)
destinations:
- name: loki
type: loki
url: http://loki-gateway.$MONITORING_NAMESPACE.svc.cluster.local/loki/api/v1/push
podLogs:
enabled: true
gatherMethod: kubernetesApi # collect logs from the kubernetes api, rather than /var/log/containers/; friendly for testing and development
collector: alloy-logs
labels:
app_kubernetes_io_name: app.kubernetes.io/name
nvidia_com_dynamo_component_type: nvidia.com/dynamo-component-type
nvidia_com_dynamo_graph_deployment_name: nvidia.com/dynamo-graph-deployment-name
labelsToKeep:
- "app_kubernetes_io_name"
- "container"
- "instance"
- "job"
- "level"
- "namespace"
- "service_name"
- "service_namespace"
- "deployment_environment"
- "deployment_environment_name"
- "nvidia_com_dynamo_component_type" # extract this label from the dynamo graph deployment
- "nvidia_com_dynamo_graph_deployment_name" # extract this label from the dynamo graph deployment
namespaces:
- $DYN_NAMESPACE

3. Настройка Grafana с datasource Loki и панелью Dynamo Logs

Мы будем просматривать логи, связанные с нашим DynamoGraphDeployment, в Grafana. Для этого нужно настроить Grafana с datasource Loki и панелью Dynamo Logs.

Поскольку мы используем Grafana вместе с Prometheus Operator, можно просто применить следующие ConfigMap, чтобы быстро получить нужную конфигурацию.

# Configure Grafana with the Loki datasource
envsubst < deploy/observability/logging/grafana/loki-datasource.yaml | kubectl apply -n $MONITORING_NAMESPACE -f -

# Configure Grafana with the Dynamo Logs dashboard
kubectl apply -f deploy/observability/logging/grafana/logging-dashboard.yaml -n $MONITORING_NAMESPACE

Если Grafana установлена без Prometheus Operator, вы можете вручную импортировать datasource Loki и панель Dynamo Logs через Grafana UI.

4. Развертывание DynamoGraphDeployment с JSONL Logging

К этому моменту у нас должно быть все готово для сбора и просмотра логов в Grafana. Осталось только развернуть DynamoGraphDeployment, с которого будут собираться логи.

Чтобы включить структурированные логи в DynamoGraphDeployment, нужно задать переменную окружения DYN_LOGGING_JSONL в значение 1. Это уже сделано за нас в настройке agg_logging.yaml для backend Sglang. Теперь можно развернуть DynamoGraphDeployment так:

kubectl apply -n $DYN_NAMESPACE -f examples/backends/sglang/deploy/agg_logging.yaml

Отправьте несколько запросов chat completions, чтобы сгенерировать структурированные логи на pod-ах frontend и worker в рамках DynamoGraphDeployment. Теперь все готово для просмотра логов в Grafana.

Просмотр логов в Grafana

Сделайте port-forward для сервиса Grafana, чтобы открыть UI:

kubectl port-forward svc/prometheus-grafana 3000:80 -n $MONITORING_NAMESPACE

Если все работает, в Home > Dashboards > Dynamo Logs вы должны увидеть панель, с помощью которой можно просматривать логи, связанные с нашими DynamoGraphDeployments.

Панель позволяет фильтровать по DynamoGraphDeployment, namespace и типу компонента (например, frontend, worker и т. д.).