首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Prometheus中使用group_left时出错

在Prometheus中使用group_left时出错
EN

Stack Overflow用户
提问于 2019-05-16 06:54:52
回答 2查看 10.4K关注 0票数 6

在两个查询之间尝试使用group_left时出错

查询是:

代码语言:javascript
复制
floor(avg_over_time(dcgm_gpu_utilization{cluster_name="researchers"}[5m]) * on (instance) group_left(node) max by (node) (kube_node_labels{label_grid="true"}))

它显示了这个错误:

执行查询错误:在操作的右侧找到匹配组{}的重复序列:{node="gpu-m-08"},{node=“gpu-l-03”};不允许多对多匹配:匹配标签必须是唯一的。

查询一个输出floor(avg_over_time(dcgm_gpu_utilization{cluster_name="researchers"}5m))

代码语言:javascript
复制
{app="prometheus-node-exporter",chart="prometheus-node-exporter-1.3.0",cluster_name="researchers",gpu="0",heritage="Tiller",instance="172.21.4.101:9100",job="kubernetes-service-endpoints",kubernetes_name="prometheus-node-exporter",kubernetes_namespace="monitoring",release="prometheus-node-exporter",uuid="GPU-92e6ebf6-2b2d-c041-7f70-e16812c0ffa0"}

通过(节点) (kube_node_labels{label_grid="true"})查询两个输出最大值

代码语言:javascript
复制
{node="gpu-m-08"}
{node="gpu-m-09"}
{node="gpu-m-12"}

我只想在有问题的查询输出中看到节点标签。

顺便说一句,这是可行的(没有label_grid=true标签):

代码语言:javascript
复制
floor(avg_over_time(dcgm_gpu_utilization{cluster_name="researchers"}[5m])  * on (instance) group_left(nodename) node_uname_info)

它将节点名添加到查询输出标签列表中。

主要目标是只看到带有标签label_grid="true“及其节点名称的度量标准。

EN

回答 2

Stack Overflow用户

发布于 2019-05-16 10:13:28

RHS没有instance标签,因此它试图将所有这些系列与LHS上的所有系列进行匹配。试试max by (node, instance) (kube_node_labels{label_grid="true"})

票数 2
EN

Stack Overflow用户

发布于 2022-04-14 09:44:26

group_left()修饰符期望*操作符(和任何其他操作符)的右侧只包含on()修饰符中指定的每个label=value集合的单个时间序列。否则,将返回duplicate series for the match group错误。有关更多详细信息,请参阅这些医生

解决方案是在on()修饰符中指定适当的标签,因此这些标签的每个label=value集在*操作符的右侧只有一个时间序列。instance标签是放置在on()修饰符中的一个很好的候选。唯一的问题是,dcgm_gpu_utilizationkube_node_labels是从具有不同TCP端口号的不同目标中收集的。因此,它们有不同的instance标签值(参见这些医生解释如何生成instance标签)。这会破坏*运算符的*,因此以下查询没有返回任何内容:

代码语言:javascript
复制
floor(avg_over_time(dcgm_gpu_utilization{cluster_name="researchers"}[5m]))
  * on (instance) group_left(node)
kube_node_labels{label_grid="true"}

这可以通过使用instance函数从*操作符的两侧从替换标签中剥离端口号来解决:

代码语言:javascript
复制
label_replace(
  floor(avg_over_time(dcgm_gpu_utilization{cluster_name="researchers"}[5m])),
  "hostname",
  "$1",
  "instance",
  "([^:]+):.+"
)
  * on (hostname) group_left(node)
label_replace(
  kube_node_labels{label_grid="true"},
  "hostname",
  "$1",
  "instance",
  "([^:]+):.+"
)

此查询从instance标签中提取主机名部分,将其放入hostname标签中,然后加入该标签上的左侧和右侧时间序列。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56162477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档