首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >你能用时间序列计算活跃用户吗?

你能用时间序列计算活跃用户吗?
EN

Stack Overflow用户
提问于 2019-04-07 04:55:23
回答 1查看 618关注 0票数 0

我的原子客户端公开了运行的命令的度量标准。每个命令都是一个指标,包含一个username元素和一个status元素。

几个月来,我一直在丢弃这些数据,而没有重新设置计数。

我的要求是显示一段时间内的活跃用户数。即Grafana中的1h1d7d30d

最初的查询是:

代码语言:javascript
复制
count(count({Username=~".+"}) by (Username))

这是一个问题,因为我没有清除指标,所以它从一开始就是一个计数。

然后我尝试了一下:

代码语言:javascript
复制
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个其他命令需要添加到该计数中。

我尝试了:

代码语言:javascript
复制
"{__name__=~".+_command",job="app name"}[1w] offset 1w"

但这显然是非常昂贵的(浏览器中的超时),并且在集成不支持它的max_over_time时存在问题。

有什么帮助吗,我是不是用错了度量方法。有没有更好的方法来查询...我目前唯一的选择是count (上面的格式适用于每个命令)

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2019-04-11 17:29:22

首先,我将指出您的方法中的一些问题。

首先,Prometheus文档建议不要对标签使用任意大的值集(就像您的用户名一样)。正如您所看到的(根据您对查询超时的经验),他们反对它并不是完全错误的。

其次,Prometheus可能不是正确的分析工具(例如活跃用户)。部分是由于上述原因,部分是因为它固有地受到采样指标的事实的限制(在您的情况下,这似乎不是问题,但可能最终会成为问题)。

第三,您收集每个命令的单独指标(即help_commandfoo_command),而不是以命令名称作为标签的单个指标(即command_usage{commmand="help"}command_usage{commmand="foo"})

不过,要返回到您的问题,您不需要max_over_time,您可以简单地将您的查询编写为:

代码语言:javascript
复制
count by(__name__)(
  (
    {__name__=~".+_command",job=“Application Name”}
      - 
    {__name__=~".+_command",job=“Application name”} offset 1w
  ) > 0
)

不过,这只会起作用,因为您说过,无论导出的是什么计数都不会重置它们。如果这仅仅是因为导出器从未重新启动,当它重新启动时计数将降为零,那么您将需要使用increase而不是减号,并且您将遇到与max_over_time完全相同的性能问题。

代码语言:javascript
复制
count by(__name__)(
  increase({__name__=~".+_command",job=“Application Name”}[1w]) > 0
)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55553402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档