【发布时间】:2020-06-16 13:08:51
【问题描述】:
我正在使用 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
但是,我知道这是非常低效且成本高昂的,因为它会检索大量剩余数据,尽管我只对每个单独时间序列的最后一个值感兴趣。另一方面,如果我使用即时查询,我只会获取指定时刻的值,因此我需要进行多个查询并首先找出某些时间序列(红色圆圈)何时被标记为过时 - 这不会t 似乎也不错。
所以,基本上我正在寻找一种方法来解决Prometheus basics on staleness,并阻止陈旧的时间序列“消失”:
如果在采样时间戳前 5 分钟未找到样本(默认情况下),则此时不会为该时间序列返回任何值。这实际上意味着时间序列在其最新收集的样本超过 5 分钟或被标记为过时之后从图表中“消失”。
我几乎可以肯定有一种方法可以做到这一点(例如,可以选择简单地包含陈旧的时间序列),但到目前为止我还无法将它们放在一起。
【问题讨论】:
标签: kubernetes prometheus promql