PromCon 2017的会议介绍 – Prometheus 2.0中的数据陈旧问题
虽然时间已经过去了一点,但在八月份,专注于 Prometheus 的会议 PromCon 2017 在慕尼黑举行,Z Lab 的我和 @tkusumi 参加了这次会议。
在本文中,我打算介绍一下我从那里听到的会话中关于最近发布的 Prometheus 2.0 改进的 Staleness 处理的相关内容。
简而言之
发言人:Brian Brazil(Robust Perception)
视频:https://youtu.be/GcTzd2CLH7I
幻灯片:https://www.slideshare.net/brianbrazil/staleness-and-isolation-in-prometheus-20-promcon-2017
由 Prometheus 的核心开发人员兼 Prometheus 咨询公司 Robust Perception 的创始人就 Prometheus 2.0 中有关 Staleness 行为的变化举行的会议。
请注意:本文中所使用的所有图像都是在获得演讲者许可的情况下从上述幻灯片中引用的。
Here’s one possible paraphrase in Chinese:
具体表述
在Prometheus的上下文中,”staleness”是指忽略了已经失效的时间序列的机制,虽然它在直译成日语是”腐败”的意思。
在 Prometheus v1 中处理“数据陈旧性”

在 Prometheus v1 中,范围向量(range vector)和即时向量(instant vector)的查询结果如下所示。
范围向量: 对于类似于my_counter_total[10m]的查询,将返回从查询执行时间往前10分钟的所有数据点。
即时向量:对于像 my_counter_total 这样的查询,将返回离查询执行时间最近的数据点。但是,如果距离大于5m,则不返回任何数据点。
处理理想的陈旧程度

理想情况下,Staleness 应该被处理如下。
-
- 監視対象がいなくなったら, そこから取得していた time series を stale とする
v1 では上述した理由から 5m が経過するまで stale とならない
監視対象がメトリクスを返さなくなったら, その time series を stale とする
v1 では上述した理由から 5m が経過するまで stale とならない
過去の timestamp を持つメトリクスを expose したい
Pushgateway などで利用するため
より長い eval/scrape 間隔をサポートしたい
今回の改善の対象外
如何实现

我们试图通过将显示其过时状态的标记添加到每个数据点中来改善对staleness的处理。
如果是即时向量的情况下,如果最新的数据点有标记,那么会忽略该时间序列。
对于range vector,将排除带有标记的对象数据点集合。

在64位浮点数中,NaN(非数字)的小数部分被规定为非零值。通过将该小数部分指定为特定值,可以表示为带有stale(过时)标记的值。

通过引入这个记号笔,我们得到了以下的结果。
-
- 監視対象がいなくなったら, そこから取得していた time series を stale としたい
解決している
監視対象がメトリクスを返さなくなったら, その time series を stale としたい
解決している
過去の timestamp を持つメトリクスを expose したい (Pushgateway などで利用するため)
解決しなかった (明示的な timestamp を持つデータは staleness のサポート対象外)
より長い eval/scrape 間隔をサポートしたい
変化なし
整理

-
- 特別な NaN による stale マーカーの導入により, stale の取り扱いが改善されています
-
- マーカーは監視対象かその time series がなくなったときに挿入されます
-
- 明示的な timestamp とともに expose されたメトリクスでは staleness がサポートされません
- バックアップとして, 5m 間の lookback (v1 の staleness の取り扱い方) は適用されます