Quarkus中SmallRye Metrics已启用却未在Dev UI显示、无法在Swagger UI加载的问题咨询
关于Quarkus SmallRye Metrics的两个问题解答
一、Dev UI中SmallRye Metrics未激活的原因与解决方法
你已经能通过http://localhost:8080/api/metrics/application获取数据,说明核心Metrics功能是正常的,Dev UI里组件呈灰色未激活状态,大概率是这几个原因:
- Dev UI专属配置被禁用:检查
application.properties里有没有手动设置quarkus.metrics.dev-ui.enabled=false,这个配置默认是true,如果被改成false,Dev UI里的Metrics组件就会处于未激活状态。把它改回true或者直接删掉这条配置即可。 - Dev模式缓存加载问题:Quarkus Dev模式偶尔会出现UI组件缓存异常,试试完全停止当前Dev服务,再重新启动(执行
./mvnw quarkus:dev或./gradlew quarkusDev),重启后Dev UI会重新加载所有已启用的组件。 - 非应用根路径的适配小问题:你设置了
quarkus.http.non-application-root-path=api,虽然不影响核心功能,但可以去Dev UI的「Extensions」页面找到SmallRye Metrics扩展,确认它的状态是否为「Enabled」——不过你已经能正常获取Metrics数据,大概率是启用状态,只是UI加载延迟导致的灰色。
二、让SmallRye Metrics在Swagger UI中展示的方法
SmallRye Health能自动出现在Swagger里,是因为Quarkus默认把Health端点集成到了OpenAPI文档中,但Metrics端点默认不在OpenAPI的扫描范围内,需要手动配置实现:
方法1:一键让OpenAPI包含所有非应用端点
在application.properties中添加这条配置,就能自动把/api路径下的所有端点(包括Metrics相关路径)加入到OpenAPI文档:
quarkus.smallrye-openapi.add-non-application-endpoints=true
重启Dev模式后,打开Swagger UI就能看到Metrics的相关端点了。
方法2:手动精准添加指定Metrics端点
如果不想把所有非应用端点都暴露在Swagger里,可以自定义一个OpenAPI扩展类,精准添加需要的Metrics端点:
import io.quarkus.smallrye.openapi.runtime.OpenApiCustomizer; import org.eclipse.microprofile.openapi.models.OpenAPI; import org.eclipse.microprofile.openapi.models.PathItem; import org.eclipse.microprofile.openapi.models.Operation; import javax.enterprise.context.ApplicationScoped; @ApplicationScoped public class MetricsOpenApiCustomizer implements OpenApiCustomizer { @Override public void customize(OpenAPI openAPI) { // 添加总Metrics端点 PathItem metricsRootPath = new PathItem() .get(new Operation().summary("获取全量Metrics数据").description("返回应用、基础系统及厂商级别的Metrics数据")); openAPI.getPaths().addPathItem("/api/metrics", metricsRootPath); // 添加应用自定义Metrics端点 PathItem appMetricsPath = new PathItem() .get(new Operation().summary("获取应用层Metrics数据").description("返回业务自定义的Metrics指标")); openAPI.getPaths().addPathItem("/api/metrics/application", appMetricsPath); // 按需添加其他Metrics端点,比如/base、/vendor等 } }
这种方式适合需要精细控制Swagger展示内容的场景。
最后确认下quarkus.swagger-ui.enabled=true(默认开启),确保能正常访问Swagger UI查看添加后的端点。
内容的提问来源于stack exchange,提问作者eerriicc
相关产品推荐
相关产品推荐

