Prometheus + Grafana-图形数据偏移2分钟?

时间:2018-10-26 23:31:52

标签: grafana prometheus

我每隔 _getListData() { List<Widget> widgets = []; for (int i = 0; i < 100; i++) { widgets.add(Padding( padding: EdgeInsets.all(10.0), child: Column( children: <Widget>[ Expanded( child: Container(), ), FlatButton( onPressed: () => {}, color: Colors.orange, padding: EdgeInsets.all(10.0), child: Column( // Replace with a Row for horizontal icon + text children: <Widget>[Icon(Icons.add), Text("Add")], )), ], ))); } return widgets; } 从我的API服务器上抓取一次请求延迟的直方图。

然后我将直方图可视化为Grafana中的热图。看起来像这样:

histogram of request latencies

我的查询是:

1m

我了解要执行的操作是:在相关时间取存储桶矢量,并在1分钟前减去存储桶矢量,以获取该分钟的存储桶矢量(直方图会累积,并且每次刮擦时都不会清除其存储桶)< / p>

但是问题是,查看我的请求日志,我看到了:

sum(http_request_duration_seconds_bucket) by (le) 
- 
sum(http_request_duration_seconds_bucket offset 1m) by (le)

如您所见,第一次出现“ Inf”运行时请求是在 13:56 中,但是如果我们查看直方图,直到 13:58

为什么数据要偏移2分钟?

2 个答案:

答案 0 :(得分:0)

编辑面板时,

Grafana具有查询检查器按钮。您可以使用它来查看Prometheus返回的确切响应,并确定是Grafana还是Prometheus(或两者)引入了这种转变。

在Prometheus端我可以看到这种情况的一个可能原因是抓取分辨率。如果您每分钟仅抓取一次,则可能最多需要一分钟才能看到增加(平均延迟为原来的一半)。此外,如果您已经记录了处理抓取数据的规则,并且正在显示所述记录的规则的结果,那么这也会增加延迟。

因此,在1分钟的刮擦间隔和1分钟的评估间隔内,您可以看到0到2分钟之间的任何变化(甚至在考虑由于目标速度慢和/或Prometheus实例过载造成的抖动之前)。

编辑:几乎忘了,您也很想使用increase / rate而不是减法,以便更好地处理实例重启。 (不幸的是,increase / rate会使指标偏离与范围除以抓取间隔成比例的数量,并且会丢失一些样本,但是您必须选择毒药。)

答案 1 :(得分:0)

我想我可以解释这个延迟。有两个方面的作用:

  • 我错误地认为普罗米修斯保留了单个事件的时间戳。取而代之的是,在刮擦发生的那一刻收集直方图中的数据,并将数据标记为在此刻出现。

  • 我忘记了我自己的仪器的详细信息-我在请求完成后立即使用Prometheus客户端库将数据点添加到直方图指标(以及怎么回事?其他方式?我们想知道延迟!)

因此,如果在请求返回的那一刻(此点后超过30秒),将13:57:15(第一个长期运行的请求)的请求数据添加到直方图中,请在{{ 1}},然后抓取时间为:[{13:56:1013:57:1013:58:10],然后在13:56:18开始 的请求最终成为13:58抓图的一部分。