You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

基于Prometheus的5分钟周期活跃用户数统计及Grafana可视化方案咨询

基于Prometheus的5分钟周期活跃用户数统计及Grafana可视化方案咨询

嘿,我明白你的需求了——要统计每5分钟窗口内有至少1次请求的活跃用户数,而且你已经试过count、count by这些函数没成功,别急,咱们来一步步解决这个问题。

首先,你的核心目标是找出过去5分钟内请求数有增长的用户,因为client_request_total是单调递增的计数器,只要某个用户的计数器在5分钟内有增量(哪怕只有1),就说明他这段时间内是活跃的。基于这个逻辑,我们可以用下面的PromQL来实现:

count by () (increase(client_request_total[5m]) > 0)

我来拆解下这个查询的作用:

  • increase(client_request_total[5m]):计算每个用户在过去5分钟内的请求增量,计数器的特性决定了这个值只会大于等于0;
  • > 0:过滤出增量大于0的用户,也就是这5分钟内有至少1次请求的活跃用户;
  • count by ():把所有符合条件的用户数聚合为一个总数值,by ()确保结果是单一的总数,而不是按用户id拆分的列表。

咱们用你给出的例子验证下:

  • 10:00时,查询过去5分钟(9:55-10:00)的增量,A和B的增量都大于0,所以count结果是2,完全符合你的预期;
  • 10:05时,A和B的请求数和10:00时一致,过去5分钟(10:00-10:05)的增量都是0,没有符合条件的用户,count结果是0,和你想要的一致;
  • 10:10时,A的增量是2,C和D是首次出现的用户(增量分别为4和6),都满足>0的条件,所以count结果是3,完美匹配你的需求。

另外,如果你想先单独查看每个活跃用户的状态,可以先运行这个查询:

increase(client_request_total[5m]) > 0

它会返回每个活跃用户的id和值1(PromQL中布尔值会转为1/0),再在此基础上count总数就是上面的最终查询。

至于Grafana的配置,把这个最终的PromQL粘贴到图表面板的查询框里,选择折线图或者柱状图就行。你可以根据需要调整图表的时间范围,因为查询用的是5分钟窗口,建议把图表的分辨率设置为1分钟或者5分钟,这样能更清晰地展示每个时间点的活跃用户数变化。

备注:内容来源于stack exchange,提问作者Rurka

火山引擎 最新活动