Prometheus - 查询以显示随时间变化的连接用户数量

问题描述 投票:0回答:1

我想创建一个 Grafana 图表,显示一段时间内连接/活跃用户的数量。

我的端点将此指标公开给 Prometheus :

# Number of requests by userId
client_request_total{id="CkGe6t6JAD"} 65
client_request_total{id="ey7ECByJhr"} 3
client_request_total{id="ZhqNK297L1"} 6
client_request_total{id="rp6aUjB14I"} 3
client_request_total{id="OmrMoAVNoY"} 3
client_request_total{id="BNgmELRDE7"} 4`

就我而言,如果用户在 5 分钟内执行了至少 1 个请求,则被视为活跃用户。

例如,这里有 2 条剪贴画

at 10:00:
client_request_total{id="A"} 6
client_request_total{id="B"} 3

at 10:05:
client_request_total{id="A"} 6
client_request_total{id="B"} 3

at 10:10
client_request_total{id="A"} 8
client_request_total{id="B"} 3
client_request_total{id="C"} 4
client_request_total{id="D"} 6

在此示例中,在 10:05,用户 A 和 C 处于活动状态,B 处于非活动状态。

所以我希望能够创建一个图表,显示 10:00 这是我想在图表中可视化的内容:

10:00 => 2 active users
10:05 => 0 active users
10:10 => 3 active users

对于潜在的基数问题,在我的上下文中,用户数量将少于 100 个。

您有任何建议的解决方案吗?

提前谢谢您。

我正在尝试计数/按(id)计数/总和/增加的组合,但没有成功

prometheus grafana promql
1个回答
0
投票

要获取在某个时间范围内更改的时间序列的唯一标签数量,您可以使用

count(group by(label) (changes(metric[range])>0))
施工。

这里:

  • changes(metric[range])>0
    获取给定时间范围内指标的变化次数,并过滤掉那些没有变化的,
  • group by(label) (...)
    对于内部查询中存在的每个唯一
    label
    值返回 1
  • 顶级
    count
    只是计算内部结果的数量。由于使用了
    group
    ,因此也可以替换为
    sum

因此,对于这个确切的情况查询将是

count(group by (id) (changes(client_request_total[5m])>0))

请注意,像

changes
increase
这样的函数仅适用于“初始化”指标,因此从无到有的初始更改 ->
client_request_total{id="C"}
将不会被计算在内。
如果必须,请将
changes(client_request_total[5m])>0
替换为
changes(client_request_total[5m])>0 or (client_request_total unless client_request_total offset 5m)

© www.soinside.com 2019 - 2024. All rights reserved.