在服务内部调用外部接口的时候,使用的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 总和) 这几种连接的数据,只有从这些方法中读到值,便可得到数据的来源。其次

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

被折叠的 条评论
为什么被折叠?



