如何从普罗米修斯绘制每天的平均值
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 消费者推送到普罗米修斯