prometheus 使用 HTTP API 查询的时候 step 应该如何计算,同时如何保证数据的准确性

5 小时 36 分钟前
 imherer

源数据是用Gauge记录的,记录方式是每 1 秒记录一条,现在想直接通过 prometheus 和 HTTP API 集成要自己的系统中。

因为 API 查询返回数据有数量限制( 11000 条),所以在查询 1 小时或 3 小时数据的时候 step=1 没问题,因为源数据是 1 秒产生一条,step=1 的时候相当于把源数据里的每一条数据都返回了(应该是这样的吧)。但是在查询更大时间范围的时候就需将 step 调大,调大之后就会丢弃掉一部分数据( prometheus 内部应该是这个意思吧,没去了解它的实现),这样就会导致查询出来的结果变化很大,比如我查询最近 7 天的数据,第一次查询一次的结果和过几秒在查的结果会变化很大(图表上能看到明显的变化)。

我现在 step 的计算方式是=(end-start)/11000

我在 Grafana 里看了下,它查询出来的结果却不变化(没仔细看数据结果有没有变化,但是但从图表上肉眼是看不到变化的),不知道它是怎么实现的。 实在不行把 Grafana 的页面嵌入到自己的系统里也行,但是 Grafana 能实现嵌入的页面在我们的系统里登录之后即可访问而不需要再登录一次 Grafana 吗?

另外这种统计是不是把 Gauge 换成 Histogram 然后统计 P95 之类的会更准确一些?

208 次点击
所在节点    程序员
3 条回复
picone
1 小时 34 分钟前
你需要的可能是明细数据? 你是不是在找 Clickhouse
imherer
1 小时 24 分钟前
@picone 想了一圈,感觉好像如果真的每一条数据都要的话,好像 prometheus 不行,还真得要 ch
DeadLion
11 分钟前
prometheus 定期去 exporter 拉数据,这个间隔是可配的,默认好像是 15s ,exporter 里的数据是不带时间戳的,我的理解这个时间戳就是 prometheus 去拉的时间

所以你的元数据虽然是 1s 一个,但是拉取的时候 15s 才拉一次,所以 prometheus 的 step 应该是 15s 。

要同步 1s 一个你需要去改下拉取间隔配置

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1098685

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX