Spring Boot Actuator - MAX 属性

我正在使用 Spring Boot Actuator 依赖项来了解应用程序。为此,我使用了 Spring Boot Admin。客户端-服务器的配置工作正常。我必须测量将要执行的端点的计数、总时间、最大值。


uri:/user/asset/getAllAssets

TOTAL_TIME: 831ms

MAX: 0ms 


uri:/user/getEmployee/{employeeId}

TOTAL_TIME: 98ms

MAX: 0ms

为什么 MAX (time) 为 0 而 TOTAL_TIME: 为 Xms

http://img.mukewang.com/6448c6a6000194b416310394.jpg

当我执行概括形式时

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"

                ]

            },



慕桂英546537
浏览 148回答 2
2回答

慕工程0101907

指标MAX是滚动最大值。所以它代表滚动窗口中的最大测量值。例如,如果您要每分钟抓取一次指标:          Total    Count   MaxMinute 1    100        1   100  Minute 2    500      101    90Minute 3   4500     1000    10Minute 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 的原因。

守着一只汪

您可以使用?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/getAllAssetsCOUNT  TOTAL_TIME  MAX5      115         176      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将与特定端点相同。(但可以肯定的是,对此进行调查)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java