Grafana-大计数器重置后的单一统计

时间:2019-04-30 20:13:23

标签: grafana prometheus promql

我们使用Grafana + Prometheus来监视我们的基础架构,最近我们添加了一些以业务为中心的指标,而我一直无法跟踪我们所跟踪的计数器之一。这是一个会话时间计数器。基本上,每次会话结束时,我们都会根据用户在该会话中花费的时间来增加该计数器。因此,如果用户使用该软件花费2m,则计数器将增加120000 ms。几天以来,这种方法工作得很好,但是从昨天开始,当我们在一个实例计数器与其余实例之间存在很大差异时,由于重新启动了部分服务,该大计数器被重置,我无法获得有意义的单一统计面板。

以下是发生的情况的图表(该计数器具有3个标签,导致> 50个标签组合)

Prometheus graph

此计数器跟踪的当前所有时间总计为13.8年,为期4天,但是自从计数器重置以来,我的单个统计数据指标一直为-20年(使用差异)或35年(使用范围) 24小时内。如果您不考虑计数器重置,这不会出错,因为diff和range会查看最小值/最大值/第一个/当前值,但这已不再是有用的指标。​​

如果我将时间范围设置为不包括计数器重置,则Diff和Range都将显示非常接近预期值的值(我们的用法非常线性且可预测)。

singlestat面板公式如下

sum(dyno_app_music_total_user_listen_time{server=~"[[server]]", clusterId=~"[[clusterid]]"})

如何处理计数器中的单稳态指标重置?

1 个答案:

答案 0 :(得分:0)

我不确定我是否完全理解您的问题,但是如果我不得不总结一下我所理解的是,您有一个带有3个标签的指标(导致50个不同的时间序列),并且您想显示一个将所有结果汇总的singlestat面板这些计数器在所有时间都在一起。

在Prometheus中处理计数器重置的方法是使用rate(),或者在需要绝对值increase()的情况下。因此,您编写查询的方式(假设您希望一直增加计数器的总和)是

sum(increase(dyno_app_music_total_user_listen_time{...}[100y]))

但是请注意,随着时间的推移,速度会越来越慢,因为Prometheus必须在执行计算之前一直返回并加载您的50个时间序列。 (以至于加载的样本数量将超过Prometheus中配置的限制或可用内存量。)

可能更有用的是(随着时间的流逝,您会摆脱“昨天”经历的高峰),而是显示一段较短时间内的计数器变化率图表:

sum(rate(dyno_app_music_total_user_listen_time{...}[1h]))

这将向您显示(您可以选择)在图表上显示的任何时间范围内,前一个小时的平均会话次数(近似值)。