数据库连接池:pig平台Druid监控配置全指南
【免费下载链接】pig 项目地址: https://gitcode.com/gh_mirrors/pig/pig
一、为什么需要Druid监控?
在分布式系统架构中,数据库连接池(Database Connection Pool)是连接应用程序与数据库的关键组件。随着微服务架构的普及,连接池管理不善导致的性能瓶颈、资源耗尽等问题日益凸显。Pig平台作为基于Spring Cloud Alibaba的微服务开发框架,默认集成了Druid(德鲁伊)连接池,其内置的监控功能可实时跟踪连接池状态、SQL执行情况及系统性能指标。
痛点直击:
- 生产环境中连接泄漏导致服务不可用
- SQL执行效率低下却无法定位慢查询
- 连接池参数配置不合理引发性能瓶颈
- 缺乏实时监控导致故障排查滞后
本文将从环境准备、配置实现到监控面板使用,全面讲解Pig平台中Druid监控系统的搭建过程,帮助开发者构建可视化的数据库性能监控体系。
二、技术原理与架构
2.1 Druid监控核心组件
Druid监控系统主要由三个组件构成:
- DruidDataSource:数据源实现类,负责管理数据库连接
- StatFilter:统计过滤器,收集连接池运行指标
- DruidStatViewServlet:提供监控页面访问接口
- DruidWebStatFilter:采集Web应用中的SQL执行信息
2.2 数据流向
三、环境准备
3.1 系统要求
| 环境 | 版本要求 |
|---|---|
| JDK | 1.8+ |
| Pig | 4.0+ |
| Spring Boot | 2.5.x |
| Spring Cloud Alibaba | 2021.0.1.0 |
| Druid | 1.2.8+ |
3.2 依赖检查
在项目的pom.xml中确认Druid依赖已正确引入:
<!-- Druid连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.8</version>
</dependency>
四、配置实现步骤
4.1 数据源配置
在application.yml中添加Druid数据源配置:
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/pig?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: root
druid:
# 初始化连接池大小
initial-size: 5
# 最小空闲连接数
min-idle: 5
# 最大活跃连接数
max-active: 20
# 获取连接超时时间(毫秒)
max-wait: 60000
# 连接检测间隔时间(毫秒)
time-between-eviction-runs-millis: 60000
# 连接最小生存时间(毫秒)
min-evictable-idle-time-millis: 300000
# SQL检测语句
validation-query: SELECT 1 FROM DUAL
# 空闲连接检测开关
test-while-idle: true
# 获取连接时检测开关
test-on-borrow: false
# 归还连接时检测开关
test-on-return: false
# 连接池泄露检测
remove-abandoned: true
# 泄露连接超时时间(秒)
remove-abandoned-timeout: 300
4.2 监控配置类实现
创建Druid监控配置类DruidConfig.java:
@Configuration
public class DruidConfig {
/**
* 配置Druid监控统计拦截器
*/
@Bean
public FilterRegistrationBean<WebStatFilter> webStatFilter() {
FilterRegistrationBean<WebStatFilter> registrationBean = new FilterRegistrationBean<>();
registrationBean.setFilter(new WebStatFilter());
// 配置拦截规则
registrationBean.addUrlPatterns("/*");
// 排除静态资源
registrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
// 开启session统计
registrationBean.addInitParameter("sessionStatEnable", "true");
// 配置principalSessionName
registrationBean.addInitParameter("principalSessionName", "USER_SESSION");
return registrationBean;
}
/**
* 配置Druid监控页面
*/
@Bean
public ServletRegistrationBean<StatViewServlet> statViewServlet() {
ServletRegistrationBean<StatViewServlet> registrationBean = new ServletRegistrationBean<>();
registrationBean.setServlet(new StatViewServlet());
// 监控页面访问路径
registrationBean.addUrlMappings("/druid/*");
// 配置监控页面参数
registrationBean.addInitParameter("loginUsername", "admin"); // 登录用户名
registrationBean.addInitParameter("loginPassword", "admin123"); // 登录密码
registrationBean.addInitParameter("allow", "127.0.0.1"); // 允许访问IP
registrationBean.addInitParameter("deny", "192.168.1.100"); // 禁止访问IP
registrationBean.addInitParameter("resetEnable", "false"); // 禁用重置按钮
return registrationBean;
}
}
4.3 安全配置
在Spring Security配置中放行Druid监控页面访问:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
// 放行Druid监控页面
.antMatchers("/druid/**").permitAll()
// 其他接口需要认证
.anyRequest().authenticated()
.and()
.csrf().disable();
}
}
五、监控指标详解
5.1 核心监控指标
Druid监控面板提供以下关键指标:
| 指标类别 | 核心指标 | 指标意义 |
|---|---|---|
| 数据源 | ActiveCount | 当前活跃连接数 |
| 数据源 | PoolingCount | 连接池空闲连接数 |
| 数据源 | CreateCount | 连接创建总数 |
| 数据源 | DestroyCount | 连接销毁总数 |
| SQL监控 | 执行次数 | SQL语句执行总次数 |
| SQL监控 | 执行时间 | SQL平均执行时间(毫秒) |
| SQL监控 | 错误次数 | SQL执行错误总数 |
| 慢查询 | 慢查询次数 | 超过阈值的SQL执行次数 |
5.2 监控面板功能
六、高级配置
6.1 动态数据源监控
对于多数据源场景,通过DruidDataSourceBuilder配置多个数据源并开启监控:
@Configuration
public class DynamicDataSourceConfig {
@Bean
@ConfigurationProperties("spring.datasource.master")
public DataSource masterDataSource() {
return DruidDataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties("spring.datasource.slave")
public DataSource slaveDataSource() {
return DruidDataSourceBuilder.create().build();
}
@Bean
public DataSource dynamicDataSource() {
DynamicDataSource dynamicDataSource = new DynamicDataSource();
Map<Object, Object> dataSourceMap = new HashMap<>(2);
dataSourceMap.put("master", masterDataSource());
dataSourceMap.put("slave", slaveDataSource());
dynamicDataSource.setTargetDataSources(dataSourceMap);
dynamicDataSource.setDefaultTargetDataSource(masterDataSource());
return dynamicDataSource;
}
}
6.2 日志集成
配置Druid日志输出到SLF4J:
# Druid日志配置
spring.datasource.druid.filter.slf4j.enabled=true
spring.datasource.druid.filter.slf4j.log-name=druid.sql
spring.datasource.druid.filter.slf4j.statement-log-enabled=true
spring.datasource.druid.filter.slf4j.statement-executable-sql-log-enable=true
6.3 告警配置
通过StatFilter实现自定义监控告警:
public class CustomStatFilter extends StatFilter {
private static final Logger logger = LoggerFactory.getLogger(CustomStatFilter.class);
@Override
protected void processSlowSql(SlowSqlEvent event) {
// 慢SQL告警
logger.error("Slow SQL detected: {} ms, SQL: {}",
event.getExecuteMillis(),
event.getSql());
// 发送告警通知(邮件/短信/钉钉)
sendAlert("Slow SQL Alert", event.getSql());
}
private void sendAlert(String title, String content) {
// 告警实现逻辑
}
}
六、最佳实践
6.1 生产环境配置建议
| 参数 | 建议值 | 说明 |
|---|---|---|
| initial-size | 10 | 初始连接数,根据CPU核心数调整 |
| min-idle | 10 | 最小空闲连接数,不低于initial-size |
| max-active | 50 | 最大活跃连接数,不宜过大 |
| max-wait | 60000 | 连接超时时间,建议60秒 |
| time-between-eviction-runs-millis | 60000 | 连接检测间隔,建议60秒 |
| min-evictable-idle-time-millis | 1800000 | 连接最小生存时间,建议30分钟 |
| remove-abandoned | true | 开启连接泄露检测 |
| remove-abandoned-timeout | 300 | 泄露超时时间,建议5分钟 |
6.2 常见问题排查
-
连接池满
- 检查ActiveCount是否达到max-active
- 查看是否存在连接未释放情况
- 调整max-active或优化连接使用方式
-
慢查询过多
- 在SQL监控中查看慢SQL列表
- 分析执行计划,添加索引优化
- 拆分大SQL,避免长事务
-
监控页面无法访问
- 检查StatViewServlet配置是否正确
- 确认Spring Security是否放行/druid/*路径
- 查看应用日志是否有相关错误信息
七、总结与展望
通过本文配置,Pig平台可实现对数据库连接池的全面监控。Druid监控系统不仅提供实时性能指标,更能帮助开发者定位SQL性能问题、优化连接池配置。在实际应用中,建议结合Prometheus+Grafana构建更完善的监控告警体系,实现历史数据存储与趋势分析。
下期预告:《Pig平台分布式事务解决方案:Seata集成实践》
扩展资源:
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



