V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
imherer
V2EX  ›  程序员

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

  •  
  •   imherer · 5 天前 · 497 次点击

    源数据是用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 之类的会更准确一些?

    4 条回复    2024-12-19 16:16:04 +08:00
    picone
        1
    picone  
       5 天前
    你需要的可能是明细数据? 你是不是在找 Clickhouse
    imherer
        2
    imherer  
    OP
       5 天前
    @picone 想了一圈,感觉好像如果真的每一条数据都要的话,好像 prometheus 不行,还真得要 ch
    DeadLion
        3
    DeadLion  
       5 天前
    prometheus 定期去 exporter 拉数据,这个间隔是可配的,默认好像是 15s ,exporter 里的数据是不带时间戳的,我的理解这个时间戳就是 prometheus 去拉的时间

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

    要同步 1s 一个你需要去改下拉取间隔配置
    imherer
        4
    imherer  
    OP
       5 天前
    @DeadLion 不是,和 prometheus 到 exporter 拉取间隔应该没关系。现在是从 prometheus 查询的时候单次最多只能返回 11000 条,如果单次查询的数据>11000 条了,就需要扩大 step 来丢弃掉部分数据
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3288 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 11:20 · PVG 19:20 · LAX 03:20 · JFK 06:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.