8

我有一个 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"

            ]
        }
    ]
}

我想 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"
                ]
            }
        ]
    }

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

4

2 回答 2

2

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 到 2.30 分钟(120 到 150 秒)

DistributionStatisticConfig如果在过去2分钟(120 秒)内没有发出请求.expiry(Duration.ofMinutes(2)),则将某些测量值设置为 0

诸如public TimeWindowMax(Clock clock,...), private void rotate() Clock接口等方法也已为此编写。你可以在这里看到实现


  • 我如何确定计时器值?

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


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

公共静态最终统计MAX

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


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

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

由于计时器,某些端点的 MAX 将设置为 0。在我看来,MAX for/http.server.requests将与特定端点相同。

在此处输入图像描述


更新

该文档已针对 MAX 进行了更新。

注意:对于基本DistributionSummary实现,例如 CumulativeDistributionSummary, MaxStepDistributionSummary是时间窗口最大值 ( TimeWindowMax)。这意味着它的值是一个时间窗口内的最大值。如果时间窗口结束,它将被重置为 0 并重新开始一个新的时间窗口。DistributionStatisticConfig除非将到期时间明确设置为其他值,否则时间窗口大小将是仪表注册表的步长 。

于 2019-07-29T09:29:35.110 回答
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()调用它,每隔一段时间就会触发一次以收集指标。

于 2019-07-29T05:33:21.363 回答