【问题标题】:how to aggregate prometheus counters during a specific time period如何在特定时间段内聚合普罗米修斯计数器
【发布时间】:2021-08-13 13:20:26
【问题描述】:

这是我的指标端点的样子:

app_ui_card_open{host="foo.bar.com",card_id="listing_tickets",username="smiller"} 2 app_ui_card_open{host="foo.bar.com",card_id="listing_companies",username="smiller"} 1 app_ui_card_open{host="foo.bar.com",card_id="listing_contacts",username="smiller"} 1

还有其他与其他用户名类似的行,但这些都是“smiller”username

我在过去一周才开始收集这些数据。我试图了解如何计算每个用户名的所有 app_ui_card_open 计数。

这是我想出的查询:

sum(increase(app_ui_card_open{instance="foo.bar.com"}[1y])) by (username)

但是,对于“smiller”用户名,生成的值仅为 1。我希望看到4 的值;自1y 以来,上面列出的所有这些指标的总和将包含整个数据集。

我的查询错了吗?即使数据集非常小,prometheus 是否只是在进行估算?

【问题讨论】:

    标签: prometheus promql


    【解决方案1】:

    使用increase,您将获得值在一段时间内增加了多少。在您的情况下,它们仅增加了 1。即:1 -> 1 -> 2。将sum_over_time 用作the docs say

    sum_over_time(range-vector):指定区间内所有值的总和。

    然后你按username分组

    sum(
        sum_over_time(app_ui_card_open{instance="foo.bar.com"}[1y])
    ) ​by (username)
    

    this demo 为例,以防您的查询不起作用。

    【讨论】:

    • 我理解描述sum_over_time 的词语,但不理解结果。此查询结果为“smiller”的53376
    • 您是否尝试在[1y] 使用不到 1 年?也许[10m]
    • 刚刚尝试过[10m],这仍然会产生不准确的数千个值。
    • 我认为您必须首先对sum_over_time(app_ui_card_open{instance="foo.bar.com"}[10s]) 进行推理,然后看看您将求和的值是多少。我认为他们不会只有112。可能还有很多。然后将其包装成sum() by()。我更新了演示查询以显示如何推理
    • 我不明白sum_over_time。即使我的指标端点返回相同的数据,我也可以每隔几秒刷新一次该查询并且值会增加。
    【解决方案2】:

    只需使用以下查询:

    sum by (username) (app_ui_card_open{host="foo.bar.com"})
    

    【讨论】:

    • 如何将时间范围合并到此查询中?就像只给我看过去[30m]
    • 您想知道当前计数器值的总和,还是想知道在给定时间内计数器增加了多少?
    • 我想知道增加。我希望能够回答“用户 X 在过去 6 小时内打开了多少张卡片?”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多