Druid数据库连接池监控功能配置与使用详解
Druid作为阿里巴巴开源的数据库连接池,不仅提供了高效的连接池管理功能,还内置了强大的监控统计功能。SQL执行情况统计连接池状态监控Web应用URI请求监控Session监控Spring监控(需额外配置)慢SQL检测与分析连接泄漏检测防火墙防御统计这些监控数据对于系统性能调优、慢SQL发现、连接泄漏检测等场景非常有价值,能够帮助开发人员快速定位数据库访问瓶颈。
一、Druid监控功能概述
Druid作为阿里巴巴开源的数据库连接池,不仅提供了高效的连接池管理功能,还内置了强大的监控统计功能。通过Druid的监控功能,我们可以实时了解:
- SQL执行情况统计
- 连接池状态监控
- Web应用URI请求监控
- Session监控
- Spring监控(需额外配置)
- 慢SQL检测与分析
- 连接泄漏检测
- 防火墙防御统计
这些监控数据对于系统性能调优、慢SQL发现、连接泄漏检测等场景非常有价值,能够帮助开发人员快速定位数据库访问瓶颈。
二、基础监控配置
1. 添加Maven依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.8</version>
</dependency>
建议同时添加日志依赖,便于查看监控日志:
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
2. Spring Boot基础配置
在application.yml中添加以下配置:
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
druid:
# 数据库连接配置
url: jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC&characterEncoding=utf8
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
# 连接池配置
initial-size: 5
min-idle: 5
max-active: 20
max-wait: 60000
# 监控配置
stat-view-servlet:
enabled: true
login-username: admin # 生产环境必须修改
login-password: admin # 生产环境必须修改
reset-enable: false # 禁用重置功能
url-pattern: /druid/*
allow: 127.0.0.1 # 白名单
deny: 192.168.1.100 # 黑名单
web-stat-filter:
enabled: true
url-pattern: /*
exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
session-stat-enable: true # 启用session统计
session-stat-max-count: 1000 # session统计最大数量
3. 访问监控页面
启动应用后,访问 http://localhost:8080/druid 即可看到Druid的监控首页。首页展示了数据源、SQL监控、SQL防火墙等多个功能模块的入口。
三、高级监控功能配置
1. SQL监控配置
spring:
datasource:
druid:
filters: stat,wall,log4j
filter:
stat:
enabled: true
slow-sql-millis: 1000 # 慢SQL阈值,单位毫秒
log-slow-sql: true # 记录慢SQL日志
merge-sql: true # 合并相似SQL
wall:
enabled: true
config:
delete-allow: false # 禁止delete语句
drop-table-allow: false # 禁止drop table语句
create-table-allow: true
alter-table-allow: true
2. Spring监控配置
首先添加AOP依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
然后在配置类中添加:
@Configuration
@EnableAspectJAutoProxy
public class DruidConfig {
@Bean
public ServletRegistrationBean<StatViewServlet> statViewServlet() {
ServletRegistrationBean<StatViewServlet> registration =
new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
// 添加初始化参数
registration.addInitParameter("loginUsername", "admin");
registration.addInitParameter("loginPassword", "admin");
registration.addInitParameter("resetEnable", "false");
return registration;
}
@Bean
public FilterRegistrationBean<WebStatFilter> webStatFilter() {
FilterRegistrationBean<WebStatFilter> filter =
new FilterRegistrationBean<>(new WebStatFilter());
filter.addUrlPatterns("/*");
filter.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
// 添加session监控配置
filter.addInitParameter("sessionStatEnable", "true");
filter.addInitParameter("sessionStatMaxCount", "1000");
return filter;
}
@Bean
public DruidStatInterceptor druidStatInterceptor() {
return new DruidStatInterceptor();
}
@Bean
@ConditionalOnMissingBean
public JdkRegexpMethodPointcut druidStatPointcut() {
JdkRegexpMethodPointcut pointcut = new JdkRegexpMethodPointcut();
// 设置需要监控的包路径
pointcut.setPatterns(
"com.example.demo.service.*",
"com.example.demo.controller.*",
"com.example.demo.dao.*"
);
return pointcut;
}
@Bean
public Advisor druidStatAdvisor() {
return new DefaultPointcutAdvisor(druidStatPointcut(), druidStatInterceptor());
}
}
四、监控功能使用详解
1. 数据源监控
在Druid监控页面的"数据源"标签页,可以看到以下关键指标:
-
连接池使用情况:
- 初始化连接数
- 最小空闲连接数
- 最大活跃连接数
- 当前活跃连接数
- 连接等待次数
- 连接获取时间统计
-
连接泄漏检测:
- 如果RemoveAbandoned设置为true,会显示被回收的连接
- 活跃连接持续时间过长可能表明存在连接泄漏
2. SQL监控
SQL监控页面展示以下重要信息:
-
SQL执行统计:
- 执行次数
- 总执行时间
- 最慢执行时间
- 平均执行时间
- 影响行数统计
-
慢SQL分析:
- 标记执行时间超过slow-sql-millis阈值的SQL
- 按执行时间排序,快速定位性能瓶颈
-
SQL执行分布:
- SQL执行时间分布直方图
- SQL执行+结果集处理时间分布
3. SQL防火墙
可以查看以下防御信息:
-
防御统计:
- 拦截的SQL类型统计
- 黑名单拦截统计
- 白名单拦截统计
-
访问模式分析:
- 表访问统计
- 函数调用统计
- 对象访问统计
- 敏感操作审计
4. Web应用监控
展示以下Web层信息:
-
URI访问统计:
- 请求次数统计
- 请求耗时分析
- 并发请求监控
-
Session监控:
- 活跃Session数量
- Session创建时间
- Session最后访问时间
-
Spring方法调用监控:
- 方法调用次数
- 方法调用耗时
- 方法调用层次关系
五、常见问题与解决方案
1. 监控页面无法访问
检查步骤:
- 确认stat-view-servlet.enabled设置为true
- 检查url-pattern配置是否正确(默认为/druid/*)
- 检查是否有安全框架(如Spring Security)拦截了/druid/*路径
- 查看应用日志是否有相关错误信息
解决方案:
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/druid/**").permitAll() // 放行Druid监控路径
// 其他配置...
}
}
2. 监控数据不显示
可能原因:
- filters未配置stat
- 使用了特殊的JDBC URL导致监控失效
- 监控过滤器未正确注册
解决方案:
spring:
datasource:
druid:
filters: stat,wall,log4j
filter:
stat:
enabled: true
db-type: mysql # 明确指定数据库类型
3. 性能影响优化
虽然Druid监控对性能影响很小,但在高并发场景下可以:
- 关闭merge-sql(设为false)
- 调大slow-sql-millis阈值(如从1000调整到2000)
- 减少监控数据采集频率
- 只监控关键SQL和方法
spring:
datasource:
druid:
filter:
stat:
merge-sql: false
slow-sql-millis: 2000
log-slow-sql: false
六、生产环境最佳实践
-
安全配置:
- 必须修改默认的登录用户名和密码
- 通过allow/deny配置限制访问IP
- 启用HTTPS访问监控页面
- 定期审计监控日志
-
性能调优:
- 根据监控数据调整连接池参数
- 定期检查并优化慢SQL
- 监控连接泄漏情况(关注活跃连接数)
-
告警集成:
- 配置慢SQL告警阈值
- 设置连接池使用率告警
- 监控关键业务SQL执行情况
-
可视化监控:
- 结合Prometheus+Grafana实现可视化监控
- 集成到企业统一监控平台
- 建立关键指标Dashboard
-
定期维护:
- 定期清理历史监控数据
- 升级Druid到最新稳定版本
- 根据业务变化调整监控策略
通过合理配置和使用Druid的监控功能,可以极大提升数据库访问的可观测性,帮助开发者及时发现和解决数据库性能问题,为系统稳定运行提供有力保障。
- . - - - - - - - .
更多推荐




所有评论(0)