【问题标题】:Understanding Spring Boot actuator `http.server.requests` metrics MAX attribute了解 Spring Boot 执行器`http.server.requests` 指标 MAX 属性
【发布时间】: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"
         ]
      }
   ]
}

【问题讨论】:

    标签: spring-boot spring-boot-actuator spring-micrometer


    【解决方案1】:

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

    • COUNT:每秒调用次数。
    • TOTAL_TIME:记录的时间总和。以监控系统的基本时间单位报告
    • 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 实现,例如CumulativeDistributionSummaryStepDistributionSummary,Max 是一个时间 窗口最大值 (TimeWindowMax)。

    • 表示其值为一个时间窗口内的最大值。

    • 如果时间窗口结束,它将被重置为 0,并重新开始一个新的时间窗口。

    • 除非DistributionStatisticConfig 中的到期时间设置为其他值,否则时间窗口大小将是仪表注册表的步长 明确的。

    【讨论】:

      猜你喜欢
      • 2019-01-01
      • 2020-06-06
      • 2018-11-29
      • 1970-01-01
      • 2015-07-04
      • 1970-01-01
      • 2018-11-16
      • 2021-11-12
      • 1970-01-01
      相关资源
      最近更新 更多