Spring Boot 执行器 - MAX 属性

Pat*_*mil 8 java spring spring-boot spring-boot-actuator spring-boot-admin

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

uri:/user/asset/getAllAssets
TOTAL_TIME: 831ms
MAX: 0ms 

uri:/user/getEmployee/{employeeId}
TOTAL_TIME: 98ms
MAX: 0ms
Run Code Online (Sandbox Code Playgroud)

为什么MAX(时间)是0而TOTAL_TIME:是Xms

Spring Boot 管理镜像

当我执行泛化形式时

localhost:8889/actuator/metrics/http.server.requests我得到的MAX 为 3.00..

我还看到了生产就绪功能,但找不到任何有关 MAX 是如何计算或它代表什么的描述

注:随着请求数量的增加,COUNT、TOTAL_TIME 也会增加,但 MAX 有时会减少(具体参见请求 1、请求 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"
                ]
            },
            {
                "tag": "status",
                "values": [
                    "404",
                    "200"
                ]
            }
        ]
    }
Run Code Online (Sandbox Code Playgroud)

更新

localhost:8889/actuator/metrics/http.server.requests?tag=uri:/user/getEmployee/2

响应404 (我在请求执行器之前已经执行了/user/getEmployee/2)


localhost:8889/actuator/metrics/http.server.requests?tag=uri:/user/getEmployee/{employeeId}

回复 400


localhost:8889/actuator/metrics/http.server.requests?tag=uri:/user/asset/getAllAssets

{
    "name": "http.server.requests",
    "description": null,
    "baseUnit": "seconds",
    "measurements": [
        {
            "statistic": "COUNT",
            "value": 1
        },
        {
            "statistic": "TOTAL_TIME",
            "value": 0.8311609
        },
        {
            "statistic": "MAX",
            "value": 0
        }
    ],
    "availableTags": [
        {
            "tag": "exception",
            "values": [
                "None"
            ]
        },
        {
            "tag": "method",
            "values": [
                "GET"
            ]
        },
        {
            "tag": "outcome",
            "values": [
                "SUCCESS"
            ]
        },
        {
            "tag": "status",
            "values": [
                "200"
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

请求2:http.server.requests

localhost:8889/actuator/metrics/http.server.requests

{
    "name": "http.server.requests",
    "description": null,
    "baseUnit": "seconds",
    "measurements": [
        {
            "statistic": "COUNT",
            "value": 3346
        },
        {
            "statistic": "TOTAL_TIME",
            "value": 559.7992767999998
        },
        {
            "statistic": "MAX",
            "value": 2.3612968
        }
    ],
Run Code Online (Sandbox Code Playgroud)

che*_*tts 11

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

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

          Total    Count   Max
Minute 1    100        1   100  
Minute 2    500      101    90
Minute 3   4500     1000    10
Minute 4   4500     1000     0
Run Code Online (Sandbox Code Playgroud)

在第 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 的原因。


Pat*_*mil 1

  • 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)  
Run Code Online (Sandbox Code Playgroud)
  • 如果对特定端点的请求数量较少(或 1 个请求),MAX 是否会为 0?

对特定端点的请求数量不会影响 MAX


  • 当 MAX 为 0 时

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


  • 我如何确定计时器值?

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

.expiry(Duration.ofMinutes(2)).bufferLength(3) 如果在到期时间或轮换时间之间没有发出请求, DistributionStatisticConfig 会将


MAX属性属于 枚举统计,由Measurement 使用(在Measurement 中我们得到COUNT、TOTAL_TIME、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将与特定端点相同。(但可以肯定的是,正在对此进行调查)