文章目录 非SpringBoot环境添加依赖示例指标详解 Spring Boot环境手动自动 关于Sql日志记录和慢日志 非SpringBoot环境 HikariCP其
HikariCP其内部提供了setMetricReGIStry()方法,让我们可以注入MetricRegistry来实现对连接池指标的收集。这样我们可以较为方便的监控连接池的运行状态。
<dependency> <groupId>com.zaxxergroupId> <artifactId>HikariCPartifactId> <version>4.0.3version> dependency> <dependency> <groupId>MysqlgroupId> <artifactId>mysql-connector-javaartifactId> dependency> <dependency> <groupId>io.micrometergroupId> <artifactId>micrometer-coreartifactId> <version>1.9.4version> dependency> // hikari配置 HikariConfig hikariConfig = new HikariConfig(); hikariConfig.setJdbcUrl("jdbc:mysql://localhost:3306/laker?serverTimezone=GMT%2B8&characterEncoding=utf8&useSSL=false"); hikariConfig.setUsername("root"); hikariConfig.setPassWord("123456"); hikariConfig.setDriverClassName("com.mysql.jdbc.Driver"); hikariConfig.setAutoCommit(true); hikariConfig.setPoolName("laker_poolName"); hikariConfig.setMaximumPoolSize(10); hikariConfig.setMinimumIdle(3); // 创建HikariDataSource HikariDataSource dataSource = new HikariDataSource(hikariConfig); // 设置metric注册器 每10秒打印一次 LoggingMeterRegistry loggingMeterRegistry = new LoggingMeterRegistry(new LoggingRegistryConfig() { @Override public String get(String key) { return null; } @Override public Duration step() { return Duration.ofSeconds(10); } }, Clock.SYSTEM); dataSource.setMetricRegistry(loggingMeterRegistry); // 测试 持有3秒连接后才释放 Connection connection = dataSource.getConnection(); TimeUnit.SECONDS.sleep(3); connection.close(); 结果:
hikaricp.connections{pool=laker_poolName} value=4hikaricp.connections.active{pool=laker_poolName} value=1hikaricp.connections.idle{pool=laker_poolName} value=3hikaricp.connections.max{pool=laker_poolName} value=10hikaricp.connections.min{pool=laker_poolName} value=3hikaricp.connections.pending{pool=laker_poolName} value=0hikaricp.connections.acquire{pool=laker_poolName} throughput=0.1/s mean=0.0000581s max=0.0000581shikaricp.connections.creation{pool=laker_poolName} throughput=0.3/s mean=0.006666666s max=0.007shikaricp.connections.usage{pool=laker_poolName} throughput=0.1/s mean=3.017s max=3.017s 对应的指标在
com.zaxxer.hikari.metrics.PoolStats中。
| 指标 | 详解 |
|---|---|
| hikaricp.connections | 当前总连接数,包括空闲的连接和使用中的连接。(4 = 3 + 1)对应上面日志; Connections = activeConnection + idleConnections,会随着连接使用情况变化。 |
| hikaricp.connections.active | 正在使用中活跃连接数 (1),会随着连接使用情况变化。 |
| hikaricp.connections.idle | 空闲连接数 (3) ,会随着连接使用情况变化。 |
| hikaricp.connections.max | 最大连接数 (10),初始配置。 |
| hikaricp.connections.min | 最小连接数 (3),初始配置。 |
| hikaricp.connections.pending | 正在等待连接的线程数量(0)。重点:一般来说,这里应该都是0,如果存在这个数据并且时间较长要触发告警,视情况加大最大连接数。 |
| hikaricp.connections.acquire | 获取每个连接需要时间,单位为ns。 |
| hikaricp.connections.creation | 连接创建时间,单位为ms。 |
| hikaricp.connections.timeout | 创建连接超时次数。 |
| hikaricp.connections.usage | 连接从池中取出到返回的时间,单位为ms。即连接被业务占用时间(3.017s)。重点:这个时间长的话,可能是慢SQL或者长事务导致连接被占用问题。 |
还是添加上面的依赖组件。
@Configurationpublic class DatasourceConfiguration { @Bean public DataSource primaryDataSource(MetricRegistry metricRegistry) {HikariConfig hikariConfig = new HikariConfig(); hikariConfig.setJdbcUrl("jdbc:mysql://localhost:3306/laker?serverTimezone=GMT%2B8&characterEncoding=utf8&useSSL=false"); hikariConfig.setUsername("root"); hikariConfig.setPassword("123456"); hikariConfig.setDriverClassName("com.mysql.jdbc.Driver"); hikariConfig.setAutoCommit(true); hikariConfig.setPoolName("laker_poolName"); hikariConfig.setMaximumPoolSize(10); hikariConfig.setMinimumIdle(3); // 创建HikariDataSource HikariDataSource dataSource = new HikariDataSource(hikariConfig); dataSource.setMetricRegistry(loggingMeterRegistry); return dataSource; }} 只需要添加如下依赖,内部会自动加上HikariCP和micrometer-core依赖,并自动配置注册器。
<dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-actuatorartifactId> dependency> 原理,我们可以看这个类DataSourcePoolMetricsAutoConfiguration.java

可以看这个Issue:https://github.com/brettwooldridge/HikariCP/issues/57
作者是不愿意在连接池层去做这种监控的事情的,应为会大大降低其性能。
注意:
来源地址:https://blog.csdn.net/abu935009066/article/details/127155653
--结束END--
本文标题: 可观测性-Metrics-数据库连接池HikariCP监控
本文链接: https://www.lsjlt.com/news/412900.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-10-23
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0