使用 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()))
);
}
};
}
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()))
);
}
};
}