You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 17:13:10