spring actuator上报指标uri=known修复

import org.springframework.boot.actuate.metrics.web.reactive.server.WebFluxTags;
import org.springframework.boot.actuate.metrics.web.reactive.server.WebFluxTagsProvider;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import io.micrometer.core.instrument.Tag;
import org.springframework.http.HttpStatus;
import org.springframework.web.reactive.HandlerMapping;
import org.springframework.web.reactive.function.server.RouterFunctions;
import org.springframework.web.server.ServerWebExchange;
import org.springframework.web.util.pattern.PathPattern;

import java.util.Arrays;

@Configuration
public class WebFluxMetricsConfig {
@Bean
public WebFluxTagsProvider customTagsProvider() {
return new WebFluxTagsProvider() {

private final Tag URI_NOT_FOUND = Tag.of("uri", "NOT_FOUND");
private final Tag URI_REDIRECTION = Tag.of("uri", "REDIRECTION");
private final Tag URI_ROOT = Tag.of("uri", "root");

@Override
public Iterable<Tag> httpRequestTags(ServerWebExchange exchange, Throwable exception) {
return Arrays.asList(WebFluxTags.method(exchange),
uriTag(exchange),
WebFluxTags.exception(exception),
WebFluxTags.status(exchange),
WebFluxTags.outcome(exchange));
}

Tag uriTag(ServerWebExchange exchange) {
String matchingPattern = exchange
.getAttribute(RouterFunctions.MATCHING_PATTERN_ATTRIBUTE);
if (matchingPattern != null) {
return Tag.of("uri", matchingPattern);
}
PathPattern pathPattern = exchange
.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);
if (pathPattern != null) {
return Tag.of("uri", pathPattern.getPatternString());
}
HttpStatus status = exchange.getResponse().getStatusCode();
if (status != null) {
if (status.is3xxRedirection()) {
return URI_REDIRECTION;
}
if (status == HttpStatus.NOT_FOUND) {
return URI_NOT_FOUND;
}
}
String path = exchange.getRequest().getPath().value();
if (path.isEmpty()) {
return URI_ROOT;
}
return Tag.of("uri", path);
}
};
}
}

参考:https://github.com/spring-projects/spring-boot/issues/14876

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容