我正在阅读千分尺的概念文档,但我无法理解速率聚合部分。
特别是这个图,它对应于客户端聚合。
文档内容如下:
Micrometer 通过累积当前发布间隔数据的步长值来有效维护速率数据。当轮询步长值时(例如,发布时),如果步长值检测到当前间隔已过,则会将当前数据移动到“先前”状态。先前的状态将被报告,直到下一次当前数据覆盖它为止。下图显示了当前状态和先前状态的交互以及轮询:
根据我的理解,步长值是将指标发送到监控系统(例如石墨)的时间间隔。那么当前间隔是什么意思?它与步长值有何不同?
Micrometer 在不同注册表的情况下以不同方式聚合这些值。有步骤(也称为增量)和累积聚合风格。
累积基本上是推/拉时的运行总计,但步骤/增量基本上是自上一步以来的差异。
“步长值”基本上是您记录和累积的值(例如:您将计数器递增 5 次,您的步长值为 5)。 “步数间隔”是步数边界之间的时间,或者您可以说步数的长度(例如:1 分钟)。
当发布发生时,将发布的值是上一步中累积的值(除非应用程序关闭,然后发布当前步骤),让我对此进行说明(归功于Tommy Ludwig)。传说如下:
-
标志着时间的流逝
|
标记步骤边界
p
标记出版物
s
标记 MeterRegistry 上调用 start 的时间
S1/S2
表示自开始以来的顺序步骤间隔
S1 S2 S3 S4 S5
|------s---|---p------|------p---|-----p----|---p------|---
发布时 (
p
),将发布基于上一步间隔期间记录的值的指标。因此 p
中的 S4
会发布 S3
中记录的累积数据。
上面的引用试图解释,当您跨越步骤边界时,您到目前为止记录的数据将被移动到
previous
变量,并且 current
将递增。
假设我们现在已接近
S2
的末尾,并且到目前为止您已将计数器增加了 5 次。时间流逝,没有任何行动,现在我们处于S3
。然后再次增加计数器。 Micrometer 中的机制将检测到您现在处于不同的步骤(越过步骤边界,您就处于 S3
中)。因此,它不会增加属于上一步的值 (5
),而是将其“保存”在 previous
变量中,重置 current
并增加它。此后,previous
应为 5,current
应为 1。然后时间向前推进,previous
数据将被发布并重置,而 current
保持不变。
这个解释有道理吗?