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

WildFly 28与Prometheus结合创建自定义指标的方法问询

在WildFly 28/29中实现Prometheus兼容的拉取式自定义指标

下面是几种无需依赖opentelemetry-collector、支持Prometheus拉取的方案:

方案1:配置MicroProfile Telemetry(OpenTelemetry)暴露拉取端点

虽然官方默认是推送模式,但可以调整配置让OpenTelemetry直接提供Prometheus可拉取的指标端点:

  • 在standalone.xml中启用microprofile-telemetry子系统:
    <subsystem xmlns="urn:wildfly:microprofile-telemetry-smallrye:1.0"/>
    
  • 修改standalone.conf(或domain.conf)添加系统属性,开启Prometheus导出器:
    JAVA_OPTS="$JAVA_OPTS -Dotel.exporter.prometheus.enabled=true"
    JAVA_OPTS="$JAVA_OPTS -Dotel.exporter.prometheus.host=0.0.0.0"
    JAVA_OPTS="$JAVA_OPTS -Dotel.exporter.prometheus.port=9464"
    
  • 在代码里创建自定义指标,比如请求计数器:
    import io.opentelemetry.api.GlobalOpenTelemetry;
    import io.opentelemetry.api.metrics.Meter;
    import io.opentelemetry.api.metrics.LongCounter;
    
    public class AppMetrics {
        private static final Meter METER = GlobalOpenTelemetry.getMeter("com.yourcompany.yourapp");
        private static final LongCounter REQUEST_COUNTER = METER.counterBuilder("app_requests_total")
            .setDescription("Total number of application requests")
            .build();
    
        public static void countRequest(String endpoint) {
            REQUEST_COUNTER.add(1, METER.commonKey("endpoint").of(endpoint));
        }
    }
    
  • 启动WildFly后,访问http://localhost:9464/metrics就能拿到指标数据,直接配置Prometheus拉取这个地址即可。

方案2:手动实现JAX-RS指标端点

完全自定义,用Prometheus官方Java客户端写一个暴露指标的接口:

  • 给项目添加Prometheus依赖(以Maven为例):
    <dependency>
        <groupId>io.prometheus</groupId>
        <artifactId>simpleclient</artifactId>
        <version>0.16.0</version>
    </dependency>
    <dependency>
        <groupId>io.prometheus</groupId>
        <artifactId>simpleclient_common</artifactId>
        <version>0.16.0</version>
    </dependency>
    <dependency>
        <groupId>io.prometheus</groupId>
        <artifactId>simpleclient_jaxrs</artifactId>
        <version>0.16.0</version>
    </dependency>
    
  • 定义自定义指标:
    import io.prometheus.client.Counter;
    
    public class CustomMetrics {
        public static final Counter REQUEST_COUNTER = Counter.build()
            .name("app_requests_total")
            .help("Total requests to application endpoints")
            .labelNames("endpoint")
            .register();
    }
    
  • 写一个JAX-RS端点来输出指标:
    import io.prometheus.client.exporter.common.TextFormat;
    import jakarta.ws.rs.GET;
    import jakarta.ws.rs.Path;
    import jakarta.ws.rs.Produces;
    import jakarta.ws.rs.core.Response;
    import java.io.StringWriter;
    
    @Path("/metrics")
    public class MetricsEndpoint {
        @GET
        @Produces(TextFormat.CONTENT_TYPE_004)
        public Response getMetrics() {
            StringWriter writer = new StringWriter();
            try {
                TextFormat.write004(writer, io.prometheus.client.CollectorRegistry.defaultRegistry.metricFamilySamples());
                return Response.ok(writer.toString()).build();
            } catch (Exception e) {
                return Response.serverError().build();
            }
        }
    }
    
  • 部署应用后,访问http://localhost:8080/你的应用上下文/metrics就能获取指标,把这个地址配置给Prometheus拉取即可。

方案3:配置Micrometer启用Prometheus拉取模式

Micrometer同样支持切换为拉取模式,无需推送:

  • 在standalone.xml中启用micrometer子系统并配置Prometheus导出器:
    <subsystem xmlns="urn:wildfly:micrometer:1.0">
        <exporter name="prometheus" enabled="true" />
    </subsystem>
    
  • 修改standalone.conf添加系统属性,设置拉取端点的端口和地址:
    JAVA_OPTS="$JAVA_OPTS -Dmicrometer.prometheus.port=9090"
    JAVA_OPTS="$JAVA_OPTS -Dmicrometer.prometheus.host=0.0.0.0"
    
  • 用Micrometer API创建自定义指标:
    import io.micrometer.core.instrument.MeterRegistry;
    import jakarta.inject.Inject;
    
    public class OrderService {
        private final MeterRegistry registry;
    
        @Inject
        public OrderService(MeterRegistry registry) {
            this.registry = registry;
        }
    
        public void processOrder(String orderType) {
            registry.counter("order_processed_total", "order_type", orderType).increment();
        }
    }
    
  • 启动后访问http://localhost:9090/prometheus获取指标,配置Prometheus拉取这个端点。

内容的提问来源于stack exchange,提问作者sascha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 12:16:21