监控 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 后端。
- Instana OpenTelemetry Collector( IDOT )发行版: IDOT 是一个预配置且经过优化的发行版,可简化 GPU 监控的配置过程。 如需了解更多信息,请访问 IDOT 并了解“ OpenTelemetry ”项目。
- 开源的 OpenTelemetry 收集器: OpenTelemetry 收集器是 OpenTelemetry 生态系统的核心组件,提供与供应商无关的遥测数据收集、处理和导出功能。 请将其用于自定义部署,或 IDOT 不可用的环境。 如需了解更多信息,请参阅 OpenTelemetry Collector。
Instana 支持以下型号的GPU数据采集:
- 代理模型:在此模式下,GPU 数据首先发送至 Instana 代理,该代理负责聚合数据并将其发送至 Instana 后端。
- 无代理模型:在此模式下,GPU数据会直接发送至 Instana 后端,无需经过代理。
将遥测数据转发至 Instana 代理(代理模式)
- 以下代码片段展示了 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。
- 使用 DCGM Exporter
- 在
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 后端,请执行以下步骤:
创建一个名为 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 端口。
- 请在
- 在
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 指标。
- 打开 Instana 用户界面,然后单击 “基础设施 ”。 然后,点击 “分析基础设施 ”。
- 从实体类型列表中选择 OTEL Dcgm。
- 单击 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 | 内存时钟频率 |