group_left group_right 可以提供包含来自“一”侧的标签的标签列表,以包含在结果指标中。 多对一和一对多匹配是应谨慎考虑的高级用例。通常,适当使用ignoring()可以得到期望的结果。 分组修饰符只能用于比较和算术。逻辑和、unless和or操作与右向量中的所有可能条目默认匹配。 一对一向量匹配 一对一查找每一侧操作的...
/ ignoring(code) method:http_requests:rate5m ## result {method="get"}0.04//24/600 {method="post"}0.05//6/120 one to many, many to one 匹配 做指标运算时就要借助关键字 group_left 和 group_right 了。left、right指向高基数那一侧的向量。
这里必须直接指定两个修饰符group_left或者group_right, 左或者右决定了哪边的向量具有较高的子集: ignoring() group_left() ignoring() group_right() on() group_left() on() group_right() 这个group带标签的修饰符标签列表包含了“一对多”中的“一”一侧的额外标签。对于on标签只能是这些列表中的一个。
method_code:http_errors:rate5m / ignoring(code) group_left method:http_requests:rate5m 1. 该表达式中,左向量method_code:http_errors:rate5m包含两个标签method和code。而右向量method:http_requests:rate5m中只包含一个标签method,因此匹配时需要使用ignoring限定匹配的标签为code。 在限定匹配标签后,右向量中...
与算术和过滤二元运算符类似,这些集合运算符会尝试根据相同的标签集在左侧和右侧之间查找来匹配序列,除非你提供on()或ignoring()修饰符来指定如何找到匹配。 注意:与算术和过滤二进制运算符相比,集合运算符没有group_left和group_right修饰符,因为集合运算符总是进行多对多的匹配,也就是说,它们总是允许任何一边的序...
<vector expr> <bin-op> ignoring() group_left() <vector expr> <vector expr> <bin-op> ignoring() group_right() <vector expr> <vector expr> <bin-op> on() group_left() <vector expr> <vector expr> <bin-op> on() group_right() <vector expr> 1. 2. 3. ...
对于标量和向量之间的运算,PromQL提供了一套丰富的工具。例如,计算CPU使用量除以核心数时,需指定额外维度的匹配规则,使用on()或ignoring()修饰符进行操作。同时,集合运算符如并集、交集等,用于过滤或合并时间序列,这些操作遵循相同的标签集匹配原则。在直方图指标的处理中,Prometheus实现直方图指标的累加...
/ ignoring (verb, code) group_left sum (rate(apiserver_request_count[5m])) apiserver_request_latencies_bucket:由动词表示的延迟直方图。例如,要获得以毫秒为单位的第 90 个延迟分位数: (注意,le“less or equal”标签是特殊的,因为它设置了直方图桶间隔,参见 [Prometheus 直方图和摘要][promql- 直方图])...
而右向量method:http_requests:rate5m中只包含一个标签method,因此匹配时需要使用ignoring限定匹配的标签为code。 在限定匹配标签后,右向量中的元素可能匹配到多个左向量中的元素 因此该表达式的匹配模式为多对一,需要使用group修饰符group_left指定左向量具有更好的基数。
那么,你可以通过在 on 或ignoring关键字后面添加 group_left 来保留所有来自左边的标签。当你这样做的时候,右边的值将被应用到每个与 on 的标签相匹配的左边的标签上。在实践中,这看起来像bicycle_speed_meters_per_second / on (gears) group_left bicycle_cadence_revolutions_per_minute。还有一个group_right,...