在两个查询之间尝试使用group_left时出错
查询是:
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))
{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"})查询两个输出最大值
{node="gpu-m-08"}
{node="gpu-m-09"}
{node="gpu-m-12"}我只想在有问题的查询输出中看到节点标签。
顺便说一句,这是可行的(没有label_grid=true标签):
floor(avg_over_time(dcgm_gpu_utilization{cluster_name="researchers"}[5m]) * on (instance) group_left(nodename) node_uname_info)它将节点名添加到查询输出标签列表中。
主要目标是只看到带有标签label_grid="true“及其节点名称的度量标准。
发布于 2019-05-16 10:13:28
RHS没有instance标签,因此它试图将所有这些系列与LHS上的所有系列进行匹配。试试max by (node, instance) (kube_node_labels{label_grid="true"})
发布于 2022-04-14 09:44:26
group_left()修饰符期望*操作符(和任何其他操作符)的右侧只包含on()修饰符中指定的每个label=value集合的单个时间序列。否则,将返回duplicate series for the match group错误。有关更多详细信息,请参阅这些医生。
解决方案是在on()修饰符中指定适当的标签,因此这些标签的每个label=value集在*操作符的右侧只有一个时间序列。instance标签是放置在on()修饰符中的一个很好的候选。唯一的问题是,dcgm_gpu_utilization和kube_node_labels是从具有不同TCP端口号的不同目标中收集的。因此,它们有不同的instance标签值(参见这些医生解释如何生成instance标签)。这会破坏*运算符的*,因此以下查询没有返回任何内容:
floor(avg_over_time(dcgm_gpu_utilization{cluster_name="researchers"}[5m]))
* on (instance) group_left(node)
kube_node_labels{label_grid="true"}这可以通过使用instance函数从*操作符的两侧从替换标签中剥离端口号来解决:
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标签中,然后加入该标签上的左侧和右侧时间序列。
https://stackoverflow.com/questions/56162477
复制相似问题