为了账号安全,请及时绑定邮箱和手机立即绑定

Spring Boot Actuator - MAX 属性

Spring Boot Actuator - MAX 属性

慕桂英546537 2023-04-26 14:36:33
我正在使用 Spring Boot Actuator 依赖项来了解应用程序。为此,我使用了 Spring Boot Admin。客户端-服务器的配置工作正常。我必须测量将要执行的端点的计数、总时间、最大值。uri:/user/asset/getAllAssetsTOTAL_TIME: 831msMAX: 0ms uri:/user/getEmployee/{employeeId}TOTAL_TIME: 98msMAX: 0ms为什么 MAX (time) 为 0 而 TOTAL_TIME: 为 Xms当我执行概括形式时localhost:8889/actuator/metrics/http.server.requests我得到MAX 为 3.00..我也看到了生产就绪的特性,但找不到任何关于 MAX 是如何计算的或者它代表什么的描述注:随着request数量的增加,COUNT,TOTAL_TIME也在增加,但MAX有时会减少(详见Request 1,Request 2)请求 1:http.server.requests{        "name": "http.server.requests",        "description": null,        "baseUnit": "seconds",        "measurements": [            {                "statistic": "COUNT",                "value": 597            },            {                "statistic": "TOTAL_TIME",                "value": 144.9057076            },            {                "statistic": "MAX",                "value": 3.0002913            }        ],        "availableTags": [            {                "tag": "exception",                "values": [                    "None"                ]            },            {                "tag": "method",                "values": [                    "GET"                ]            },            {                "tag": "uri",                "values": [                    "/actuator/metrics/{requiredMetricName}",                    "/**/favicon.ico",                    "/actuator",                    "/user/getEmployee/{employeeId}",                    "/user/asset/getAllAssets",                    "/actuator/health",                    "/actuator/info",                    "/actuator/env/{toMatch}",                    "/actuator/metrics",                    "/**"                ]            },            {                "tag": "outcome",                "values": [                    "CLIENT_ERROR",                    "SUCCESS"                ]            },
查看完整描述

2 回答

?
慕工程0101907

TA贡献1887条经验 获得超5个赞

指标MAX是滚动最大值。所以它代表滚动窗口中的最大测量值。


例如,如果您要每分钟抓取一次指标:


          Total    Count   Max

Minute 1    100        1   100  

Minute 2    500      101    90

Minute 3   4500     1000    10

Minute 4   4500     1000     0

在第 1 分钟你有 1 个请求,总共 100 毫秒,所以平均持续时间是 100 毫秒,最慢的(最大)是 100 毫秒


在第 2 分钟,总数增加了 400(因为总数是累积的)并且计数增加了 100。因此平均值为 4 毫秒。然而,由于最大值为 90 毫秒,因此您知道虽然那一秒内的大部分请求都很快,但仍有一些请求较慢。


在第 3 分钟,您又收到了 899 个请求(计数),总数增加了 4000 毫秒。(4000/899 = ~4.4ms) 所以你的平均测量值为 4.4ms,最大值为 10ms。


所以 MAX 的目的是测量最差的离群值,以便您了解代码执行的一致性。


查看第 4 分钟,总数和计数没有增加,因为没有请求。因为没有请求,所以不可能有对 MAX 的“最慢”请求,这就是 MAX 为 0 的原因。


查看完整回答
反对 回复 2023-04-26
?
守着一只汪

TA贡献1872条经验 获得超3个赞

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

  • COUNT:每秒呼叫速率。

  • TOTAL_TIME:记录的总次数。以监控系统的基本时间单位上报

  • MAX:记录的最大数量。当这表示时间时,它以监控系统的基本时间单位报告。

既然给在这里,也在这里。


您看到的差异是由于计时器的存在。这意味着在一段时间后,任何标记指标的当前定义MAX值都可以重置为0. 您可以添加一些新调用,/user/asset/getAllAssets然后立即调用以查看给定标签的/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


  • 当 MAX 为 0 时

有一个定时器,它的值为 0。当端点没有被调用或执行一段时间时,定时器将 MAX 设置为 0。这里的定时器值近似为 2.30 分钟(150 秒)


  • 我如何确定定时器值?

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

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


MAX属性属于 Measurement使用的枚举统计(在 Measurement 中我们得到 COUNT、TOTAL_TIME、MAX)

公共静态最终统计MAX

记录的最大金额。当这表示时间时,它以监控系统的基本时间单位报告。


注意: 这是来自特定端点(此处)的指标的情况/actuator/metrics/http.server.requests?tag=uri:/user/asset/getAllAssets

对于广义度量actuator/metrics/http.server.requests

正如您从请求 1 和请求 2(有问题)中看到的那样,MAX 已减少(从 3.0002913 到 2.3612968),因此可能由于定时器,某些端点的 MAX 将被设置回 0。在我看来,MAX for/http.server.requests将与特定端点相同。(但可以肯定的是,对此进行调查)


查看完整回答
反对 回复 2023-04-26
  • 2 回答
  • 0 关注
  • 147 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信