Spring Boot Actuator'http.server.requests'指标最大时间

Chr*_*ina 7 spring metrics spring-boot spring-boot-actuator micrometer

我有一个Spring Boot应用程序,并且正在使用Spring Boot Actuator和Micrometer来跟踪有关我的应用程序的指标。我特别关注“ http.server.requests”指标和MAX统计信息:

{
    "name": "http.server.requests",
    "measurements": [
        {
            "statistic": "COUNT",
            "value": 2
        },
        {
            "statistic": "TOTAL_TIME",
            "value": 0.079653001
        },
        {
            "statistic": "MAX",
            "value": 0.032696019
        }
    ],
    "availableTags": [
        {
            "tag": "exception",
            "values": [
                "None"
            ]
        },
        {
            "tag": "method",
            "values": [
                "GET"
            ]
        },
        {
            "tag": "status",
            "values": [
                "200", 
                "400"

            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我认为MAX统计信息是执行一个请求的最长时间(因为我已经发出了两个请求,所以这是对其中一个请求进行较长时间处理的时间)。

每当我通过任何标签过滤指标时,例如 localhost:9090/actuator/metrics?tag=status:200

{
        "name": "http.server.requests",
        "measurements": [
            {
                "statistic": "COUNT",
                "value": 1
            },
            {
                "statistic": "TOTAL_TIME",
                "value": 0.029653001
            },
            {
                "statistic": "MAX",
                "value": 0.0
            }
        ],
        "availableTags": [
            {
                "tag": "exception",
                "values": [
                    "None"
                ]
            },
            {
                "tag": "method",
                "values": [
                    "GET"
                ]
            }
        ]
    }
Run Code Online (Sandbox Code Playgroud)

我总是得到0.0作为最大时间。这是什么原因呢?

bur*_*ete 0

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

  • COUNT:每秒的呼叫速率。
  • TOTAL_TIME:记录的时间总和。以监控系统的基本时间单位报告
  • MAX:记录的最大金额。当它表示时间时,会以监控系统的基本时间单位进行报告。

正如这里给出的,也在这里


您看到的差异是由于计时器的存在造成的。这意味着一段时间后,MAX任何标记指标的当前定义值都可以重置回0。您可以向端点添加一些新调用,然后立即调用以查看给定标记的/actuator/metrics/http.server.requests非零值吗?MAX

MAX这是由于获取每个较小时期的指标背后的想法。当您看到这些指标时,您将能够MAX在很长一段时间内获得一组值而不是单个值。

您可以在 Micrometer 源代码中看到它的实际效果。有一种rotate()方法专注于重置MAX值以创建上述行为。

您可以看到每次调用都会调用此方法poll(),每隔一段时间就会触发一次以进行指标收集。