我想创建一个 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)计数/总和/增加的组合,但没有成功
要获取在某个时间范围内更改的时间序列的唯一标签数量,您可以使用
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)