计算两个指标符合条件的标签

Count labels for which two metrics meet criteria

我有来自 N 个主机的普罗米修斯指标,每个主机有两个不同的 component 作为标签:

my_status{host="H1", component="a"}
my_status{host="H1", component="b"}
my_status{host="H2", component="a"}
my_status{host="H2", component="b"}
...
my_status{host="HN", component="a"}
my_status{host="HN", component="b"}

my_status是0到2之间的整数。

我想计算有多少 host 的两个组件的 my_status 都是 2。

如何在 Grafana 中执行此操作?

任一组件 'a' 或 'b' 状态 == 2:

count(
  count by (host) (my_status{component=~"a|b"} == 2)
)

组件 'a' 和 'b' 状态 == 2:

count(
  count by (host) (my_status{component="a"} == 2 and my_status{component="b"} == 2)
)

内层查询统计了my_status个时间序列的个数,其中值为2,满足组件条件。结果按 host 分组,所以如果你 运行 它你会看到这样的东西:

{host="A"} 1
{host="B"} 2
{host="D"} 4

外层查询只是统计内层查询返回的的个数。由于每个主机只有一个值,它会为您提供符合条件的主机数。