数据库连接池:pig平台Druid监控配置全指南

数据库连接池:pig平台Druid监控配置全指南

【免费下载链接】pig 【免费下载链接】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监控系统主要由三个组件构成:

mermaid

  • DruidDataSource:数据源实现类,负责管理数据库连接
  • StatFilter:统计过滤器,收集连接池运行指标
  • DruidStatViewServlet:提供监控页面访问接口
  • DruidWebStatFilter:采集Web应用中的SQL执行信息

2.2 数据流向

mermaid

三、环境准备

3.1 系统要求

环境版本要求
JDK1.8+
Pig4.0+
Spring Boot2.5.x
Spring Cloud Alibaba2021.0.1.0
Druid1.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 监控面板功能

mermaid

六、高级配置

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-size10初始连接数,根据CPU核心数调整
min-idle10最小空闲连接数,不低于initial-size
max-active50最大活跃连接数,不宜过大
max-wait60000连接超时时间,建议60秒
time-between-eviction-runs-millis60000连接检测间隔,建议60秒
min-evictable-idle-time-millis1800000连接最小生存时间,建议30分钟
remove-abandonedtrue开启连接泄露检测
remove-abandoned-timeout300泄露超时时间,建议5分钟

6.2 常见问题排查

  1. 连接池满

    • 检查ActiveCount是否达到max-active
    • 查看是否存在连接未释放情况
    • 调整max-active或优化连接使用方式
  2. 慢查询过多

    • 在SQL监控中查看慢SQL列表
    • 分析执行计划,添加索引优化
    • 拆分大SQL,避免长事务
  3. 监控页面无法访问

    • 检查StatViewServlet配置是否正确
    • 确认Spring Security是否放行/druid/*路径
    • 查看应用日志是否有相关错误信息

七、总结与展望

通过本文配置,Pig平台可实现对数据库连接池的全面监控。Druid监控系统不仅提供实时性能指标,更能帮助开发者定位SQL性能问题、优化连接池配置。在实际应用中,建议结合Prometheus+Grafana构建更完善的监控告警体系,实现历史数据存储与趋势分析。

下期预告:《Pig平台分布式事务解决方案:Seata集成实践》


扩展资源

【免费下载链接】pig 【免费下载链接】pig 项目地址: https://gitcode.com/gh_mirrors/pig/pig

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值