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, где установлен LokiDYN_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 и т. д.).