了解 Spring 引导执行器 `http.server.requests` 指标 MAX 属性

Understanding Spring Boot actuator `http.server.requests` metrics MAX attribute

谁能解释一下下面回复中的 MAX 统计数据指的是什么。我没有在任何地方看到它的记录。

localhost:8081/actuator/metrics/http.server.requests?tag=uri:/myControllerMethod

回复:

{  
   "name":"http.server.requests",
   "description":null,
   "baseUnit":"milliseconds",
   "measurements":[  
      {  
         "statistic":"COUNT",
         "value":13
      },
      {  
         "statistic":"TOTAL_TIME",
         "value":57.430899
      },
      {  
         "statistic":"MAX",
         "value":0
      }
   ],
   "availableTags":[  
      {  
         "tag":"exception",
         "values":[  
            "None"
         ]
      },
      {  
         "tag":"method",
         "values":[  
            "GET"
         ]
      },
      {  
         "tag":"outcome",
         "values":[  
            "SUCCESS"
         ]
      },
      {  
         "tag":"status",
         "values":[  
            "200"
         ]
      },
      {  
         "tag":"commonTag",
         "values":[  
            "somePrefix"
         ]
      }
   ]
}

您可以使用根 /actuator/metrics/http.server.requests 调用的响应中定义的 ?tag=url:{endpoint_tag} 查看各个指标。 measurements 值的详细信息是;

  • COUNT: 每秒呼叫速率。
  • TOTAL_TIME:记录的次数总和。以监控系统基本时间单位上报
  • MAX: The maximum amount recorded. When this represents a time, it is reported in the monitoring system's base unit of time.

给定 here, also here.


您看到的差异是由于计时器的存在。这意味着在一段时间后,当前定义的任何标记指标的 MAX 值都可以重置回 0。您可以向 /myControllerMethod 添加一些新调用,然后立即调用 /actuator/metrics/http.server.requests 以查看给定标签的非零 MAX 值吗?

这是因为为每个较小的周期获取 MAX 指标背后的想法。当您看到这些指标时,您将能够在很长一段时间内获得 MAX 个值的数组,而不是单个值。

您可以在 Micrometer 源代码中看到这一点。有一个 rotate() 方法专注于重置 MAX 值以创建上述行为。

您可以看到每次 poll() 调用都会调用它,每隔一段时间就会触发一次以收集指标。

  • MAX代表什么

MAX 表示执行端点所花费的最长时间。

针对 /user/asset/getAllAssets

的分析
COUNT  TOTAL_TIME  MAX
5      115         17
6      122         17  (Execution Time = 122 - 115 = 17)
7      131         17  (Execution Time = 131 - 122 = 17)
8      187         56  (Execution Time = 187 - 131 = 56)  
9      204         56  From Now MAX will be 56 (Execution Time = 204 - 187 = 17)  

  • 如果我们对特定端点的请求数量较少(或 1 个请求),MAX 是否会为 0?

特定端点的请求数量不影响 MAX (请参阅来自 Spring Boot Admin 的图片)


  • 当MAX为0时

设置值为0。当端点未被调用或执行一段时间时,Timer将MAX设置为0。这里大约计时器值为 2 分钟(120 秒)

DistributionStatisticConfig.expiry(Duration.ofMinutes(2)). 如果在到期时间或旋转时间之间没有请求,它将一些测量值设置为 0。


  • 我是如何确定计时器值的?

为此,我采集了 6 个样本(对同一个端点执行了 6 次)。为此,我确定了调用端点的时间与 MAX 设置回零的时间之间的 时间差


更新

Document 已更新。

NOTE:

  • Max for basic DistributionSummary implementations such as CumulativeDistributionSummary, StepDistributionSummary is a time window max (TimeWindowMax).

  • It means that its value is the maximum value during a time window.

  • If the time window ends, it'll be reset to 0 and a new time window starts again.

  • Time window size will be the step size of the meter registry unless expiry in DistributionStatisticConfig is set to other value explicitly.