如何使用 Spring-Boot 的 RestTemplate 在 uri 标记中为 http-client-requests 指标获取模板化值?
How do I get templated values in uri tag for http-client-requests metrics using Spring-Boot's RestTemplate?
我们正在使用 Spring Boot 2.1.4 和 micrometer-registry-prometheus
依赖项来捕获指标。
我们有一个 Spring 引导服务使用 RestTemplate 调用另一个服务的情况。此调用生成的指标包含 URI 中的实际值而不是模板值。
例如,在 /actuator/prometheus
端点中,我看到这样的条目:
http_client_requests_seconds_count{clientName="someClient",method="GET",status="200",uri="/person/lookup?firstName=Tony&lastName=Soprano",} 1.0
根据文档,我希望看到的是变量名而不是值,如下所示:
http_client_requests_seconds_count{clientName="someClient",method="GET",status="200",uri="/person/lookup?firstName={firstName}&lastName={lastName}",} 1.0
有没有办法获取默认 http.client.requests
指标值以使用 URI 标记的模板值?
https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-features.html#production-ready-metrics-http-clients 上的 Spring 文档对 uri 标记进行了说明:
Request’s URI template prior to variable substitution, if possible (for example, /api/person/{id})
我们如何使变量替换成为可能?
我假设您正在使用 RestTemplateBuilder
构建您的 RestTemplate
,否则您将无法注册指标。
您实际上是将模板化的 url 传递到 RestTemplate
的交换方法中并传递参数进行替换吗?在 2.1.4.RELEASE
和 2.2.1.RELEASE
上为我工作。
template.getForObject("http://localhost:" + this.serverPort + "/hello/{id}",
String.class, Collections.singletonMap("id", "loop"));
结果:
http_client_requests_seconds_count{application="micrometered2",clientName="localhost",method="GET",outcome="SUCCESS",status="200",uri="/hello/{id}",} 23.0
我们正在使用 Spring Boot 2.1.4 和 micrometer-registry-prometheus
依赖项来捕获指标。
我们有一个 Spring 引导服务使用 RestTemplate 调用另一个服务的情况。此调用生成的指标包含 URI 中的实际值而不是模板值。
例如,在 /actuator/prometheus
端点中,我看到这样的条目:
http_client_requests_seconds_count{clientName="someClient",method="GET",status="200",uri="/person/lookup?firstName=Tony&lastName=Soprano",} 1.0
根据文档,我希望看到的是变量名而不是值,如下所示:
http_client_requests_seconds_count{clientName="someClient",method="GET",status="200",uri="/person/lookup?firstName={firstName}&lastName={lastName}",} 1.0
有没有办法获取默认 http.client.requests
指标值以使用 URI 标记的模板值?
https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-features.html#production-ready-metrics-http-clients 上的 Spring 文档对 uri 标记进行了说明:
Request’s URI template prior to variable substitution, if possible (for example, /api/person/{id})
我们如何使变量替换成为可能?
我假设您正在使用 RestTemplateBuilder
构建您的 RestTemplate
,否则您将无法注册指标。
您实际上是将模板化的 url 传递到 RestTemplate
的交换方法中并传递参数进行替换吗?在 2.1.4.RELEASE
和 2.2.1.RELEASE
上为我工作。
template.getForObject("http://localhost:" + this.serverPort + "/hello/{id}",
String.class, Collections.singletonMap("id", "loop"));
结果:
http_client_requests_seconds_count{application="micrometered2",clientName="localhost",method="GET",outcome="SUCCESS",status="200",uri="/hello/{id}",} 23.0