spring - 如何使用 Spring-Boot 的 RestTemplate 在 uri 标记中获取 http-client-requests 指标的模板值?
问题描述
我们正在使用 Spring Boot 2.1.4 和micrometer-registry-prometheus
依赖项来捕获指标。
我们有一个 Spring Boot 服务使用 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 标签:
如果可能,在变量替换之前请求的 URI 模板(例如,/api/person/{id})
我们如何使变量替换成为可能?
解决方案
我假设您正在使用RestTemplateBuilder
来构建您的RestTemplate
,否则您将无法注册指标。
您实际上是否将模板化的 url 传递给RestTemplate
s 交换方法并传递参数以进行替换?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
推荐阅读
- c# - Binding 中的对象未显示在 ListView 中
- php - 如何在 Laravel 8 Base Controller 中声明一个公共函数
- c - sendmsg() / connect() 因原始 IPv6 套接字上的权限错误/EACCES 而失败
- pandas - 从数据框中的列中选择最后一个观察值
- flask - 使用 OAuth2 进行身份验证时,如何绕过 Superset 的登录页面?
- c++ - C ++存储容器元素的指针
- javascript - 如何更改条件运算符的开关构造?
- reactjs - 使用 GraphQL 在 NextJS 中渲染的钩子比上一次渲染时更多
- javascript - 如何遍历数组以隐藏项目
- c - 试图在 vsc 中使用 strcpy_s?