如何让Spring WebClient的OAuth2请求被Micrometer采集指标?
解决方案
要让Micrometer采集到OAuth2客户端凭证流程中获取token的请求指标,核心思路是替换DefaultClientCredentialsTokenResponseClient内部默认创建的RestTemplate,改用由RestTemplateBuilder生成的、自带Micrometer埋点的实例。具体步骤如下:
1. 定义带指标的RestTemplate
利用Spring Boot自动配置的RestTemplateBuilder创建RestTemplate,它会自动添加Micrometer的MetricsClientHttpRequestInterceptor,实现请求指标采集:
@Bean public RestTemplate oauth2TokenRestTemplate(RestTemplateBuilder restTemplateBuilder) { return restTemplateBuilder.build(); }
2. 自定义TokenResponseClient
创建DefaultClientCredentialsTokenResponseClient实例,并将上面的RestTemplate注入进去:
@Bean public ClientCredentialsTokenResponseClient clientCredentialsTokenResponseClient(RestTemplate oauth2TokenRestTemplate) { DefaultClientCredentialsTokenResponseClient tokenResponseClient = new DefaultClientCredentialsTokenResponseClient(); tokenResponseClient.setRestOperations(oauth2TokenRestTemplate); return tokenResponseClient; }
3. 配置OAuth2授权客户端管理器
将自定义的TokenResponseClient关联到客户端凭证授权流程中,确保WebClient在获取token时使用这个带指标的客户端:
@Bean public OAuth2AuthorizedClientManager authorizedClientManager( ClientRegistrationRepository clientRegistrationRepository, OAuth2AuthorizedClientRepository authorizedClientRepository, ClientCredentialsTokenResponseClient tokenResponseClient) { OAuth2AuthorizedClientProvider provider = OAuth2AuthorizedClientProviderBuilder.builder() .clientCredentials(config -> config.tokenResponseClient(tokenResponseClient)) .build(); DefaultOAuth2AuthorizedClientManager manager = new DefaultOAuth2AuthorizedClientManager( clientRegistrationRepository, authorizedClientRepository); manager.setAuthorizedClientProvider(provider); return manager; }
验证指标
完成配置后,启动应用并发起第三方服务请求,访问/actuator/metrics/http.client.requests即可看到获取token的请求指标,其中会包含对应OAuth2授权服务器的请求URI、状态码等维度信息。
内容的提问来源于stack exchange,提问作者wmkoch
相关产品推荐
相关产品推荐

