1. 为什么需要Druid监控?
在Spring Boot应用中使用Druid作为数据源时,监控功能的重要性常常被低估。我见过太多团队在数据库性能问题爆发后才手忙脚乱地加监控,而那时往往已经造成了业务损失。Druid自带的监控能力可以让你实时掌握:
- 连接池活跃情况(避免连接泄漏)
- SQL执行性能(快速定位慢查询)
- 请求流量波动(预测容量瓶颈)
- 异常请求统计(发现潜在攻击)
注意:生产环境一定要开启防火墙或权限控制,监控页面包含敏感SQL信息
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 完整集成步骤
2.1 基础依赖配置
首先在pom.xml中添加最新版依赖(截至2024年1月):
xml复制<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.18</version>
</dependency>
我推荐使用starter版本而非原生druid包,因为它已经预置了与Spring Boot的自动配置逻辑,可以减少大量样板代码。
2.2 关键配置参数
在application.yml中配置核心参数:
yaml复制spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
druid:
# 连接池基础配置
initial-size: 5
max-active: 20
min-idle: 5
# 监控配置
stat-view-servlet:
enabled: true
url-pattern: /druid/*
allow: 192.168.1.100 # 生产环境务必设置IP白名单
deny: 0.0.0.0
web-stat-filter:
enabled: true
exclusions: "*.js,*.gif,*.jpg,/druid/*"
这里有个实际踩坑经验:max-active值不要盲目设置过大,20-50对于多数应用已经足够。过大的连接数反而会导致数据库负载飙升。
2.3 监控页面访问
启动应用后访问:
code复制http://你的域名:端口/druid
你会看到包含多个标签页的监控面板:
- 数据源:连接池使用情况
- SQL监控:所有执行的SQL统计
- SQL防火墙:防御SQL注入攻击
- Web应用:URI访问统计
3. 高级监控配置
3.1 监控Spring Bean
在配置类中添加:
java复制@Bean
public ServletRegistrationBean<StatViewServlet> druidServlet() {
ServletRegistrationBean<StatViewServlet> reg = new ServletRegistrationBean<>();
reg.setServlet(new StatViewServlet());
reg.addUrlMappings("/druid/*");
// 添加IP白名单
reg.addInitParameter("allow", "127.0.0.1");
return reg;
}
3.2 集成Prometheus
对于需要对接统一监控系统的场景,可以增加以下依赖:
xml复制<dependency>
<groupId>io.github.mweirauch</groupId>
<artifactId>micrometer-jvm-extras</artifactId>
<version>0.2.2</version>
</dependency>
然后在application.yml添加:
yaml复制management:
endpoints:
web:
exposure:
include: prometheus
metrics:
export:
prometheus:
enabled: true
4. 生产环境注意事项
4.1 安全加固
必须做的安全措施:
- 配置loginUsername和loginPassword
- 设置allow/deny IP规则
- 禁用resetAll功能(防止误操作)
yaml复制spring:
datasource:
druid:
stat-view-servlet:
login-username: admin
login-password: $加密密码
reset-enable: false
4.2 性能调优
根据监控数据优化连接池:
- 观察waitThreadCount:如果持续大于0需要扩大max-active
- 监控removeAbandonedTimeout:预防连接泄漏
- 定期检查validationQuery执行时间
4.3 常见问题排查
监控页面404?
- 检查url-pattern是否被安全框架拦截
- 确认starter版本与Spring Boot兼容
- 查看启动日志是否有Druid初始化报错
SQL监控不显示?
- 确保开启了filters:spring.datasource.druid.filters=stat
- 检查是否使用了MyBatis等ORM框架的特定配置
5. 监控数据解读实战
通过一个真实案例说明如何利用监控数据:
某电商平台大促期间发现数据库CPU飙升,通过Druid监控发现:
- SQL监控页显示某个商品查询SQL平均执行时间从5ms暴涨到200ms
- 该SQL的执行次数是平时的50倍
- 连接池活跃连接数达到max-active上限
最终定位到是热门商品详情页没有走缓存,紧急添加Redis缓存后恢复正常。
6. 扩展监控方案
对于大型分布式系统,建议:
- 将Druid监控数据通过micrometer接入Prometheus
- 配置Grafana看板关键指标:
- 活跃连接数
- SQL执行时间P99
- 事务平均耗时
- 设置告警规则:
yaml复制- alert: HighDbConnectionUsage expr: spring_datasource_active_connections / spring_datasource_max_connections > 0.8 for: 5m
我在实际项目中发现,结合Druid原生监控和Prometheus的全局视角,可以构建从宏观到微观的完整监控链条。
