我的atomist客户端公开了运行命令的指标。每个命令都是带有用户名元素和状态元素的度量标准。
我几个月来一直在废弃这些数据,而没有重置计数。
我的要求是显示一段时间内的活动用户数。即1h
,1d
,7d
和30d
在Grafana中。
原始查询是:
count(count({Username=~".+"}) by (Username))
这是一个问题,因为我没有清除指标,因此自创建以来一直是计数。
然后我尝试了这个:
count(max_over_time(help_command{job=“Application
Name”,Username=~“.+“}[1w]) -
max_over_time(help_command{job=“Application name”,Username=~“.+“}[1w]
offset 1w) > 0)
这有效,但仅对一个命令有效,我还有大约50个其他命令需要添加到该计数中。
我尝试了:
"{__name__=~".+_command",job="app name"}[1w] offset 1w"
,但这显然非常昂贵(浏览器超时),并且集成了不支持它的max_over_time
时出现问题。
任何帮助,我是否以错误的方式使用该指标。有没有更好的查询方法...目前,我唯一的选择是count
(每个命令的格式都在上面)
谢谢。
答案 0 :(得分:0)
首先,我将指出您的方法存在的一些问题。
首先,Prometheus文档建议不要对标签使用任意大的值集(因为您的用户名是)。如您所见(基于查询超时的经验),建议这样做并非完全错误。
第二,Prometheus可能不是正确的分析工具(例如活跃用户)。部分是由于上述原因,部分是因为它固有地受到以下事实的限制:它对指标进行采样(在您看来,这似乎不是问题,但可能会成为事实)。
第三,您为每个命令(即help_command
,foo_command
)收集单独的指标,而不是以命令名称作为标签的单个指标(即command_usage{commmand="help"}
,command_usage{commmand="foo"}
)
但是要回到您的问题,您不需要max_over_time
,只需将查询写为:
count by(__name__)(
(
{__name__=~".+_command",job=“Application Name”}
-
{__name__=~".+_command",job=“Application name”} offset 1w
) > 0
)
这仅能工作,因为您说无论导出什么计数都不会重置它们。如果仅仅是因为该出口商从未重启过,并且当计数将下降到零时,那么您将需要使用increase
而不是减号,并且会遇到与{{ 1}}。
max_over_time