我有 2 个不同的指标: metric_a 具有字段类型 metric_b 具有字段类型(相同)
我试图总结同一类型的 a 和 b。如果类型仅存在于 metric_a 而不是 metric_b - 它应该返回 metric_b 的结果。我在普罗米修斯上尝试了很多选项:
sum by (type)(metric_a{job=~"provision-dev"}) or vector(0) + sum by(type)(metric_b{job=~"provision-dev"}) or vector(0):仅返回metric_a的值,不计算metric_b的结果。
sum by (type)(metric_a{job=~"provision-dev"}) + sum by(type)(metric_b{job=~"provision-dev"}):仅返回 metric_b 的值,不计算 metric_a 的结果。
sum by (cluster_id)(provision_scale_out_failures{job=~"provision-dev"} + provision_scale_out_success{job=~"provision-dev"}):这甚至不是一个正确的查询
基本上这是一个成功的例子:
指标_a:
指标_b:
查询结果:
Mic*_*bez 15
这是使用二元运算符时的预期行为:双方都必须具有要考虑的匹配标签集。
如果您希望能够聚合两侧并获得单个,您首先必须 使用标签获得不同指标的并集__name__:
sum by(__name__,type)(metric_a{job=~"provision-dev"}) or on(__name__) sum by(__name__,type)(metric_b{job=~"provision-dev"})
Run Code Online (Sandbox Code Playgroud)
您可以级联聚合运算符:
sum by (type) (sum by (__name__,type)(metric_a{job=~"provision-dev"}) or on(__name__) sum by(__name__,type)(metric_b{job=~"provision-dev"}))
Run Code Online (Sandbox Code Playgroud)
最后,您还可以将所有内容压缩为:
sum by (type) ({__name__=~"metric_a|metric_b",job=~"provision-dev"})
Run Code Online (Sandbox Code Playgroud)
以下 PromQL 查询应 summetric_a和metric_bby type:
(sum(metric_a) by (type) + sum(metric_b) by (type))
or
(sum(metric_a) by (type) unless sum(metric_b) by (type))
or
(sum(metric_b) by (type) unless sum(metric_a) by (type))
Run Code Online (Sandbox Code Playgroud)
怎么运行的:
sum(metric_a) by (type) + sum(metric_b) by (type)匹配的时间序列相加type+sum(metric_a) by (type) unless sum(metric_b) by (type)中缺少标签值sum(metric_a) by (type)的结果。请参阅有关运算符的文档。typesum(metric_b) by (type)unlesssum(metric_b) by (type) unless sum(metric_a) by (type)中缺少标签值sum(metric_a) by (type)的结果。typesum(metric_a) by (type)然后将这三个查询的结果与or运算符连接起来。
该查询相当于 Michael 提出的查询:sum({__name__=~"metric_a|metric_b"}) by (type)。
PS 使用MetricsQL时可以进一步简化此查询:
sum(metric_a, metric_b) by (type)
Run Code Online (Sandbox Code Playgroud)
此查询有效,因为MetricsQL 中的sum()函数接受任意数量的参数并对其求和。
| 归档时间: |
|
| 查看次数: |
39612 次 |
| 最近记录: |