在普罗米修斯中划分两个指标

use*_*430 8 prometheus

我有两个指标,是从 telegraf 中抄来的。

第一个指标

vsphere_host_mem_active_average{esxhostname=~"esx1"}

给出一个值

vsphere_host_mem_active_average{clustername="BCH1",collector="telegraf",dcname="DC",esxhostname="esx1",host="vm01",hostname="hostname1",instance="localhost:9273",job="vSphere",moid="host-78563",source="esx1",type="vmware",vcenter="vmc"}    17763152
Run Code Online (Sandbox Code Playgroud)

第二个

vsphere_vm_mem_granted_average{esxhostname=~"esx1"})

给出了几个具有不同标签的

1.

vsphere_vm_mem_granted_average{clustername="BCH1",dcname="DC",esxhostname="esx1",guest="debian9_64",host="vm01",moid="vm-79139",source="vm01",uuid="42244f7b-abeb-92be-3e67-af19a9d8dfbd",vcenter="vmc",vmname="vm01"} 4.19418e+06
Run Code Online (Sandbox Code Playgroud)

2.

vsphere_vm_mem_granted_average{clustername="BCH1",dcname="DC",esxhostname="esx1",guest="debian9_64",host="vm01",moid="vm-79146",source="vm01",uuid="4224ed0c-f306-202c-fc99-35e48fe52370",vcenter="vmc",vmname="vm02"} 8.377904e+06
Run Code Online (Sandbox Code Playgroud)

是否有可能获得每个标签集的第一个值除以第二个值的结果?

val*_*ala 16

Prometheus 对每对时间序列分别应用算术运算符,例如/-、 、+*并在运算符两侧使用相同的标签集(忽略指标名称)。如果不存在具有相同标签的时间序列对,则 Prometheus 不会返回任何内容。请参阅这些文档以了解更多详细信息。可以通过应用on()ignoring()group_left()修饰符来增强此行为group_right()- 请参阅这些文档

因此,如果您需要将单个时间序列除以具有不同标签集的另外​​两个时间序列,则以下 PromQL 查询应该有效:

vsphere_host_mem_active_average{esxhostname=~"esx1"}
  / on() group_right()
vsphere_vm_mem_granted_average{esxhostname=~"esx1"}
Run Code Online (Sandbox Code Playgroud)

修饰符on()指示 Prometheus 将标签集限制为空集,标签集用于查找运算符左侧和右侧具有相同标签的时间序列/对。修饰符处的空列表on()会自动将运算符左侧的任何时间序列/与运算符右侧的任何时间序列进行匹配/

group_right()修饰符指示 Prometheus 将运算符左侧的单个时间序列/分别划分为运算符右侧的每个时间序列/。生成的时间序列包含右侧时间序列的标签。可以通过在修饰符内枚举它们来将左侧时间序列的其他标签添加到结果中group_right()


Nic*_*ely 1

也许我没有完全正确地解释这个问题,但是如果您想将两个指标分开,您只需在 PromQL 中使用“/”运算符,记录如下:https ://prometheus.io/docs/prometheus/latest/querying /运营商/

作为使用上述值的示例,您将使用的查询类似于:

(vsphere_host_mem_active_average{clustername="BCH1",collector="telegraf",dcname="DC",esxhostname="esx1",host="vm01",hostname="hostname1",instance="localhost:9273",job="vSphere",moid="host-78563",source="esx1",type="vmware",vcenter="vmc"}/vsphere_vm_mem_granted_average{clustername="BCH1",dcname="DC",esxhostname="esx1",guest="debian9_64",host="vm01",moid="vm-79139",source="vm01",uuid="42244f7b-abeb-92be-3e67-af19a9d8dfbd",vcenter="vmc",vmname="vm01"})
Run Code Online (Sandbox Code Playgroud)

  • 我认为这个问题更具体地询问如何在提前知道所有可能的标签值的情况下执行此操作。 (2认同)