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

时间:2018-07-24 13:10:56

标签: spring metrics 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"

            ]
        }
    ]
}

我认为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作为最大时间。这是什么原因呢?

2 个答案:

答案 0 :(得分:1)

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 具有.expiry(Duration.ofMinutes(2)),如果在最近的 2分钟内没有发出请求 ,则将一些测量值设置为0 (120秒)

为此接口编写了public TimeWindowMax(Clock clock,...)private void rotate() Clock 接口之类的方法。您可能会看到实现here


  • 我如何确定计时器值?

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


MAX 属性属于enum Statistic使用的Measurement (在测量中,我们获得COUNT,TOTAL_TIME,MAX)

  

公共静态最终统计信息MAX

     

记录的最大数量。当这代表时间的时候   报告监视系统的基本时间单位。


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

用于actuator/metrics/http.server.requests的通用度量

由于某个计时器,某些端点的

MAX将设置为0。我认为/http.server.requests的MAX将与特定端点相同。

enter image description here


更新

The document已针对MAX更新。

  

注意:基本DistributionSummary实现的最大值例如   CumulativeDistributionSummaryStepDistributionSummary是一个时间   最大窗口(TimeWindowMax)。这意味着它的值是最大值   时间窗口内的值。如果时间窗口结束,它将重置为   0,新的时间窗口再次开始。时间窗口大小将是   计价器注册表的步长,除非到期   DistributionStatisticConfig已明确设置为其他值。

答案 1 :(得分:0)

measurements值的详细信息是;

  • COUNT:呼叫的每秒速率。
  • TOTAL_TIME:记录的时间总和。报告监视系统的基本时间单位
  • 最大:记录的最大数量。当它表示时间时,将以监视系统的基本时间单位报告。

同时指定herehere


您看到的差异可能是由于您的数据量很少。您可以将许多呼叫添加到正在检查的任何端点,然后尝试查看MAX值吗?我正在研究MAX的更详细定义。

似乎是这种情况,当您添加更多数据时,MAX得到一个适当的非零值。值可能有一个计时器,在一天后或一段时间后,它会恢复为零,直到端点再次使用。