可观测性-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。

参考

相关推荐
低头不见28 分钟前
tcp的粘包拆包问题,如何解决?
网络·网络协议·tcp/ip
SKYDROID云卓小助手2 小时前
三轴云台之相机技术篇
运维·服务器·网络·数码相机·音视频
yuzhangfeng4 小时前
【云计算物理网络】从传统网络到SDN:云计算的网络演进之路
网络·云计算
TDengine (老段)4 小时前
TDengine 中的关联查询
大数据·javascript·网络·物联网·时序数据库·tdengine·iotdb
zhu12893035565 小时前
网络安全的现状与防护措施
网络·安全·web安全
Aa美少女战士5 小时前
单域名 vs 通配符:如何选择最适合你的 SSL 证书?
网络协议·https·ssl
咕噜签名5 小时前
如何申请p12证书
网络协议·https·ssl
2a3b4c5 小时前
SSL/TLS
网络协议·https·ssl
zhu12893035567 小时前
网络安全与防护策略
网络·安全·web安全
沫夕残雪7 小时前
HTTP,请求响应报头,以及抓包工具的讨论
网络·vscode·网络协议·http