使用 cxf-spring-boot-starter-jaxrs 的 spring 引导应用程序中的指标 http_server_requests_seconds_count 包含 uri 作为 "UNKNOWN"

Metrics http_server_requests_seconds_count in spring boot application using cxf-spring-boot-starter-jaxrs contains uri as "UNKNOWN"

Spring 中的指标 http_server_requests_seconds_count 使用版本 2.0 启动应用程序。8.Release 使用 spring 致动器公开包含 URI 为:

"UNKNOWN".

Spring 启动应用程序正在使用 cxf-spring-boot-starter-jaxrs 来公开其余端点。 我在我的项目中添加了 micrometer-registry-prometheus 依赖项。

http_server_requests_seconds_count{exception="None",method="POST",status="200",uri="UNKNOWN",} 2.0

我尝试在我的项目中添加 micrometer-jersey2 依赖项。

实际

http_server_requests_seconds_count{exception="None",method="POST",status="200",uri="UNKNOWN",} 2.0

预计:

http_server_requests_seconds_count{exception="None",method="GET",status="200",uri="/sayHello",} 2.0

在 OP 评论中澄清后(CXF 是另一个 JAX-RS 实现):Micrometer 目前不支持处理 CXF 请求。它 (Spring WebMvc) 无法提取可选的参数化请求 url,在这种情况下会退回到 UNKNOWN。 (否则,如果您的 CXF 端点提供一些可获得大量流量的高度可参数化的 URL,这可能会导致指标激增。)

所以您可以查看 micrometer-jersey2 实现并推导出 micrometer-cxf 实现;)(或者,如果不是这样的话(使用搜索)- open an issue with the Micrometer或 CXF 项目。我提到的是后者,因为他们可能有兴趣负责该实施。)

您还可以使用 io.github.ddk-prog:cxf-prometheus-metrics 收集 prometheus 的 cxf 指标。

将依赖项添加到您的 pom.xml

<dependency>
    <groupId>io.github.ddk-prog</groupId>
    <artifactId>cxf-prometheus-metrics</artifactId>
    <version>1.0.0</version>
</dependency>

并将以下 bean 添加到您的应用程序配置中。

@Bean
public FactoryBeanListener cxfPrometheusFeatureBean(final CollectorRegistry registry) {
    return new PrometheusFactoryBeanListener(registry);
}

您将在 spring boot actuator prometheus 报告中获得每个端点和操作的 cxf_requests_total、cxf_requests_success、cxf_requests_failed、cxf_requests_seconds。 例如,

cxf_requests_seconds{endpoint="server1",operation="server1Method",} 0.0157349

如果需要cxf统计做千分尺报告,可以试试

<dependency>
    <groupId>io.github.kdprog</groupId>
    <artifactId>cxf-micrometer-metrics</artifactId>
    <version>1.0.0</version>
</dependency>

将报告以下统计数据

cxf_requests_processed_total - total number of cxf requests ,
cxf_requests_seconds_sum     - total execution time of cxf requests,
cxf_requests_seconds_max     - maximum execution time of cxf request,
cxf_requests_success_total   - total number of successfully processed cxf requests,
cxf_requests_failed_total    - total number of failed cxf requests

对于每个客户端或服务器 cxf 端点的每个 Web 服务方法。

对于 spring 个应用程序,将以下 bean 添加到您的应用程序配置中。

@Bean
public FactoryBeanListener cxfMicrometerBean(final MeterRegistry registry) {
    return new MicrometerFactoryBeanListener(registry);
}

https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#actuator.metrics.supported

您可以让自定义标签提供商覆盖它:

@Bean
WebMvcTagsProvider webMvcTagsProvider() {
    return new DefaultWebMvcTagsProvider() {
        @Override
        public Iterable<Tag> getTags(HttpServletRequest request, HttpServletResponse response,
                                     Object handler, Throwable exception) {
            return Tags.concat(
                    super.getTags(request, response, handler, exception),
                    Tags.of(Tag.of("uri",request.getRequestURI()))
            );
        }
    };
}

More examples.