我正在使用Golang HTTP服务器中的HistogramVec通过Prometheus记录和监视Kubernetes Pod的SLO(服务器端请求持续时间)。每个请求的持续时间都会按照Prometheus practices中的说明进行计时和持久化,并按状态代码,方法和HTTP路径进行划分。
我正在运行自动缩放实验,因此Pod已创建并终止。每次实验后,我都会获取所有Pod(包括已删除的Pod)的指标,并绘制一个累积分布,例如: 为了使这些图更“准确”,我选择了许多较小的直方图存储桶,并在本地汇总和分析数据,并且不使用内置的Histogram Quantiles。 因此,理想查询将只返回指定时间范围(绿色+红色圆圈)中存在的所有时间序列的最新值。 目前,我正在脚本中使用range query来生成所有图,例如:
http://localhost:9090/api/v1/query_range?query=http_request_duration_milliseconds_bucket{path="/service/login"}&start=1591803898&end=1591804801&step=5s
但是,尽管我只对每个时间序列的最后一个值感兴趣,但我知道这样做效率极低且成本很高,因为它会检索大量的剩余数据。另一方面,如果我使用即时查询,则只会获取指定时刻的值,因此,我需要进行多次查询并首先找出将某些时间序列(红色圆圈)标记为陈旧的时间-但这不是看起来也很棒。
因此,基本上,我正在寻找一种解决Prometheus basics on staleness的方法,以防止过时的时间序列从“消失”中消失:
如果在采样时间戳记之前5分钟未找到样本(默认情况下),则在该时间点该时间序列将不返回任何值。这实际上意味着,在最新采集的样本超过5分钟或标记为陈旧之后,时间序列会从图表中“消失”。
我几乎可以肯定,有一种方法可以做到这一点(例如,可以选择仅包含陈旧的时间序列),但是到目前为止,我还无法将其组合在一起。
答案 0 :(得分:0)
找到了一种在this thread中输入以及增加lookbackDelta
QuerySpec option的方法。
现在拍摄诸如
的查询http://localhost:9090/api/v1/query?query=max_over_time(http_request_duration_milliseconds_bucket{path="/service/login",le="101"}[2h])
返回所需结果: