Prometheus云原生监控:运维与开发实战
上QQ阅读APP看书,第一时间看更新

4.2.2 瞬时向量选择器

瞬时向量选择器用于返回在指定时间戳之前查询到的最新样本的瞬时向量,也就是包含0个或者多个时间序列的列表。在最简单的形式中,可以仅指定指标的名称,如http_requests_total,这将生成包含此指标名称的所有时间序列的元素的瞬时向量。我们可以通过在大括号{}中添加一组匹配的标签来进一步过滤这些时间序列,如http_requests_total{job="helloWorld",group="middleware"}。

瞬时向量并不希望获取过时的数据,这里需要注意的是,在Prometheus 1.x和2.x版本中是有区别的。

在Prometheus 1.x中会返回在查询时间之前不超过5分钟的时间序列,这种方式还是能满足大多数场景的需求的。但是如果在第一次查询,如http_requests_total{job="helloWorld"}这个5分钟的时间窗口内增加一个label,如http_requests_total{job="hello-World",group="middleware"},之后再重新进行一次瞬时查询,那么就会重复计数。这是一个问题。

Prometheus 2.x是这么处理上述问题的:它会像汽车雨刮器一样刮擦,如果一个时间序列从一个刮擦到另一个,或者Prometheus的服务发现不再能找到当前target,陈旧的标记就会被添加到时间序列之中。这时使用瞬时向量过滤器,除需要找到满足匹配条件的时间序列之外,还需要考虑查询求值时间之前5分钟内的最新样本。如果样本是正常样本,那么它将在瞬时向量中返回;但如果是过期的标记,那么该时间序列将不出现在瞬时向量中。需要注意的是,如果你使用了Prometheus Exporter来暴露时间戳,那么过期的标记和Prometheus 2.x对过期标记的处理逻辑就会失效,受影响的时间序列会继续和5分钟以前的旧逻辑一起执行。

而我们4.2.3节中要介绍的区间向量选择器,就不受过期标记的影响,用户会获得在给定时间区间内所有的正常样本。区间向量选择器也不会返回该范围内任何过期的标记。