我试图根据过去 24 小时内的登录次数绘制出排名前 5 位的用户。但是当我使用下面的topk函数时,我得到了该时间范围内的所有用户登录。
询问:
topk(10, sum(my_app_login) by (User_Name) != 0)
如何将其限制为仅前 10 名?
首先,您需要在Grafana中启用即时查询。在这种情况下,Grafana 将仅返回每个结果时间序列所选时间范围上的最后一个数据点,而不是返回所选时间范围内每个时间序列的许多数据点。
其他考虑因素:
my_app_login是一个计数器,那么以下查询应返回过去 24 小时内登录操作次数最多的用户:topk(10, sum(increase(my_app_login[24h])) by (User_Name))
Run Code Online (Sandbox Code Playgroud)
请注意,即使my_app_login仅包含整数值,Prometheus 也可能会从此查询返回小数结果。这是因为increase()Prometheus 中的函数的数据模型怪癖 -有关详细信息,请参阅此评论和本文。如果您需要精确的整数结果,请查看VictoriaMetrics 的 MetricsQL。
my_app_login是一个gauge,其中包含自上一个示例以来的应用程序登录次数,则以下查询应该有效:topk(10, sum(sum_over_time(my_app_login[24h])) by (User_Name))
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请参阅sum_over_time() 文档。
请注意,当topk(N, ...)N函数用于构建随时间变化的图表(又名范围查询)时,该函数可能返回的不仅仅是时间序列。N这是因为它根据图表上的每个时间戳独立返回顶部时间序列。如果您只需要N图表上的顶部时间序列,请查看topk_max、topk_last和topk_*MetricsQL 中的其他函数。
| 归档时间: |
|
| 查看次数: |
9697 次 |
| 最近记录: |