可观测性-Metrics-WebClient异步Http远程Call

代码示例

1.依赖导入

xml 复制代码
 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>
 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

2.定义一个远程call客户端

java 复制代码
@Service
public class BaiduClient {
    @Bean
    public WebClient baidu(WebClient.Builder webClientBuilder) {
        return  webClientBuilder.baseUrl("https://xxxx.cn").build();
    }
}

3.定义一个指标注册器(输出到日志文件)

java 复制代码
@Configuration
public class MetricsRegistryConfiguration {

    @ConditionalOnProperty(name = "metrics.export", havingValue = "log", matchIfMissing = true)
    @Bean
    public MeterRegistry meterRegistry() {
        return new LoggingMeterRegistry(new LoggingRegistryConfig() {
            @Override
            public String get(String key) {
                return null;
            }

            @Override
            public Duration step() {
                return Duration.ofSeconds(60);
            }
        }, Clock.SYSTEM);
    }

}

4.日志配置

xml 复制代码
 <!-- 定义metrics的输出为日志 INFO -->
    <logger name="io.micrometer.core.instrument.logging.LoggingMeterRegistry" level="INFO"/>

5.调用示例

java 复制代码
@Controller
public class XXXXController {
    @Autowired
    WebClient baidu;

    @GetMapping("/test")
    @ResponseBody
    public Response captcha() {
        baidu.get()
                .uri("/echo")
                .retrieve().bodyToMono(String.class)
                .block(Duration.ofSeconds(10));
    }

6.示例结果日志

ini 复制代码
http.client.requests{client.name=xxx.cn,error=none,exception=none,method=GET,outcome=SUCCESS,status=200,uri=/echo} throughput=0.3/s mean=0.271909994s max=0.6102772s

高级

你还可以使用ObservationWebClientCustomizer定制。

默认情况下,生成的指标名称为http.client.requests。您可以通过设置属性来自定义名称

  • management.observations.http.client.requests.name(3.X版本)
  • management.metrics.web.client.requests-metric-name(2.X)

自定义标签,提供一个实现自org.springframework.web.reactive.function.client包中的 ClientRequestObservationConvention 的 @Bean

低基数键

名称 描述
method(必需) HTTP 请求方法的名称,如果无法创建请求则为 "none"。
uri(必需) 用于 HTTP 请求的 URI 模板,如果未提供则为 "none"。仅考虑 URI 的路径部分。
client.name(必需) 从请求 URI 主机派生的客户端名称。
status(必需) HTTP 响应的原始状态代码,或者在发生 IOException 时为 "IO_ERROR",或者如果未接收到响应则为 "CLIENT_ERROR"。
outcome(必需) HTTP 客户端交换的结果。
exception(必需) 在交换过程中抛出的异常的名称,如果没有发生异常则为 "none"。

高基数键

名称 描述
http.url(必需) HTTP 请求的 URI。

参考

相关推荐
奇树谦18 小时前
Qt | 利用map创建多个线程和定时器
网络·数据库·qt
默默前行的虫虫19 小时前
nicegui地图总结
网络·python
北京盟通科技官方账号19 小时前
工业通讯底层对齐:EtherNet/IP Class 1 连接中的 32-bit Header 与内存映射逻辑
服务器·网络·网络协议·自动化·制造
@淡 定20 小时前
消息队列使用场景
网络
Tom4i20 小时前
【网络优化】Android 如何监听系统网络连接成功
android·网络
kkce21 小时前
vsping 推出海外检测节点的核心目的
大数据·网络·人工智能
Joy T21 小时前
【PE 最终章】思维链、自洽性与 Prompt 安全防御指南
网络·prompt·prompt engineer·提示词工程
一世琉璃白_Y1 天前
Ubuntu(VMware)虚拟机网络异常排查与解决方案
linux·网络·ubuntu
I · T · LUCKYBOOM1 天前
1.Apache网站优化
linux·运维·服务器·网络·apache
无尽的罚坐人生1 天前
lettcode hot 100题解(待更新完毕)
网络