Ami*_*mir 7 sum rate prometheus
我有一个普罗米修斯计数器,为此,我想它的速度上的时间范围(真正的目标是要总结的速度,有时使用histogram_quantile上的直方图指标)。
但是,我有多台机器运行这种作业,每台机器都设置了自己的实例标签。这会导致在不同机器上对该计数器的不同inc操作以创建计数器的不同实体,因为标签值的组合是唯一的。
问题是rate()在每个这样的计数器实体上单独工作。
结果是具有独特组合的计数器实体不会被考虑在内率()。
例如,如果我有:
mycounter{aaa="1",instance="1.2.3.4:6666",job="job1"} value: 1
mycounter{aaa="2",instance="1.2.3.4:6666",job="job1"} value: 1
mycounter{aaa="2",instance="1.2.3.4:7777",job="job1"} value: 1
mycounter{aaa="1",instance="5.5.5.5:6666",job="job1"} value: 1
Run Code Online (Sandbox Code Playgroud)
所有计数器实体都是唯一的,因此它们的值都是 1。
如果计数器标签总是唯一的(来自不同的机器),则rate(mycounter[5m])在这种情况下将获得值 0,并且sum(rate(mycounter[5m]) ]))会得到 0,这不是我需要的!
我想忽略实例标签,以便它引用这些 mycounter inc操作,因为它们是在同一个计数器实体上进行的。
换句话说,我希望只有 2 个实体(它们可以有一个共同的实例值或没有实例标签):
mycounter{aaa="1", job="job1"} value: 2
mycounter{aaa="2", job="job1"} value: 2
Run Code Online (Sandbox Code Playgroud)
在这种情况下,新机器中的inc操作(具有现有aaa值)将增加一些实体计数器而不是添加值为 1 的新实体,并且rate()将获得每个实体的实际费率,因此我们可以对它们进行sum()。我怎么做?
我做了几次尝试来解决它,但都失败了:
有什么建议?
普罗米修斯版本:2.3.2
提前致谢!
aaa如果其他标签(等)具有一组有限的可能组合,那么您最好在应用程序启动时将计数器公开为 0 。这样rate()函数就可以在底层正常工作,并sum()给出正确的结果。
如果您必须执行rate()其中一项sum(),请先阅读以下内容:
请注意,当
rate()与聚合运算符(例如sum())或随时间聚合的函数(任何以 结尾的函数_over_time)组合时,始终先取一个rate(),然后聚合。否则,rate()当您的目标重新启动时,无法检测到计数器重置。
如果您可以容忍这种情况(或者实例同时重置计数器),则有一种解决方法。定义记录规则为
record: job:mycounter:sum
expr: sum without(instance) (mycounter)
Run Code Online (Sandbox Code Playgroud)
然后这个表达式就起作用了:
sum(rate(job:mycounter:sum[5m]))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6632 次 |
| 最近记录: |