Spring 引导执行器 - MAX 属性
Spring Boot Actuator - MAX property
我正在使用 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(时间)是0而TOTAL_TIME:是Xms
当我执行泛化形式时
localhost:8889/actuator/metrics/http.server.requests
我得到 MAX 为 3.00..
我也看过 production-ready-features 但找不到任何关于 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"
]
}
]
}
更新
localhost:8889/actuator/metrics/http.server.requests?tag=uri:/user/getEmployee/2
Response 404(我已经执行了/user/getEmployee/2,然后才请求actuator)
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"
]
}
]
}
请求 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
}
],
您可以使用根 /actuator/metrics/http.server.requests
调用的响应中定义的 ?tag=url:{endpoint_tag}
查看各个指标。 measurements
值的详细信息是;
- COUNT: 每秒呼叫速率。
- TOTAL_TIME:记录的次数总和。以监控系统基本时间单位上报
- MAX: The maximum amount recorded. When this represents a time, it is reported in the monitoring system's base unit of time.
您看到的差异是由于计时器的存在。这意味着在一段时间后,当前定义的任何标记指标的 MAX
值都可以重置回 0
。您可以向 /user/asset/getAllAssets
添加一些新调用,然后立即调用 /actuator/metrics/http.server.requests
以查看给定标签的非零 MAX
值吗?
这是因为为每个较小的周期获取 MAX
指标背后的想法。当您看到这些指标时,您将能够在很长一段时间内获得 MAX
个值的数组,而不是单个值。
您可以在 Micrometer 源代码中看到这一点。有一个 rotate()
方法专注于重置 MAX
值以创建上述行为。
您可以看到每次 poll()
调用都会调用它,每隔一段时间就会触发一次以收集指标。
- 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)
- 如果我们对特定端点的请求数量较少(或 1 个请求),MAX 是否会为 0?
没有特定端点的请求数不影响MAX
- 当MAX为0时
有Timer设置值为0。当端点未被调用或执行一段时间时,Timer将MAX设置为0。这里大约计时器值为 2.30 分钟(150 秒)
- 我是如何确定计时器值的?
为此,我采集了 6 个样本(对同一个端点执行了 6 次)。为此,我确定了调用端点的时间与 MAX 设置回零的时间之间的 时间差
DistributionStatisticConfig有.expiry(Duration.ofMinutes(2)).bufferLength(3)
如果在到期时间或旋转时间之间没有发出请求,则将某些测量值设置为 0。
MAX 属性属于enum Statistic which is used by Measurement
(在测量中我们得到 COUNT,TOTAL_TIME,MAX)
public static final Statistic MAX
The maximum amount recorded. When this represents a time, it is
reported in the monitoring system's base unit of time.
备注:
这是来自特定端点的指标的情况(此处 /actuator/metrics/http.server.requests?tag=uri:/user/asset/getAllAssets
)。
对于 actuator/metrics/http.server.requests
的概括指标
正如您从请求 1 和请求 2(有问题)中看到的那样,MAX 已减少(从 3.0002913 到 2.3612968) 因此可能因为某些端点的 MAX由于计时器而被设置回 0。在我看来,/http.server.requests
的 MAX 将与特定端点相同。 (但可以肯定的是,对此进行调查)
MAX
指标是滚动最大值。所以它表示滚动中的最大测量值 window.
例如,如果您要每分钟抓取一次指标:
Total Count Max
Minute 1 100 1 100
Minute 2 500 101 90
Minute 3 4500 1000 10
Minute 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 分钟,总数和计数没有增加,因为没有请求。既然没有请求,那么就不可能有 'slowest' 请求 MAX,这就是 MAX 为 0 的原因。
我正在使用 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(时间)是0而TOTAL_TIME:是Xms
当我执行泛化形式时
localhost:8889/actuator/metrics/http.server.requests
我得到 MAX 为 3.00..
我也看过 production-ready-features 但找不到任何关于 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"
]
}
]
}
更新
localhost:8889/actuator/metrics/http.server.requests?tag=uri:/user/getEmployee/2
Response 404(我已经执行了/user/getEmployee/2,然后才请求actuator)
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"
]
}
]
}
请求 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
}
],
您可以使用根 /actuator/metrics/http.server.requests
调用的响应中定义的 ?tag=url:{endpoint_tag}
查看各个指标。 measurements
值的详细信息是;
- COUNT: 每秒呼叫速率。
- TOTAL_TIME:记录的次数总和。以监控系统基本时间单位上报
- MAX: The maximum amount recorded. When this represents a time, it is reported in the monitoring system's base unit of time.
您看到的差异是由于计时器的存在。这意味着在一段时间后,当前定义的任何标记指标的 MAX
值都可以重置回 0
。您可以向 /user/asset/getAllAssets
添加一些新调用,然后立即调用 /actuator/metrics/http.server.requests
以查看给定标签的非零 MAX
值吗?
这是因为为每个较小的周期获取 MAX
指标背后的想法。当您看到这些指标时,您将能够在很长一段时间内获得 MAX
个值的数组,而不是单个值。
您可以在 Micrometer 源代码中看到这一点。有一个 rotate()
方法专注于重置 MAX
值以创建上述行为。
您可以看到每次 poll()
调用都会调用它,每隔一段时间就会触发一次以收集指标。
- 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)
- 如果我们对特定端点的请求数量较少(或 1 个请求),MAX 是否会为 0?
没有特定端点的请求数不影响MAX
- 当MAX为0时
有Timer设置值为0。当端点未被调用或执行一段时间时,Timer将MAX设置为0。这里大约计时器值为 2.30 分钟(150 秒)
- 我是如何确定计时器值的?
为此,我采集了 6 个样本(对同一个端点执行了 6 次)。为此,我确定了调用端点的时间与 MAX 设置回零的时间之间的 时间差
DistributionStatisticConfig有.expiry(Duration.ofMinutes(2)).bufferLength(3)
如果在到期时间或旋转时间之间没有发出请求,则将某些测量值设置为 0。
MAX 属性属于enum Statistic which is used by Measurement (在测量中我们得到 COUNT,TOTAL_TIME,MAX)
public static final Statistic MAX
The maximum amount recorded. When this represents a time, it is reported in the monitoring system's base unit of time.
备注:
这是来自特定端点的指标的情况(此处 /actuator/metrics/http.server.requests?tag=uri:/user/asset/getAllAssets
)。
对于 actuator/metrics/http.server.requests
正如您从请求 1 和请求 2(有问题)中看到的那样,MAX 已减少(从 3.0002913 到 2.3612968) 因此可能因为某些端点的 MAX由于计时器而被设置回 0。在我看来,/http.server.requests
的 MAX 将与特定端点相同。 (但可以肯定的是,对此进行调查)
MAX
指标是滚动最大值。所以它表示滚动中的最大测量值 window.
例如,如果您要每分钟抓取一次指标:
Total Count Max
Minute 1 100 1 100
Minute 2 500 101 90
Minute 3 4500 1000 10
Minute 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 分钟,总数和计数没有增加,因为没有请求。既然没有请求,那么就不可能有 'slowest' 请求 MAX,这就是 MAX 为 0 的原因。