如何从普罗米修斯绘制每天的平均值

Posted

技术标签:

【中文标题】如何从普罗米修斯绘制每天的平均值【英文标题】:How to plot average per day from Prometheus 【发布时间】:2021-09-16 17:50:58 【问题描述】:

我必须根据 Prometheus 指标创建可视化。我有一个计数器指标http_request_counter,我想显示一天内服务的总请求数的摘要。当我们使用石墨作为数据源时,我就是这样做的。

alias(summarize(sumSeries(consolidateBy(nonNegativeDerivative(http_request_counter.count), 'sum')), '1d', 'sum', false), 'TPS per day')

我看到很少的文档并尝试使用increase(http_requests_total[24h]),它使用t-24h 值绘制图表。

有人可以帮我在 prometheus 中找到与 summarize 等效的函数吗?

【问题讨论】:

你的指标是什么类型的?是计数器、量规还是其他什么东西? @MarcABOUCHACRA - 这是一个计数器。 【参考方案1】:

我仍然不确定您是想要每天的总请求数还是每天的平均请求数,这是后者的表达式:

avg_over_time(
  sum(rate(http_request_counter[5m])) by (method, some_other_label)[1d]
)

由于它是一个计数器,因此您需要应用 rate 来获得每秒向量,然后在需要时使用 sum 在某些标签上跨多个系列进行聚合,最后平均超过一天。

【讨论】:

我需要每天的总请求数。【参考方案2】:

您需要sum(increase(http_requests_total[24h]))。它返回最近 24 小时内图表上每个点的请求总数。默认情况下,Grafana 从 Prometheus 查询许多点,以便为图形的当前水平分辨率绘制平滑图形。在 Grafana 中编辑图形时,可以使用 min step 选项调整图形上的点数。另一种选择是将subqueries 与外部查询的所需步骤一起使用:

last_over_time(sum(increase(http_requests_total[24h]))[1d:1d])

它将以一天的步骤返回连续行。这些步骤将在过去一天移动,例如当天的步骤将包含前一天提出的请求数。这种转变可以用否定的offset 移除:

last_over_time(sum(increase(http_requests_total[1d] offset -1d))[1d:1d])

不幸的是,这个查询在 Prometheus 中不能开箱即用,因为它默认不接受负偏移量。他们must be enabled with --enable-feature=promql-negative-offset command-line flag when starting Prometheus。幸运的是,MetricsQL 默认支持负偏移量。

【讨论】:

以上是关于如何从普罗米修斯绘制每天的平均值的主要内容,如果未能解决你的问题,请参考以下文章

普罗米修斯的故事

如何从普罗米修斯警报中标记松弛通道中的用户

如何使用 JMX 导出器将 JMX 指标从 Kafka 消费者推送到普罗米修斯

如何让普罗米修斯 webflux r2dbc 在春天一起工作?当我尝试从服务运行实际 api 时,它给了我错误

Grafana 仪表板显示从普罗米修斯删除的信息

普罗米修斯“负”偏移