Nvidia DCGM Exporter

Supported OS Linux Windows Mac OS

Versión de la integración3.1.0

Información general

Este check envía las métricas expuestas por NVIDIA DCGM Exporter en formato de Datadog Agent. Para obtener más información sobre NVIDIA Data Center GPU Manager (DCGM), consulta NVIDIA DCGM.

Configuración

Instalación

A partir de la versión 7.47.0 del Agent, el check de DCGM está incluido en el paquete del Datadog Agent. Sin embargo, debes activar el contenedor de DCGM Exporter para exponer las métricas de la GPU a fin de que el Agent pueda recopilar estos datos. Como los contadores predeterminados no son suficientes, Datadog recomienda utilizar la siguiente configuración de DCGM para cubrir lo mismo que la integración de NVML, además de tener métricas útiles.

# Formato
# Si la línea comienza con '#', se considera un comentario
# CAMPO DE DCGM                                                      ,Prometheus metric type ,help message

# Relojes
DCGM_FI_DEV_SM_CLOCK                                              ,gauge                  ,SM clock frequency (in MHz).
DCGM_FI_DEV_MEM_CLOCK                                             ,gauge                  ,Memory clock frequency (in MHz).

# Temperatura
DCGM_FI_DEV_MEMORY_TEMP                                           ,gauge                  ,Memory temperature (in C).
DCGM_FI_DEV_GPU_TEMP                                              ,gauge                  ,GPU temperature (in C).

# Potencia
DCGM_FI_DEV_POWER_USAGE                                           ,gauge                  ,Power draw (in W).
DCGM_FI_DEV_TOTAL_ENERGY_CONSUMPTION                              ,counter                ,Total energy consumption since boot (in mJ).

# PCIe
DCGM_FI_DEV_PCIE_REPLAY_COUNTER                                   ,counter                ,Total number of PCIe retries.

# Utilización (el período de muestra varía según el producto)
DCGM_FI_DEV_GPU_UTIL                                              ,gauge                  ,GPU utilization (in %).
DCGM_FI_DEV_MEM_COPY_UTIL                                         ,gauge                  ,Memory utilization (in %).
DCGM_FI_DEV_ENC_UTIL                                              ,gauge                  ,Encoder utilization (in %).
DCGM_FI_DEV_DEC_UTIL                                              ,gauge                  ,Decoder utilization (in %).

# Errores e infracciones
DCGM_FI_DEV_XID_ERRORS                                            ,gauge                  ,Value of the last XID error encountered.

# Uso de memoria
DCGM_FI_DEV_FB_FREE                                               ,gauge                  ,Framebuffer memory free (in MiB).
DCGM_FI_DEV_FB_USED                                               ,gauge                  ,Framebuffer memory used (in MiB).

# NVLink
DCGM_FI_DEV_NVLINK_BANDWIDTH_TOTAL                                ,counter                ,Total number of NVLink bandwidth counters for all lanes.

# Estado de la licencia de VGPU
DCGM_FI_DEV_VGPU_LICENSE_STATUS                                   ,gauge                  ,vGPU License status

# Filas reasignadas
DCGM_FI_DEV_UNCORRECTABLE_REMAPPED_ROWS                           ,counter                ,Number of remapped rows for uncorrectable errors
DCGM_FI_DEV_CORRECTABLE_REMAPPED_ROWS                             ,counter                ,Number of remapped rows for correctable errors
DCGM_FI_DEV_ROW_REMAP_FAILURE                                     ,gauge                  ,Whether remapping of rows has failed

# Métricas de DCP
DCGM_FI_PROF_PCIE_TX_BYTES                                        ,counter                ,The number of bytes of active pcie tx data including both header and payload.
DCGM_FI_PROF_PCIE_RX_BYTES                                        ,counter                ,The number of bytes of active pcie rx data including both header and payload.
DCGM_FI_PROF_GR_ENGINE_ACTIVE                                     ,gauge                  ,Ratio of time the graphics engine is active (in %).
DCGM_FI_PROF_SM_ACTIVE                                            ,gauge                  ,The ratio of cycles an SM has at least 1 warp assigned (in %).
DCGM_FI_PROF_SM_OCCUPANCY                                         ,gauge                  ,The ratio of number of warps resident on an SM (in %).
DCGM_FI_PROF_PIPE_TENSOR_ACTIVE                                   ,gauge                  ,Ratio of cycles the tensor (HMMA) pipe is active (in %).
DCGM_FI_PROF_DRAM_ACTIVE                                          ,gauge                  ,Ratio of cycles the device memory interface is active sending or receiving data (in %).
DCGM_FI_PROF_PIPE_FP64_ACTIVE                                     ,gauge                  ,Ratio of cycles the fp64 pipes are active (in %).
DCGM_FI_PROF_PIPE_FP32_ACTIVE                                     ,gauge                  ,Ratio of cycles the fp32 pipes are active (in %).
DCGM_FI_PROF_PIPE_FP16_ACTIVE                                     ,gauge                  ,Ratio of cycles the fp16 pipes are active (in %).

# Campos adicionales recomendados de Datadog
DCGM_FI_DEV_COUNT                                                 ,counter                ,Number of Devices on the node.
DCGM_FI_DEV_FAN_SPEED                                             ,gauge                  ,Fan speed for the device in percent 0-100.
DCGM_FI_DEV_SLOWDOWN_TEMP                                         ,gauge                  ,Slowdown temperature for the device.
DCGM_FI_DEV_POWER_MGMT_LIMIT                                      ,gauge                  ,Current power limit for the device.
DCGM_FI_DEV_PSTATE                                                ,gauge                  ,Performance state (P-State) 0-15. 0=highest
DCGM_FI_DEV_FB_TOTAL                                              ,gauge                  ,
DCGM_FI_DEV_FB_RESERVED                                           ,gauge                  ,
DCGM_FI_DEV_FB_USED_PERCENT                                       ,gauge                  ,
DCGM_FI_DEV_CLOCK_THROTTLE_REASONS                                ,gauge                  ,Current clock throttle reasons (bitmask of DCGM_CLOCKS_THROTTLE_REASON_*)

DCGM_FI_PROCESS_NAME                                              ,label                  ,The Process Name.
DCGM_FI_CUDA_DRIVER_VERSION                                       ,label                  ,
DCGM_FI_DEV_NAME                                                  ,label                  ,
DCGM_FI_DEV_MINOR_NUMBER                                          ,label                  ,
DCGM_FI_DRIVER_VERSION                                            ,label                  ,
DCGM_FI_DEV_BRAND                                                 ,label                  ,
DCGM_FI_DEV_SERIAL                                                ,label                  ,

Docker

Para configurar el exportador en un entorno Docker:

  1. Crea el archivo $PWD/default-counters.csv que contiene los campos predeterminados de NVIDIA etc/default-counters.csv, así como otros campos recomendados por Datadog. Para agregar más campos para la recopilación, sigue estas instrucciones. Para obtener la lista completa de campos, consulta el manual de referencia de la API de DCGM.
  2. Ejecuta el contenedor Docker usando el siguiente comando:
    sudo docker run --pid=host --privileged -e DCGM_EXPORTER_INTERVAL=5000 --gpus all -d -v /proc:/proc -v $PWD/default-counters.csv:/etc/dcgm-exporter/default-counters.csv -p 9400:9400 --name dcgm-exporter nvcr.io/nvidia/k8s/dcgm-exporter:3.1.7-3.1.4-ubuntu20.04
    

Kubernetes (chart Helm de DCGM Exporter)

El DCGM Exporter se puede instalar rápidamente en un entorno Kubernetes mediante el chart Helm de NVIDIA DCGM Exporter. Las instrucciones que aparecen a continuación derivan de la plantilla proporcionada por NVIDIA aquí.

  1. Añade el repositorio Helm de NVIDIA DCGM Exporter y asegúrate de que esté actualizado:
    helm repo add gpu-helm-charts https://nvidia.github.io/dcgm-exporter/helm-charts && helm repo update
    
  2. Crea un ConfigMap que contenga las métricas recomendadas por Datadog de Instalación, así como el RoleBinding y el Role utilizados por los pods de DCGM para recuperar el ConfigMap usando el manifiesto a continuación:
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: dcgm-exporter-read-datadog-cm
      namespace: default
    rules:
    - apiGroups: [""]
      resources: ["configmaps"]
      resourceNames: ["datadog-dcgm-exporter-configmap"]
      verbs: ["get"]
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: dcgm-exporter-datadog
      namespace: default
    subjects:
    - kind: ServiceAccount
      name: dcgm-datadog-dcgm-exporter
      namespace: default
    roleRef:
      kind: Role 
      name: dcgm-exporter-read-datadog-cm
      apiGroup: rbac.authorization.k8s.io
    ---
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: datadog-dcgm-exporter-configmap
      namespace: default
    data:
      metrics: |
          # Copy the content from the Installation section.      
    
  3. Crea tu chart Helm de DCGM Exporter dcgm-values.yaml con el siguiente contenido:
    # Exposing more metrics than the default for additional monitoring - this requires the use of a dedicated ConfigMap for which the Kubernetes ServiceAccount used by the exporter has access thanks to step 1.
    # Ref: https://github.com/NVIDIA/dcgm-exporter/blob/e55ec750def325f9f1fdbd0a6f98c932672002e4/deployment/values.yaml#L38
    arguments: ["-m", "default:datadog-dcgm-exporter-configmap"]
    
    # Datadog Autodiscovery V2 annotations
    podAnnotations:
      ad.datadoghq.com/exporter.checks: |-
        {
          "dcgm": {
            "instances": [
              {
                "openmetrics_endpoint": "http://%%host%%:9400/metrics"
              }
            ]
          }
        }    
    # Optional - Disabling the ServiceMonitor which requires Prometheus CRD - can be re-enabled if Prometheus CRDs are installed in your cluster
    serviceMonitor:
      enabled: false
    
  4. Instala el chart Helm de DCGM Exporter en el espacio de nombres default con el siguiente comando, mientras te encuentras en el directorio con tu dcgm-values.yaml:
    helm install dcgm-datadog gpu-helm-charts/dcgm-exporter -n default -f dcgm-values.yaml
    

Nota: Puedes modificar el nombre de la versión dcgm-datadog así como el espacio de nombres, pero debes modificar en consecuencia el manifiesto del paso 1.

Kubernetes (NVIDIA GPU Operator)

El DCGM Exporter se puede instalar en un entorno Kubernetes mediante NVIDIA GPU Operator. Las instrucciones que aparecen a continuación derivan de la plantilla proporcionada por NVIDIA aquí.

  1. Añade el repositorio Helm de NVIDIA GPU Operator y asegúrate de que esté actualizado:
    helm repo add nvidia https://helm.ngc.nvidia.com/nvidia && helm repo update
    
  2. Sigue las instrucciones de Configuración de métricas personalizadas con el CSV de Instalación:
    • Obtén el archivo de métricas y guárdalo como dcgm-metrics.csv: curl https://raw.githubusercontent.com/NVIDIA/dcgm-exporter/main/etc/dcp-metrics-included.csv > dcgm-metrics.csv
    • Edita el archivo de métricas reemplazando su contenido con la asignación proporcionada por Datadog.
    • Crea un espacio de nombres gpu-operator si aún no existe: kubectl create namespace gpu-operator.
    • Crea un ConfigMap utilizando el archivo editado anteriormente: kubectl create configmap metrics-config -n gpu-operator --from-file=dcgm-metrics.csv
  3. Crea tu chart Helm de GPU Operator dcgm-values.yaml con el siguiente contenido:
    # Refer to NVIDIA documentation for the driver and toolkit for your GPU-enabled nodes - example below for Amazon Linux 2 g5.xlarge
    driver:
      enabled: true
    toolkit:
      version: v1.13.5-centos7
    # Using custom metrics configuration to collect recommended Datadog additional metrics - requires the creation of the metrics-config ConfigMap from the previous step
    # Ref: https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/latest/getting-started.html#custom-metrics-config
    dcgmExporter:
      config:
        name: metrics-config
      env:
      - name: DCGM_EXPORTER_COLLECTORS
        value: /etc/dcgm-exporter/dcgm-metrics.csv
    # Adding Datadog autodiscovery V2 annotations
    daemonsets:
      annotations:
        ad.datadoghq.com/nvidia-dcgm-exporter.checks: |-
          {
            "dcgm": {
              "instances": [
                {
                  "openmetrics_endpoint": "http://%%host%%:9400/metrics"
                }
              ]
            }
          }      
    
  4. Instala el chart Helm de DCGM Exporter en el espacio de nombres default con el siguiente comando, mientras te encuentras en el directorio con tu dcgm-values.yaml:
    helm install datadog-dcgm-gpu-operator -n gpu-operator nvidia/gpu-operator -f dcgm-values.yaml
    

Configuración

Host

Recopilación de métricas
  1. Edita el archivo dcgm.d/conf.yaml (ubicado en la carpeta conf.d/ en la raíz del directorio de configuración de tu Agent) para comenzar a recopilar tus métricas de GPU. Consulta el dcgm.d/conf.yaml de muestra para ver todas las opciones de configuración disponibles.

    instances:
    
       ## @param openmetrics_endpoint - string - required
       ## The URL exposing metrics in the OpenMetrics format.
       ##
       ## Set this to <listenAddress>/<handlerPath> as configured in your DCGM Server
       #
       - openmetrics_endpoint: http://localhost:9400/metrics
    

Utiliza el campo de configuración extra_metrics para añadir métricas que vayan más allá de las que Datadog admite de forma predefinida. Consulta los documentos de NVIDIA para obtener la lista completa de métricas que dcgm-exporter puede recopilar. Asegúrate de habilitar estos campos en la configuración de dcgm-exporter también.

Docker

Recopilación de métricas

Establece Plantillas de integraciones de Autodiscovery como etiquetas de Docker en tu contenedor de DCGM Exporter:

LABEL "com.datadoghq.ad.check_names"='["dcgm"]'
LABEL "com.datadoghq.ad.init_configs"='[{}]'
LABEL "com.datadoghq.ad.instances"='[{"openmetrics_endpoint": "http://%%host%%:9400/metrics"}]'

Kubernetes

Nota: Si seguiste las instrucciones para el chart Helm de DCGM Exporter o GPU Operator, las anotaciones ya se aplican a los pods y puedes ignorar las siguientes instrucciones.

  1. Para Configurar este check para un Agent que se ejecuta en Kubernetes:
Recopilación de métricas

Configura plantillas de integraciones de Autodiscovery como anotaciones de pod en el contenedor de tu aplicación. Además de esto, las plantillas también se pueden configurar con un archivo, un ConfigMap o un almacén de clave-valor.

Anotaciones v2 (para el Datadog Agent v7.47 o posterior)

apiVersion: v1
kind: Pod
metadata:
  name: '<POD_NAME>'
  annotations:
    ad.datadoghq.com/dcgm.checks: |
      {
        "dcgm": {
          "init_config": {},
          "instances": [
            {
              "openmetrics_endpoint": "http://%%host%%:9400/metrics"
            }
          ]
        }
      }      
spec:
  containers:
    - name: dcgm

Cuando hayas terminado de hacer cambios en la configuración, reinicia el Agent.

Validación

Ejecuta el subcomando de estado del Agent y busca dcgm en la sección Checks.

Ajuste de los monitores

Los monitores predefinidos que vienen con esta integración tienen algunos valores predeterminados según sus umbrales de alerta. Por ejemplo, la temperatura de la GPU se determina según un rango aceptable para dispositivos industriales. Sin embargo, Datadog recomienda que verifiques que estos valores se ajusten a tus necesidades particulares.

Datos recopilados

Métricas

dcgm.clock_throttle_reasons
(gauge)
Current clock throttle reasons (bitmask of DCGMCLOCKSTHROTTLEREASON*)
dcgm.correctable_remapped_rows.count
(count)
Number of remapped rows for correctable errors.
Shown as row
dcgm.dec_utilization
(gauge)
Decoder utilization (in %).
Shown as percent
dcgm.device.count
(count)
Number of Devices on the node.
Shown as device
dcgm.dram.active
(gauge)
Ratio of cycles the device memory interface is active sending or receiving data (in %).
Shown as fraction
dcgm.enc_utilization
(gauge)
Encoder utilization (in %).
Shown as percent
dcgm.fan_speed
(gauge)
Fan speed for the device in percent 0-100.
Shown as percent
dcgm.frame_buffer.free
(gauge)
Free Frame Buffer in MB.
Shown as megabyte
dcgm.frame_buffer.reserved
(gauge)
Reserved Frame Buffer in MB.
Shown as megabyte
dcgm.frame_buffer.total
(gauge)
Total Frame Buffer of the GPU in MB.
Shown as megabyte
dcgm.frame_buffer.used
(gauge)
Used Frame Buffer in MB.
Shown as megabyte
dcgm.frame_buffer.used_percent
(gauge)
Percentage used of Frame Buffer: Used/(Total - Reserved). Range 0.0-1.0
Shown as fraction
dcgm.gpu_utilization
(gauge)
GPU utilization (in %).
Shown as percent
dcgm.gr_engine_active
(gauge)
Ratio of time the graphics engine is active (in %).
Shown as fraction
dcgm.mem.clock
(gauge)
Memory clock frequency (in MHz).
Shown as megahertz
dcgm.mem.copy_utilization
(gauge)
Memory utilization (in %).
Shown as percent
dcgm.mem.temperature
(gauge)
Memory temperature (in C).
Shown as degree celsius
dcgm.nvlink_bandwidth.count
(count)
Total number of NVLink bandwidth counters for all lanes
dcgm.pcie_replay.count
(count)
Total number of PCIe retries.
dcgm.pcie_rx_throughput.count
(count)
PCIe Rx utilization information.
dcgm.pcie_tx_throughput.count
(count)
PCIe Tx utilization information.
dcgm.pipe.fp16_active
(gauge)
Ratio of cycles the fp16 pipes are active (in %).
Shown as fraction
dcgm.pipe.fp32_active
(gauge)
Ratio of cycles the fp32 pipes are active (in %).
Shown as fraction
dcgm.pipe.fp64_active
(gauge)
Ratio of cycles the fp64 pipes are active (in %).
Shown as fraction
dcgm.pipe.tensor_active
(gauge)
Ratio of cycles the tensor (HMMA) pipe is active (in %).
Shown as fraction
dcgm.power_management_limit
(gauge)
Current power limit for the device.
Shown as watt
dcgm.power_usage
(gauge)
Power draw (in W).
Shown as watt
dcgm.pstate
(gauge)
Performance state (P-State) 0-15. 0=highest
dcgm.row_remap_failure
(gauge)
Whether remapping of rows has failed.
dcgm.slowdown_temperature
(gauge)
Slowdown temperature for the device.
Shown as degree celsius
dcgm.sm_active
(gauge)
The ratio of cycles an SM has at least 1 warp assigned (in %).
Shown as fraction
dcgm.sm_clock
(gauge)
SM clock frequency (in MHz).
Shown as megahertz
dcgm.sm_occupancy
(gauge)
The ratio of number of warps resident on an SM (in %).
Shown as fraction
dcgm.temperature
(gauge)
GPU temperature (in C).
Shown as degree celsius
dcgm.total_energy_consumption.count
(count)
Total energy consumption since boot (in mJ).
Shown as millijoule
dcgm.uncorrectable_remapped_rows.count
(count)
Number of remapped rows for uncorrectable errors.
Shown as row
dcgm.vgpu_license_status
(gauge)
vGPU License status
dcgm.xid_errors
(gauge)
Value of the last XID error encountered.

Eventos

La integración de DCGM no incluye ningún evento.

Checks de servicio

Consulta service_checks.json para obtener una lista de los checks de servicio que proporciona esta integración.

Solucionar problemas

Asignación de métricas

Si has añadido algunas métricas que no aparecen en el archivo metadata.csv anterior, pero que aparecen en tu cuenta con el formato DCGM_FI_DEV_NEW_METRIC, reasigna estas métricas en el archivo de configuración dcgm.d/conf.yaml:

    ## @param extra_metrics - (lista de cadenas o asignaciones) - opcional
    ## Esta lista define las métricas que se recopilarán desde `openmetrics_endpoint`, además de
    ## lo que el check recopila de forma predeterminada. Si el check ya recopila una métrica, entonces
    ## las definiciones de métricas tienen prioridad aquí. Las métricas pueden definirse de tres maneras:
    ...

El siguiente ejemplo añade la parte de NEW_METRIC a espacio de nombres (dcgm.), lo que da dcgm.new_metric:

    extra_metrics:
    - DCGM_FI_DEV_NEW_METRIC: new_metric

¿El campo de DCGM está habilitado, pero no se envía?

Si un campo no se recopila incluso después de habilitarlo en default-counters.csv y realizar una solicitud curl a host:9400/metrics, los desarrolladores de dcgm-exporter recomiendan consultar el archivo de log en var/log/nv-hostengine.log.

Nota: dcgm-exporter es un wrapper que contiene las bibliotecas y controladores de nivel inferior que realizan los informes reales.

Mayor consumo de recursos

En algunos casos, la métrica DCGM_FI_DEV_GPU_UTIL puede provocar un mayor consumo de recursos. Si estás experimentando este problema:

  1. Deshabilita DCGM_FI_DEV_GPU_UTIL en default-counters.csv.
  2. Asegúrate de que los siguientes campos están habilitados en default-counters.csv:
    • DCGM_FI_PROF_DRAM_ACTIVE
    • DCGM_FI_PROF_GR_ENGINE_ACTIVE
    • DCGM_FI_PROF_PCIE_RX_BYTES
    • DCGM_FI_PROF_PCIE_TX_BYTES
    • DCGM_FI_PROF_PIPE_FP16_ACTIVE
    • DCGM_FI_PROF_PIPE_FP32_ACTIVE
    • DCGM_FI_PROF_PIPE_FP64_ACTIVE
    • DCGM_FI_PROF_PIPE_TENSOR_ACTIVE
    • DCGM_FI_PROF_SM_ACTIVE
    • DCGM_FI_PROF_SM_OCCUPANCY
  3. Reinicia tanto dcgm-exporter como el Datadog Agent.

¿Necesitas ayuda?

Ponte en contacto con el soporte de Datadog.

Referencias adicionales

Más enlaces, artículos y documentación útiles: