将自定义标签添加到默认 spring 引导执行器指标
Add custom labels to default spring boot actuator metrics
我目前正在开发一个 Spring 引导 (webflux) 项目,我们在 /actuator/prometheus 端点使用 spring boot actuator dependency 默认给我们例如:http_server_requests_seconds_bucket metric。默认情况下它有 {exception="None",method="POST",outcome="SUCCESS",status="200",uri="/test",le ="0.268435456",} 标签。我想添加另一个标签说“挑战”,这取决于请求有效负载。例如,我的请求负载如下所示,
{
"type" : "basic",
"method" : "someMethod"
}
我想在该指标中添加一个标签 http_server_requests_seconds_bucket{exception="None",...,challenge="basic"}
,它基于请求负载“类型”参数。有人能告诉我如何将自定义标签添加到 spring-boot-actuator
提供的现有默认指标吗
注意:“类型”的值数量有限,因此它不会爆炸
经过一些研究,我发现我们可以通过扩展名为 DefaultWebMvcTagsProvider(对于 Spring MVC)的 class 并添加自定义标签来实现。
@Component
public class CustomTagsAdder extends DefaultWebMvcTagsProvider {
@Override
public Iterable<Tag> getTags(HttpServletRequest request, HttpServletResponse response, Object handler, Throwable exception) {
List<Tag> tags = new ArrayList<>();
tags.add(Tag.of("CUSTOM_TAG_KEY", "CUSTOM_TAG_VALUE")); // Repeat this line for each of the tags you want
for(Tag tag : super.getTags(request, response, handler, exception))
tags.add(tag);
return tags;
}
}
与 webflux 项目类似,您可以扩展 DefaultWebFluxTagsProvider 并添加您的自定义标签。
我目前正在开发一个 Spring 引导 (webflux) 项目,我们在 /actuator/prometheus 端点使用 spring boot actuator dependency 默认给我们例如:http_server_requests_seconds_bucket metric。默认情况下它有 {exception="None",method="POST",outcome="SUCCESS",status="200",uri="/test",le ="0.268435456",} 标签。我想添加另一个标签说“挑战”,这取决于请求有效负载。例如,我的请求负载如下所示,
{
"type" : "basic",
"method" : "someMethod"
}
我想在该指标中添加一个标签 http_server_requests_seconds_bucket{exception="None",...,challenge="basic"}
,它基于请求负载“类型”参数。有人能告诉我如何将自定义标签添加到 spring-boot-actuator
注意:“类型”的值数量有限,因此它不会爆炸
经过一些研究,我发现我们可以通过扩展名为 DefaultWebMvcTagsProvider(对于 Spring MVC)的 class 并添加自定义标签来实现。
@Component
public class CustomTagsAdder extends DefaultWebMvcTagsProvider {
@Override
public Iterable<Tag> getTags(HttpServletRequest request, HttpServletResponse response, Object handler, Throwable exception) {
List<Tag> tags = new ArrayList<>();
tags.add(Tag.of("CUSTOM_TAG_KEY", "CUSTOM_TAG_VALUE")); // Repeat this line for each of the tags you want
for(Tag tag : super.getTags(request, response, handler, exception))
tags.add(tag);
return tags;
}
}
与 webflux 项目类似,您可以扩展 DefaultWebFluxTagsProvider 并添加您的自定义标签。