监控 GPU

您可以在 Instana 用户界面中监控 GPU 指标。 要监控 GPUmetrics,请安装 NVIDIA GPU Operator,并配置一个 OpenTelemetry-based 数据收集器,例如 Instana 版本的 OpenTelemetry Collector( IDOT )或开源的 OpenTelemetry Collector。

NVIDIA GPU Operator

您可以在 GPU 环境中安装 NVIDIA GPU Operator,该组件有助于管理和收集 GPU 指标。 如果需要,请启用以下组件: NVIDIA 驱动程序(用于启用CUDA)、适用于GPU的 Kubernetes 设备插件,以及 NVIDIA 容器工具包。 如需了解更多信息,请参阅 NVIDIA GPU Operator

helm install gpu-operator \
   --repo https://helm.ngc.nvidia.com/nvidia \
   --namespace gpu-operator \
   --create-namespace \
   -set driver.enabled=false \
   -set toolkit.enabled=false \
   -set devicePlugin.enabled=false \
   -set mig.strategy=single \
   gpu-operator
 

NVIDIA GPU Operator 默认会安装 NVIDIA Data Center GPU Manager (DCGM)。 DCGM Exporter 是一款用于将 DCGM 数据导出至 NVIDIA 的工具,它允许用户收集 GPU 指标,从而了解工作负载行为或监控集群中的 GPU。

DCGM Exporter 通过 HTTP 端点 (/metrics) 向监控解决方案提供 GPU 指标。 如需更多信息,请参阅 DCGM Exporter

Instana 通过 DCGM 导出器支持 MIG(多实例 GPU),该导出器可提供对分区 GPU 使用情况的可视化监控。 可以针对每个 MIG 实例独立收集指标,这有助于您在共享环境中更有效地监控和分配 GPU 资源。

OpenTelemetry-based 数据采集器

您可以使用 OpenTelemetry Collector,将GPU的 OpenTelemetry 数据转发至 Instana 代理或 Instana 后端。

您可以使用以下任一 OpenTelemetry 收集器:
  • Instana OpenTelemetry Collector( IDOT )发行版: IDOT 是一个预配置且经过优化的发行版,可简化 GPU 监控的配置过程。 如需了解更多信息,请访问 IDOT 并了解“ OpenTelemetry ”项目
  • 开源的 OpenTelemetry 收集器: OpenTelemetry 收集器是 OpenTelemetry 生态系统的核心组件,提供与供应商无关的遥测数据收集、处理和导出功能。 请将其用于自定义部署,或 IDOT 不可用的环境。 如需了解更多信息,请参阅 OpenTelemetry Collector

Instana 支持以下型号的GPU数据采集:

  • 代理模型:在此模式下,GPU 数据首先发送至 Instana 代理,该代理负责聚合数据并将其发送至 Instana 后端。
  • 无代理模型:在此模式下,GPU数据会直接发送至 Instana 后端,无需经过代理。

将遥测数据转发至 Instana 代理(代理模式)

  1. 以下代码片段展示了 OpenTelemetry 收集器通过协议 OTLP/gRPC 将遥测数据转发至本地 Instana 主机代理的典型配置。

    按以下方式创建一个名为 ` YAML ` 的文件,例如 ` config.yaml `:

    receivers:
      otlp:
        protocols:
          grpc:
      prometheus/nvidia-dcgm:
        config:
          scrape_configs:
            - job_name: 'nvidia-dcgm'
              scrape_interval: 10s
              static_configs:
                - targets: 
                  - "$(DCGM_EXPORTOR_ENDPOINT)"
    processors:
      batch:
      resource:
        attributes:
          - key: server.address
            from_attribute: net.host.name
            action: insert
          - key: server.port
            from_attribute: net.host.port
            action: insert
          - key: service.name
            value: nvidia-dcgm
            action: update
          - key: INSTANA_PLUGIN
            value: dcgm
            action: insert
    exporters:
      otlp:
        endpoint: "$(INSTANA_AGENT_HOST):4317"
        tls:
          insecure: true
    service:
      pipelines:
        metrics/nvidia-dcgm:
          receivers: [prometheus/nvidia-dcgm]
          processors: [batch, resource]
          exporters: [otlp]
     
    注:
    数据中心 GPU 管理器(DCGM)是 NVIDIA 中用于 GPU 监控和管理的工具。 该导出器提供了可用于 Prometheus 抓取的GPU指标。 DCGM_EXPORTER_ENDPOINT 表示 DCGM 导出程序运行的端点。 例如,DCGM 的值为 127.0.0.1:9400。

    以下示例展示了 OpenTelemetry 收集器的典型配置,用于通过 OTLP/HTTP 协议将遥测数据转发至本地 Instana 主机代理。

    exporters:
      otlphttp:
        endpoint: "http://$(INSTANA_AGENT_HOST):4318"
        tls:
          insecure: true
     
    • 使用 DCGM Exporter DCGM_EXPORTOR_ENDPOINT 端点设置该字段。
    • INSTANA_AGENT_HOST 该字段中输入要连接的 Instana 代理的IP地址或主机名。
    • Instana 使用 OTLP 的标准端口号,例如4317用于 OTLP/gRPC ,4318用于 OTLP/HTTP
  2. config.yaml 文件中完成所有配置更改后,请运行以下命令以使用 OpenTelemetry 收集器:
docker run -d -p 4317:4317 -v $(pwd)/config.yaml:/etc/otelcol-contrib/config.yaml otel/opentelemetry-collector-contrib:latest
 

将遥测数据转发至 Instana 后端(无代理模式)

若要使用 OpenTelemetry Collector 将 OpenTelemetry 数据转发至 Instana 后端,请执行以下步骤:

  1. 创建一个名为 YAML 的文件,例如上一节中的 config.yaml。 将代理端点 endpoint 从 Instana 更改为后端端点 Instana。 在发送 OpenTelemetry 数据时,会使用后端 otlp-acceptor 组件的特殊端点。 Instana 后端需要一个 Instana 代理密钥用于验证。 Instana 后端还要求使用 host.id, faas.id, 或 device.id 资源属性。

    exporters:
      otlp:
        endpoint: INSTANA_OTLP_GRPC_BACKEND:4317
        headers:
          x-instana-key: xxxxxxx
          x-instana-host: xxxx
     

    注:

    • 请在 INSTANA_OTLP_GRPC_BACKEND 该字段中设置 Instana 后端中该 otlp-acceptor 组件的正确域名。 有关 Instana 后端端点的更多 otlp-acceptor信息,请参阅 《自托管 Instana 后端otlp-acceptor的端点》《 SaaS Instana 后端otlp-acceptor的端点》
    • 将该 x-instana-key 字段设置为 Instana 代理的代理密钥,以便将流量定向至 Instana 后端。 要查找您的代理密钥,您可以在 Instana 用户界面的导航栏中点击 “更多” > “代理 ”,然后点击 “安装代理” >“ Windows ”。
    • 如果您的应用程序或系统中未定义 host.id, faas.id, 或 device.id 资源属性,请将该 x-instana-host 字段设置为主机 ID。
    • Instana 使用 OTLP 的标准端口号,例如4317用于 OTLP/gRPC ,4318用于 OTLP/HTTP。 . 还 OTLP/HTTP支持 443 端口。
  2. config.yaml 文件中完成所有配置更改后,请运行以下命令以使用 OpenTelemetry 收集器:
docker run -d -p 4317:4317 -v $(pwd)/config.yaml:/etc/otelcol-contrib/config.yaml otel/opentelemetry-collector-contrib:latest
 

自动 pod 发现配置

与其指定静态的 DCGM 导出器端点,您不妨配置 OpenTelemetry Collector,使其能够通过以下方式自动发现您 Kubernetes 集群中的 DCGM 导出器 Pod kubernetes_sd_configs: 这种方法避免了需要将各个 Pod 的地址硬编码进去。

receivers:
  otlp:
    protocols:
      grpc: {}
  prometheus/nvidia-dcgm:
    config:
      scrape_configs:
        - job_name: nvidia-dcgm
          scrape_interval: 10s
          kubernetes_sd_configs:
            - role: pod
              namespaces:
                names: ['nvidia-gpu-operator']
          relabel_configs:
            - source_labels: [__meta_kubernetes_pod_label_app]
              regex: nvidia-dcgm-exporter
              action: keep
            - source_labels: [__meta_kubernetes_pod_container_port_name]
              regex: metrics
              action: keep
            - source_labels: [__meta_kubernetes_pod_node_name]
              target_label: node_name
              action: replace
          metric_relabel_configs:
            - source_labels: [__name__]
              regex: 'DCGM_FI_DEV_(GPU_UTIL|MEM_COPY_UTIL|FB_USED|FB_FREE|GPU_TEMP|POWER_USAGE|SM_CLOCK)|DCGM_FI_PROF_GR_ENGINE_ACTIVE'
              action: keep
processors:
  batch: {}
  transform:
    metric_statements:
      - context: datapoint
        statements:
          - set(resource.attributes["service.name"], Concat(["nvidia-dcgm@", resource.attributes["k8s.node.name"]], "")
          - set(resource.attributes["service.instance.id"], attributes["node_name"])
  resource:
    attributes:
      - action: insert
        from_attribute: net.host.name
        key: server.address
      - action: insert
        from_attribute: net.host.port
        key: server.port
      - action: update
        key: service.name
        value: nvidia-dcgm
      - action: insert
        key: INSTANA_PLUGIN
        value: dcgm

exporters:
  debug:
    verbosity: detailed
  otlp:
    endpoint: "http://<instana-grpc-host>:443"
    headers:
      x-instana-key: <api-key>
      x-instana-host: <instana-host>
  otlphttp:
    endpoint: "https://<instana-http-host>:443"
    headers:
      x-instana-key: <api-key>
      x-instana-host: <instana-host>

service:
  pipelines:
    metrics/nvidia-dcgm:
      receivers:
        - prometheus/nvidia-dcgm
      processors:
        - transform
        - batch
        - resource
      exporters:
        - otlp
        - debug
        - otlphttp
  telemetry:
    metrics:
      readers:
        - pull:
            exporter:
              prometheus:
                host: 0.0.0.0
                port: 8888

查看度量值

安装 OpenTelemetry ( OTel )数据收集器后,您可以在 Instana 用户界面中查看 GPU 指标。

  1. 打开 Instana 用户界面,然后单击 “基础设施 ”。 然后,点击 “分析基础设施 ”。
  2. 从实体类型列表中选择 OTEL Dcgm
  3. 单击 OTEL Dcgm 实体类型的实例,以打开相关的仪表板。

GPU度量值

指标 描述
DCGM_FI_DEV_GPU_TEMP GPU 温度(摄氏度)
DCGM_FI_DEV_POWER_USAGE 功耗(瓦特)
DCGM_FI_DEV_GPU_UTIL GPU利用率百分比
DCGM_FI_DEV_MEM_COPY_UTIL 内存复制引擎利用率
DCGM_FI_DEV_FB_USED 已使用的帧缓冲区内存
DCGM_FI_DEV_FB_FREE 可用帧缓冲区内存
DCGM_FI_DEV_SM_CLOCK 流式多处理器时钟频率
DCGM_FI_DEV_MEM_CLOCK GPU 内存时钟频率