通过Prometheus利用自定义指标micrometer的MeterRegistry暴露HttpClient连接池中连接数占用状态

本文介绍了如何通过Prometheus和自定义metrics监控HttpClient连接池中的连接数,利用PoolingHttpClientConnectionManager的getTotalStats()方法获取连接状态,并将数据绑定到MeterRegistry,确保数据持久化。通过Spring注入MeterRegistry,最终在/actuator/prometheus端点显示连接池数据,并在Grafana中展示实时监控图表。

在服务内部调用外部接口的时候,使用的RestTemplate对请求调用进行了封装,默认情况下Spring使用的是java.net.HttpURLConnection。但是为了更高效,为RestTemplate使用工厂创建ClientHttpRequest, 这样就可以使用HttpClient并利用它的连接池特性,通过创建PoolingHttpClientConnectionManager来管理httpClient的连接池,并可以为单独的Route设置最大连接数setDefaultMaxPerRoute,但是连接池的使用过程中,无法监控到连接池中的连接数量,也就是服务再使用httpClient调用外部接口的时候无法查看池中有多少连接正在使用,多少连接正在准备好等待获取,多少连接已经可用,所以就想到利用Prometheus的自定义metrics来监控到连接池中的连接情况,并展示到grafana监控中,现在包括,hikari光数据源也都是采用了prometheus的端点监控来实现对数据库连接池数据的展示,就像这样

所以如何实现呢,首先要提前准备实现的条件,监控数据,poolingHttpClientConnectionManager里面提供了getTotalStats()方法,这个方法中从Pool里可以获取到连接池中连接的状态数据,分别包含leased(正在被使用的连接), pending(存放等待获取连接的线程), available(表示可用的连接),max(available + leased 总和) 这几种连接的数据,只有从这些方法中读到值,便可得到数据的来源。其次

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值