将自定义标签添加到默认 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 并添加您的自定义标签。