使用普罗米修斯计算最大值
Calculate Max in value with prometheus
由于我是prometheus-newbie不知道怎么表达这个问题:
“过去一天每秒处理的最大消息数是多少”。该指标名为 messages_in_total
我试过了
max_over_time(messages_in_total{}[1d])
- 但是这个 returns 计数器值的最大值
icrease(messages_in_total{}[1d])
- 但是这个returns计数器增加的数字
我真正需要的是(伪代码)
1.) 将包含绝对值 messages_in_total 的范围向量转换为具有每秒值的范围向量。
2.) 充分利用它
示例:
- 初始范围向量值 = (3000,4000, 7000, 8009)
- 调整后的范围向量值与每秒的速率(猜测值)= (40, 70, 40)
- max_value => 每秒处理 70 条消息
有什么想法吗?
有可能。
示例查询:
max_over_time(
irate( messages_in_total[2m] )[1d:1m]
)
这将:
- 过去 1 天
- 在 1 天范围内每 1 分钟执行一次
irate( messages_in_total[2m] )
- 将其合并到范围向量中
- 对所有结果调用 max_over_time
有关详细信息,请参阅 subquery documentation!
虽然 return 是 messages_in_total
指标在过去 24 小时内的最大 per-second 速率,但它存在以下潜在问题:
- 如果它们之间的间隔(aka
scrape_interval
)小于一分钟,它可能会跳过一部分原始样本。这可以通过减少冒号后方括号中的 step
值来解决,因此它不会超过 scrape_interval
.
- 如果抓取间隔超过2m(例如2分钟),可能return结果为空或结果不完整。这可以通过将内部方括号中的 lookbehind window 从
2m
增加到超过 2x scrape_interval
. 的值来解决
- 由于 subquery 的开销,它可能会变得非常慢并且需要资源。
- 子查询很容易mis-use,所以它们会默默地return出乎意料的结果。
虽然 Prometheus 没有为这些问题提供可靠且易于使用的解决方案,但其他 Prometheus-like 系统可能有解决方案。例如,以下 MetricsQL 查询 returns 过去 24 小时 messages_in_total
时间序列的最大值、最小值和平均值 per-second 增长率:
rollup_rate(messages_in_total[1d])
它使用了rollup_rate函数。
如果您只需要最大 per-second 速率,则可以将查询包装到 label_match 函数中,只留下带有 rollup="max"
标签的时间序列:
label_match(
rollup_rate(messages_in_total[1d]),
"rollup", "max"
)
由于我是prometheus-newbie不知道怎么表达这个问题:
“过去一天每秒处理的最大消息数是多少”。该指标名为 messages_in_total
我试过了
max_over_time(messages_in_total{}[1d])
- 但是这个 returns 计数器值的最大值icrease(messages_in_total{}[1d])
- 但是这个returns计数器增加的数字
我真正需要的是(伪代码)
1.) 将包含绝对值 messages_in_total 的范围向量转换为具有每秒值的范围向量。
2.) 充分利用它
示例:
- 初始范围向量值 = (3000,4000, 7000, 8009)
- 调整后的范围向量值与每秒的速率(猜测值)= (40, 70, 40)
- max_value => 每秒处理 70 条消息
有什么想法吗?
有可能。
示例查询:
max_over_time(
irate( messages_in_total[2m] )[1d:1m]
)
这将:
- 过去 1 天
- 在 1 天范围内每 1 分钟执行一次
irate( messages_in_total[2m] )
- 将其合并到范围向量中
- 对所有结果调用 max_over_time
有关详细信息,请参阅 subquery documentation!
虽然 messages_in_total
指标在过去 24 小时内的最大 per-second 速率,但它存在以下潜在问题:
- 如果它们之间的间隔(aka
scrape_interval
)小于一分钟,它可能会跳过一部分原始样本。这可以通过减少冒号后方括号中的step
值来解决,因此它不会超过scrape_interval
. - 如果抓取间隔超过2m(例如2分钟),可能return结果为空或结果不完整。这可以通过将内部方括号中的 lookbehind window 从
2m
增加到超过 2xscrape_interval
. 的值来解决
- 由于 subquery 的开销,它可能会变得非常慢并且需要资源。
- 子查询很容易mis-use,所以它们会默默地return出乎意料的结果。
虽然 Prometheus 没有为这些问题提供可靠且易于使用的解决方案,但其他 Prometheus-like 系统可能有解决方案。例如,以下 MetricsQL 查询 returns 过去 24 小时 messages_in_total
时间序列的最大值、最小值和平均值 per-second 增长率:
rollup_rate(messages_in_total[1d])
它使用了rollup_rate函数。
如果您只需要最大 per-second 速率,则可以将查询包装到 label_match 函数中,只留下带有 rollup="max"
标签的时间序列:
label_match(
rollup_rate(messages_in_total[1d]),
"rollup", "max"
)