最近更新时间:2026-06-08 16:37:55
本文档以创建任务和子用户维度的监控看板为例,介绍星流通过 Grafana 看板对监控数据指标进行可视化展示的实践案例。
看板整体分为用户和任务两个维度,分别展示 GPU 利用率、GPU 显存、CPU 利用率、内存利用率,每项指标展示 last、mean、max 三项数据,支持按指标排序和按用户筛选,帮助识别资源利用率低的任务及其归属用户,以便及时清理、提高资源利用效率。
资源组已关联托管 Prometheus,具体操作可参考管理资源组-资源监控相关内容。
托管Prometheus已开通Grafana服务或将托管Prometheus的监控指标导入本地Grafana。
若非内网环境,则需开启相应外网访问。
导入本地Grafana JSON文件生成完整看板
手动逐一配置各项监控看板。
在 Grafana 中依次单击 Create > Import。
单击 Upload JSON file,选择本地保存的 JSON 看板文件并上传。
在面板编辑界面单击 Settings。
在左侧导航栏,找到 Variables,单击 New,新增一行变量。
设置变量名称Name,Query 填写以下内容后,点击Update。
label_values(kube_pod_labels, label_kaic_com_kaic_creator)该查询从 kube_pod_labels 指标中提取所有不同的 label_kaic_com_kaic_creator 标签值,生成下拉筛选选项。
添加完变量后,修改所有图表中的 PromQL,将上述变量以参数形式添加,使后续所有针对变量的操作与图表联动。修改方式为在 kube_pod_labels 过滤条件中增加 label_kaic_com_kaic_creator=~"$creator",完整语句如下:
avg by (label_kaic_com_kaic_creator) (
(sum by (namespace, pod) (
irate(container_cpu_usage_seconds_total{job="kubelet", metrics_path="/metrics/cadvisor", image!="", namespace="kaic-job"}[5m])
) * 100 / on(namespace, pod) group_left()
sum by (namespace, pod) (
kube_pod_container_resource_requests{job="kube-state-metrics", namespace="kaic-job", resource="cpu"}
))
* on(pod) group_left(label_kaic_com_kaic_creator)
kube_pod_labels{namespace="kaic-job", label_kaic_com_kaic_creator=~"$creator"}
)在图表编辑界面右上方,根据规划的方案选择合适的图表类型:
在左下角 Legend 中,使用双括号 {{ }} 添加需要展示的数据名称,作为图表图例。例如:
{{label_kaic_com_kaic_creator}}在右侧 Legend 菜单中,可以选择展示模式、位置和指标采集方式。以 Table + Right + Mean + Last + Max 为例:
在右侧 Standard options 菜单的 Unit 选项中,选择数据的展示模式。例如将数值修改为百分比格式并保留 2 位小数。
配置完成后,看板按用户和任务两个维度展示监控数据,每项指标包含 last、mean、max 三项统计值。
表格视图:汇总展示各用户/任务的 GPU 利用率、GPU 显存、CPU 利用率、内存利用率等指标,支持按任意指标列排序。
折线图视图:展示各指标随时间变化的趋势曲线。
顶部筛选器:支持按用户维度筛选,可单独或批量选择用户,图表数据实时联动更新。
通过以上配置,可以快速识别资源利用率较低的任务及其归属用户,及时进行资源回收与清理,提升集群资源利用效率。
以 CPU 利用率-用户指标为例,完整 PromQL 如下:
avg by (label_kaic_com_kaic_creator) (
(sum by (namespace, pod) (
irate(container_cpu_usage_seconds_total{job="kubelet", metrics_path="/metrics/cadvisor", image!="", namespace="kaic-job"}[5m])
) * 100 / on(namespace, pod) group_left()
sum by (namespace, pod) (
kube_pod_container_resource_requests{job="kube-state-metrics", namespace="kaic-job", resource="cpu"}
))
* on(pod) group_left(label_kaic_com_kaic_creator)
kube_pod_labels{namespace="kaic-job"}
)语句的步骤分解如下:
计算实际 CPU 使用量(记为 A)。
获取 CPU 请求量(记为 B)。
计算使用率:A * 100 / B。
关联创建者标签 label_kaic_com_kaic_creator。
按创建者聚合,求每个创建者的平均值。
关联按用户筛选变量 $creator。
各代码段的详细分析如下
sum by (namespace, pod) (
irate(
container_cpu_usage_seconds_total{
job="kubelet",
metrics_path="/metrics/cadvisor",
image!="",
namespace="kaic-job"
}[5m]
)
) * 100irate(container_cpu_usage_seconds_total...[5m]):计算过去 5 分钟内 CPU 使用时间的瞬时增长率。
sum by (namespace, pod):按命名空间和 Pod 聚合所有容器的 CPU 使用量。
*100:将结果转换为百分比形式。
/ on(namespace, pod) group_left()
sum by (namespace, pod) (
kube_pod_container_resource_requests{
job="kube-state-metrics",
namespace="kaic-job",
resource="cpu"
}
)kube_pod_container_resource_requests:获取 Pod 的 CPU 请求资源量。
sum by (namespace, pod):聚合每个 Pod 的总 CPU 请求。
/ on(namespace, pod) group_left():按 namespace 和 pod 进行除法运算,将使用率与请求量关联。
* on(pod) group_left(label_kaic_com_kaic_creator)
kube_pod_labels{
namespace="kaic-job",
label_kaic_com_kaic_creator=~"$creator"
}* on(pod):通过 Pod 名称进行关联(此处使用乘法运算符,实际作用是标签关联)。
group_left(label_kaic_com_kaic_creator):将创建者标签添加到结果中。
kube_pod_labels:获取 Pod 的标签信息。
label_kaic_com_kaic_creator=~"$creator":使用变量 $creator 过滤特定的创建者。
avg by (label_kaic_com_kaic_creator) ( ... )avg by (label_kaic_com_kaic_creator):按创建者标签对结果求平均值,得到每个用户的平均 CPU 利用率。
纯净模式
