了解 Spring Boot 执行器`http.server.requests` 指标 MAX 属性
Posted
技术标签:
【中文标题】了解 Spring Boot 执行器`http.server.requests` 指标 MAX 属性【英文标题】:Understanding Spring Boot actuator `http.server.requests` metrics MAX attribute 【发布时间】:2019-11-22 01:03:14 【问题描述】:有人可以解释以下响应中的 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"
]
]
【问题讨论】:
【参考方案1】:您可以使用根/actuator/metrics/http.server.requests
调用响应中定义的?tag=url:endpoint_tag
查看各个指标。 measurements
值的详细信息是;
MAX:记录的最大金额。当这表示一个时间时,它以监控系统的基本时间单位报告。
如给定here,也是here。
您看到的差异是由于存在计时器造成的。这意味着在当前为任何标记指标定义的MAX
值一段时间后可以重置回0
。您能否向/myControllerMethod
添加一些新调用,然后立即调用/actuator/metrics/http.server.requests
以查看给定标签的非零MAX
值?
这是由于为每个较小的周期获取 MAX
指标背后的想法。当您看到这些指标时,您将能够获得一组MAX
值,而不是很长一段时间内的单个值。
您可以在 Micrometer 源代码中看到这一点。有一个 rotate()
方法专注于重置 MAX
值以创建上述行为。
您可以看到每个poll()
调用都会调用它,每隔一段时间就会触发一次以收集指标。
【讨论】:
在我的情况下,MAX
始终等于零,与调用端点的次数无关。
@RahulGupta 自您上次调用端点以来有多近?您可以在调用端点后检查MAX
的值吗?打电话时还要确认COUNT
的变化,也许你用错误的标签调用/metrics/http.server.requests
端点?
是的,我也试过了......但这也没有任何改变。
@RahulGupta 这很奇怪,我在端点上进行了测试,行为是这样的,在上次通话后的一段时间后,MAX
转到0
... 你确定@当你打电话时,987654344@ 会增加,但MAX
保持0
?
我遇到了问题,因为我在控制器方法上自定义了 @Timed
。我没有研究过/metrics/http.server.requests
端点,而是在自定义指标端点上,出现了MAX
的问题。当我禁用自定义端点时,我看到 MAX
按预期工作。知道需要做什么才能使MAX
处理自定义的“@Timed”注释吗?【参考方案2】:
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 时
有 Timer 将值设置为 0。当端点没有被调用或执行一段时间 Timer 将 MAX 设置为 0。这里 近似的计时器值是 2 分钟(120秒)
DistributionStatisticConfig 有.expiry(Duration.ofMinutes(2)).
如果在到期时间或轮换时间之间没有提出请求,则将一些测量值设置为 0。
如何确定计时器值?
为此,我采集了 6 个样本(在同一端点执行了 6 次)。为此,我已经确定了调用端点时间之间的时间差 - MAX 设置回零的时间
More Details
更新
Document 已更新。
注意:
对于基本的
DistributionSummary
实现,例如CumulativeDistributionSummary
、StepDistributionSummary
,Max 是一个时间 窗口最大值 (TimeWindowMax
)。表示其值为一个时间窗口内的最大值。
如果时间窗口结束,它将被重置为 0,并重新开始一个新的时间窗口。
除非
DistributionStatisticConfig
中的到期时间设置为其他值,否则时间窗口大小将是仪表注册表的步长 明确的。
【讨论】:
以上是关于了解 Spring Boot 执行器`http.server.requests` 指标 MAX 属性的主要内容,如果未能解决你的问题,请参考以下文章
译:在 Spring Boot 中使用 Spring AOP 和 AspectJ 来测量方法的执行时间