【问题标题】:Single stat after big counter reset大计数器重置后的单一统计
【发布时间】:2019-04-30 20:13:22
【问题描述】:

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

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

Prometheus graph

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

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

singlestat 面板公式如下所示

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

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

【问题讨论】:

    标签: grafana prometheus promql


    【解决方案1】:

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

    在 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]))
    

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

    【讨论】:

      猜你喜欢
      • 2017-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-07
      • 1970-01-01
      相关资源
      最近更新 更多