我已经开始使用 Prometheus / Grafana。我有一些来自 Kubernetes 集群的数据想要通过仪表板进行显示。特别是对于持久卷声明,我想显示表或类似表中的当前可用空间。
这个指标本身并不存在。但是,我可以使用此查询获取总容量:
px_volume_fs_capacity_bytes{}
这将返回具有以下结构的值列表:
px_volume_fs_capacity_bytes{app_kubernetes_io_instance="redis",app_kubernetes_io_name="redis",cluster="px-cluster-6b616c47-4d56-414c-9638-c95dcde99d4c",clusterUUID="52eff814-17e0-485e-b312-4be39d4e386f",endpoint="px-api",exported_namespace="database",instance="192.168.2.9:9001",job="portworx-service",namespace="portworx",node="kubenode02",nodeID="dfd4576e-185c-48c3-9542-8724319de0ac",pod="px-cluster-6b616c47-4d56-414c-9638-c95dcde99d4c-m988d",priority_io="high",pvc="redis-data-redis-master-0",repl="1",service="portworx-service",volumeid="777692050373571690",volumename="pvc-6de4deb8-19ac-4340-be43-2769b733dc89",app_kubernetes_io_component="master"}
每个持久卷都有一个这样的条目。我也可以对使用的字节执行相同的操作。我想要做的是这样的:
for each $persistent_volume_name (px_volume_fs_used_bytes/px_volume_fs_capacity_bytes)
请注意,标签值 pvc 存在于两个数据集中,因此我希望将其用作它们之间的查找。
然后我会得到这样的桌子:
体积标签 | 可用空间 (MB) |
---|---|
persist_vol_label01 | 500MB |
persist_vol_label02 | 100MB |
persist_vol_label03 | 200MB |
我当然可以为每个项目制作一个盒子,但我希望制作一个动态视图。
Prometheus 会自动执行“foreach”。
因此,如果您保证在两个指标中标签
volumename
是唯一的,并且同时出现在两个指标中,则可以简单地使用查询
px_volume_fs_used_bytes
/ on(volumename)
px_volume_fs_capacity_bytes
它将把所有
px_volume_fs_used_bytes
匹配适当的px_volume_fs_capacity_bytes
(与标签volumename
的值相同)并返回除法结果。