当显示的点数超过 Prometheus 时,Grafana 分辨率的工作原理

我每 30 秒用 Prometheus 抓取一次指标。当我签入普罗米修斯图表时:

elasticsearch_jvm_memory_max_bytes{}[2m]

我可以看到有 4 个值的范围向量:

2095185920 @1626523484.001
2095185920 @1626523514.001
2095185920 @1626523544.001
2095185920 @1626523574.001

这是有道理的,*30s 4 个值 = 2m。当我在 Grafana 中运行相同的命令时,我可以每隔 15s** 看到一次数据点: enter image description here

在上面的示例中,14:43:3014:43:4514:44:00 中有 3 个数据点。我可以通过查询分辨率 1/1 看到这一点。如果我将分辨率设置为 1/2,图形看起来很正常,每 30 秒有一个数据点。我在 grafana 中阅读了有关分辨率的信息,也许我没有正确低估,但我希望 1/1 应该是来自普罗米修斯的每 1 个数据点在面板中的一个点。 1/2 应该在面板中每 2 个来自普罗米修斯的数据点显示 1 个点,等等......有人可以解释一下,我错过了什么或为什么 grafana 会这样工作(举个例子)?

格拉法纳:v7.3.6

谢谢你。

stack overflow How Grafana resolution works when showing more points than Prometheus have
原文答案

答案:

作者头像

当 Grafana 需要点来构建图形时,它会向 Prometheus 的 /api/v1/query_range 端点发送请求。 Grafana 将以下参数发送到端点:

  • query - 要执行的 PromQL 查询
  • startend - 图表的时间范围
  • step - 图上点之间的间隔

此端点始终返回带有时间戳 startstart+stepstart+2*step 、...、 start+N*step 的点,其中 start+N*step <= end 。 Prometheus 根据每个此类时间戳独立执行提供的 query 。显然,存储在 Prometheus 中的真实样本可能会在请求的时间戳处丢失。这就是 Prometheus 返回具有最接近时间戳的样本值的原因。有关详细信息,请参阅 these docs