2

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

这是所发生情况的图表(此计数器有 3 个标签,导致 >50 个标签组合)

普罗米修斯图

此计数器跟踪的当前所有时间总计为 13.8 年,为期 4 天,但自从计数器重置后,我的单一统计指标在 24 小时内为 -20 年(使用差异)或 35 年(使用范围)。如果您不考虑计数器重置,这并没有错,因为 diff 和 range 将查看 min/max/first/current 值,但它不再是一个有用的指标。

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

单统计面板公式如下所示

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

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

4

1 回答 1

1

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

在 Prometheus 中处理计数器重置的方式是使用rate()or,如果你想要一个绝对值increase()。因此,您编写查询的方式(假设您希望计数器的总和一直增加)是:

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

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

可能比这更有用(并且随着时间的推移会摆脱您“昨天”经历的峰值)是显示您的计数器在更短的时间范围内的变化率图表:

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

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

于 2019-05-07T07:46:42.567 回答