关于prometheus:PromQL-groupleftgroupright的使用和demo

PromQL中的group_left和group_right的操作函数,别离提供了Many2One和One2Many的语义,让2个不同的指标能够进行join。

残缺的语法模式:

<vector expr> <bin-op> ignoring(<label list>) group_left(<label list>) <vector expr>
<vector expr> <bin-op> ignoring(<label list>) group_right(<label list>) <vector expr>
<vector expr> <bin-op> on(<label list>) group_left(<label list>) <vector expr>
<vector expr> <bin-op> on(<label list>) group_right(<label list>) <vector expr>

官网的demo比拟难了解,这里提供一个比拟切合实际应用的demo。

2个输出指标:

  • kube_pod_spec_volumes_persistentvolumeclaims_info:标识pvc和pod的挂载信息;
  • kubelet_volume_stats_used_bytes / kubelet_volume_stats_capacity_bytes:标识pvc的使用量/总量信息;
kube_pod_spec_volumes_persistentvolumeclaims_info

kube_pod_spec_volumes_persistentvolumeclaims_info{__type__="gauge",instance="127.0.0.1:9999",job="pvc-test",namespace="default",persistentvolumeclaim="myclaim",pod="nginx-pv-1"}    1
kube_pod_spec_volumes_persistentvolumeclaims_info{__type__="gauge",instance="127.0.0.1:9999",job="pvc-test",namespace="default",persistentvolumeclaim="myclaim",pod="nginx-pv-2"}    1
kube_pod_spec_volumes_persistentvolumeclaims_info{__type__="gauge",instance="127.0.0.1:9999",job="pvc-test",namespace="default",persistentvolumeclaim="myclaim",pod="nginx-pv-3"}    1
kube_pod_spec_volumes_persistentvolumeclaims_info{__type__="gauge",instance="127.0.0.1:9999",job="pvc-test",namespace="default",persistentvolumeclaim="myclaim--2",pod="busybox-xxx"}    1
kube_pod_spec_volumes_persistentvolumeclaims_info{__type__="gauge",instance="127.0.0.1:9999",job="pvc-test",namespace="default",persistentvolumeclaim="myclaim--2",pod="busybox-yyy"}    1
kubelet_volume_stats_used_bytes / kubelet_volume_stats_capacity_bytes

{__type__="gauge",instance="127.0.0.1:9999",job="pvc-test",namespace="default",persistentvolumeclaim="myclaim"}    0.5
{__type__="gauge",instance="127.0.0.1:9999",job="pvc-test",namespace="default",persistentvolumeclaim="myclaim--2"}    0.25

指标:

  • 通过2个指标的join,失去每个pod及其挂载的pvc的使用率;

答案:

kube_pod_spec_volumes_persistentvolumeclaims_info + on(namespace,persistentvolumeclaim) group_left 100*(kubelet_volume_stats_used_bytes / kubelet_volume_stats_capacity_bytes)
  • 应用group_left实现了Many2One的语义;
  • 2个指标join时,以name和persistentvolumeclaim为维度;

后果:

{__type__="gauge",instance="127.0.0.1:9999",job="pvc-test",namespace="default",persistentvolumeclaim="myclaim",pod="nginx-pv-1"}    50
{__type__="gauge",instance="127.0.0.1:9999",job="pvc-test",namespace="default",persistentvolumeclaim="myclaim",pod="nginx-pv-2"}    50
{__type__="gauge",instance="127.0.0.1:9999",job="pvc-test",namespace="default",persistentvolumeclaim="myclaim",pod="nginx-pv-3"}    50
{__type__="gauge",instance="127.0.0.1:9999",job="pvc-test",namespace="default",persistentvolumeclaim="myclaim--2",pod="busybox-xxx"}    25
{__type__="gauge",instance="127.0.0.1:9999",job="pvc-test",namespace="default",persistentvolumeclaim="myclaim--2",pod="busybox-yyy"}    25

参考:
1.group_left/group_right官网doc:
https://prometheus.io/docs/pr…
2.prometheus中各种映射关系的实现:
https://iximiuz.com/en/posts/…

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理