跳转到文档内容
版本:下一个

Grafana 仪表盘

HAMi 提供 Grafana Dashboard,用于展示集群 GPU 容量、资源分配、物理 GPU 使用情况和容器 vGPU 用量。NVIDIA GPU 的硬件指标可通过 DCGM Exporter 接入。

HAMi Grafana Dashboard 中的集群容量、资源分配、工作负载和 NVIDIA 硬件遥测指标

查看完整 Dashboard 截图。

兼容性​

组件要求
HAMiv2.10.0 及以上版本
Grafana9.x 及以上版本
Prometheus同时采集 scheduler 和 vGPU monitor 指标端点
DCGM可选,仅 NVIDIA 硬件遥测区域需要

配置 Prometheus​

Dashboard 从两个 HAMi 组件读取指标:

组件v2.10.0 默认 NodePort指标
hami-scheduler31993容量、分配、共享情况和设备清单
各节点上的 vGPU monitor31992物理 GPU 和每个容器的 vGPU 实时用量

HAMi v2.10.0 默认将两个监控 Service 配置为 NodePort。检查 scheduler 和 vGPU monitor 端点是否可访问:

curl http://<kubernetes-node-ip>:31993/metrics
curl http://<kubernetes-node-ip>:31992/metrics

Prometheus Operator​

集群已安装 Prometheus Operator 时,启用 HAMi Helm Chart 自带的 ServiceMonitor:

helm upgrade --install hami hami-charts/hami \
--namespace kube-system \
--set prometheus.enabled=true

Chart 会分别为 hami-scheduler 和 vGPU monitor 创建 ServiceMonitor。Helm 渲染 Chart 前,集群中必须存在 monitoring.coreos.com/v1/ServiceMonitor CRD。vGPU monitor 的 ServiceMonitor 还要求 devicePlugin.enabled 处于开启状态。

确认 Prometheus 的 serviceMonitorSelector 和 namespace selector 能够匹配两个资源。prometheus.enabled=true 只创建 ServiceMonitor,不会安装 Prometheus 或 Prometheus Operator。

不使用 Prometheus Operator​

使用 Kubernetes 服务发现采集所有 HAMi endpoint。以下示例假设 HAMi 安装在 kube-system。如果设置了 namespaceOverride,需要修改对应的 namespace。

scrape_configs:
- job_name: hami
kubernetes_sd_configs:
- role: endpoints
namespaces:
names:
- kube-system
relabel_configs:
- source_labels:
- __meta_kubernetes_service_label_app_kubernetes_io_component
regex: hami-(scheduler|device-plugin)
action: keep
- source_labels:
- __meta_kubernetes_endpoint_port_name
regex: monitor(port)?
action: keep

Prometheus 需要具备通过 Kubernetes API 发现 Service 和 Endpoint 的 RBAC 权限。

导入 Dashboard​

  1. 下载 gpu-dashboard.json。
  2. 在 Grafana 中进入 Dashboards > New > Import。
  3. 上传 JSON 文件。
  4. 选择包含 HAMi 指标的 Prometheus 数据源,然后点击 Import。

通过 Grafana API 导入:

curl -sS -X POST "${GRAFANA_URL}/api/dashboards/db" \
-H "Authorization: Bearer ${GRAFANA_TOKEN}" \
-H "Content-Type: application/json" \
-d "{\"dashboard\": $(cat gpu-dashboard.json), \"overwrite\": true}"

JSON 使用数据源变量,不绑定固定的 Prometheus UID。导入后选择对应的 Prometheus 数据源即可。

Dashboard 变量​

变量说明
Data sourcePrometheus 数据源
Node筛选物理 GPU 和调度面板,支持多选
Namespace筛选 vGPU 工作负载面板,支持多选

Dashboard 区域​

区域面板
Cluster overview物理 GPU 数量、总显存、已分配显存和共享容器数
Physical GPUs (host)实时显存和利用率,以及分配量与实际用量的对比
Scheduler / allocation设备上限、分配比例、共享情况和 GPU 清单
vGPU / container workloads每个容器的 vGPU 显存、上限和利用率
NVIDIA hardware telemetry (optional DCGM Exporter)XID 错误、温度、功耗和 SM 时钟频率

DCGM Exporter(可选)​

NVIDIA 硬件遥测区域需要以下 DCGM Exporter 指标:

  • DCGM_FI_DEV_XID_ERRORS
  • DCGM_FI_DEV_GPU_TEMP
  • DCGM_FI_DEV_POWER_USAGE
  • DCGM_FI_DEV_SM_CLOCK

查询使用 DCGM 的 UUID 标签匹配 HAMi 的 device_uuid 标签。

故障排查​

现象检查项
集群概览或 GPU 清单为空hami-scheduler 的 31993 采集目标
物理 GPU 面板为空是否发现全部 vGPU monitor Service endpoint
容器面板为空是否有 vGPU 工作负载正在运行,以及 Namespace 是否正确
Node 或 Namespace 无选项当前 Prometheus 数据源中是否包含对应标签
硬件遥测区域为空是否采集 DCGM Exporter,且指标中是否包含 UUID 标签

指标定义请参见集群设备分配和实时设备使用。

CNCFHAMi 是 CNCF 孵化项目