首页 > 解决方案 > 将具有不同结果的两个聚合相加并保留所有

问题描述

我想创建一个所有服务器的列表并按团队聚合它们。如果我使用单个指标执行此操作,这很容易:

对于 Linux:count(node_uname_info) by (team)
和 Windows:count(wmi_os_info) by (team)

但是现在我想将这两个查询聚合为一个,因为我想按团队计算服务器总数。

通常我会这样做:
count(node_uname_info) by (team) + count(wmi_os_info) by (team)

但现在我只得到同时拥有 Linux 和 Windows 服务器的团队。
如果一个值不存在,有没有办法假设它为零?

我尝试过的查询:

count(node_uname_info) by (team) + count(wmi_os_info) by (team)
count(node_uname_info) by (team) + (count(wmi_os_info) by (team) > 0)
count(node_uname_info) by (team) + on(team) count(wmi_os_info) by (team)

谢谢!

标签: prometheuspromql

解决方案


如有关二元运算符的文档中所述,不匹配的元素不是结果的一部分:

在两个即时向量之间,将二进制算术运算符应用于左侧向量中的每个条目及其右侧向量中的匹配元素[...] 右侧向量中没有匹配条目的条目发现不是结果的一部分。

__name__但是您可以使用内部标签选择多个指标(请参阅选择器)并将其应用于count结果向量:

count({__name__=~"node_uname_info|wmi_os_info"}) by (team)

推荐阅读