group_left将按照左侧指标的标签进行分组,而group_right将按照右侧指标的标签进行分组。例如,metric_name1 + metric_name2 on (label_name)将按照label_name标签对metric_name1和metric_name2进行分组。 使用ignoring子句:可以使用ignoring子句来忽略指定的标签进行分组。例如,sum(metric_name) by (label_name1) ...
group_left group_right 可以提供包含来自“一”侧的标签的标签列表,以包含在结果指标中。 多对一和一对多匹配是应谨慎考虑的高级用例。通常,适当使用ignoring()可以得到期望的结果。 分组修饰符只能用于比较和算术。逻辑和、unless和or操作与右向量中的所有可能条目默认匹配。 一对一向量匹配 一对一查找每一侧操作的...
group_left demo_num_cpus{job="demo"} 上面的表达式可以正常得到结果: 除了on()之外,还可以使用相反的ignoring()修饰符,可以用来将一些标签维度从二元运算操作匹配中忽略掉,如果在操作符的右侧有额外的维度,则应该使用group_right(表示右边的向量具有更高的基数)修饰符。 比如上面的查询语句同样可以用ignoring关键字...
解决办法:必须明确左侧还是右侧为多的⼀边,因此我们可以使⽤group_left 或group_right 来指明哪个是"多",然后进⾏匹配。 因此完整的PromQL查询如下: 使⽤ignoring(code)忽略左侧查询( http_requests_error_total )中的code标签。 使⽤ group_left 修饰符来确保它能够与标签较少的右侧进⾏匹配。 将匹配...
ignoring() group_right() on() group_left() on() group_right() 1. 2. 3. 4. 这个group带标签的修饰符标签列表包含了“一对多”中的“一”一侧的额外标签。对于on标签只能是这些列表中的一个。结果向量中的每一个时间序列数据都是唯一的。
由于node_cpu_seconds_total比node_memory_Active_bytes多了cpu和mode标签,所以node_cpu_seconds_total数量个数一般大于node_memory_Active_bytes个数,所以需要使用group_left,node_cpu_seconds_total + ignoring(cpu,mode) group_left node_memory_Active_bytes,结果集以左边的node_cpu_seconds_total个数为准,如果...
与算术和过滤二元运算符类似,这些集合运算符会尝试根据相同的标签集在左侧和右侧之间查找来匹配序列,除非你提供on()或ignoring()修饰符来指定如何找到匹配。 注意:与算术和过滤二进制运算符相比,集合运算符没有group_left和group_right修饰符,因为集合运算符总是进行多对多的匹配,也就是说,它们总是允许任何一边的序...
必须使用group_left或group_right明确指定哪侧为“多”侧; 匹配表达式语法: <vectorexpr> <bin-op> ignoring() group_left() <vectorexpr> <vectorexpr> <bin-op> ignoring() group_right() <vectorexpr> <vectorexpr> <bin-op> on() group_left() <vector...
method_code:http_errors:rate5m / ignoring(code) group_left method:http_requests:rate5m 在这种情况下,左向量每个方法标签值包含多个条目。因此,我们使用group_left来表示这一点。右边的元素现在与左边的多个具有相同方法标签的元素相匹配: {method="get", code="500"} 0.04 // 24 / 600{method="get", ...
那么,你可以通过在 on 或ignoring关键字后面添加 group_left 来保留所有来自左边的标签。当你这样做的时候,右边的值将被应用到每个与 on 的标签相匹配的左边的标签上。在实践中,这看起来像bicycle_speed_meters_per_second / on (gears) group_left bicycle_cadence_revolutions_per_minute。还有一个group_right,...