Back to Druid

监控统计指南 | Monitoring & Statistics Guide

doc/monitoring-guide.md

1.2.286.5 KB
Original Source

监控统计指南 | Monitoring & Statistics Guide

English | 中文


中文

Druid 内置了强大的监控统计功能,可以实时采集 SQL 执行统计、连接池状态和 Web 请求信息,并通过 Web 页面或 API 暴露。

启用监控

1. 启用 StatFilter

StatFilter 是监控数据的采集源头:

yaml
spring:
  datasource:
    druid:
      filter:
        stat:
          enabled: true
          log-slow-sql: true        # 记录慢 SQL
          slow-sql-millis: 2000     # 慢 SQL 阈值(毫秒)
          merge-sql: true           # 合并相同结构 SQL 的统计

2. 启用 Web 监控页面

yaml
spring:
  datasource:
    druid:
      stat-view-servlet:
        enabled: true                    # 启用监控页面
        url-pattern: /druid/*            # 访问路径
        login-username: admin            # 登录用户名
        login-password: your_password    # 登录密码
        allow: 127.0.0.1                 # IP 白名单(逗号分隔)
        deny:                            # IP 黑名单
        reset-enable: false              # 是否允许重置统计数据

启用后访问 http://your-host/druid/index.html 即可查看监控页面。

3. 启用 Web 请求统计

yaml
spring:
  datasource:
    druid:
      web-stat-filter:
        enabled: true
        url-pattern: /*
        exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
        session-stat-enable: true
        session-stat-max-count: 1000
        profile-enable: true             # 启用 profile

监控数据说明

数据源统计

指标说明
PoolingCount当前连接池中空闲连接数
PoolingPeak空闲连接数历史峰值
ActiveCount当前活跃连接数
ActivePeak活跃连接数历史峰值
WaitThreadCount当前等待获取连接的线程数
NotEmptyWaitCount累计等待次数
NotEmptyWaitMillis累计等待时间
LogicConnectCount累计逻辑连接获取次数
LogicCloseCount累计逻辑连接关闭次数
PhysicalConnectCount累计物理连接创建次数
PhysicalCloseCount累计物理连接关闭次数
ExecuteCount累计 SQL 执行次数
ErrorCount累计执行错误次数
CommitCount累计事务提交次数
RollbackCount累计事务回滚次数

SQL 统计

指标说明
ExecuteCount该 SQL 执行次数
TotalTime总执行时间
MaxTimespan最大执行时间
InTransactionCount事务内执行次数
ErrorCount执行错误次数
EffectedRowCount影响行数
FetchRowCount返回行数
RunningCount当前正在执行的数量
ConcurrentMax最大并发执行数

编程方式获取统计数据

通过 DruidStatManagerFacade 可编程获取所有监控数据:

java
import com.alibaba.druid.stat.DruidStatManagerFacade;

// 获取所有数据源统计
List<Map<String, Object>> dataSourceStats =
    DruidStatManagerFacade.getInstance().getDataSourceStatDataList();

// 获取 SQL 统计
List<Map<String, Object>> sqlStats =
    DruidStatManagerFacade.getInstance().getSqlStatDataList(null);

// 获取活跃连接堆栈
List<List<String>> activeConnections =
    DruidStatManagerFacade.getInstance().getActiveConnStackTraceList();

暴露为 REST API

java
@RestController
@RequestMapping("/monitor")
public class DruidMonitorController {

    @GetMapping("/datasource")
    public Object dataSourceStat() {
        return DruidStatManagerFacade.getInstance().getDataSourceStatDataList();
    }

    @GetMapping("/sql")
    public Object sqlStat() {
        return DruidStatManagerFacade.getInstance().getSqlStatDataList(null);
    }

    @GetMapping("/wall")
    public Object wallStat() {
        return DruidStatManagerFacade.getInstance().getWallStatMap(null);
    }
}

与外部监控系统集成

Prometheus + Grafana

通过定期获取 DruidStatManagerFacade 数据并暴露为 Prometheus 指标:

java
@Component
public class DruidMetricsExporter {

    @Scheduled(fixedRate = 15000)
    public void exportMetrics() {
        List<Map<String, Object>> stats =
            DruidStatManagerFacade.getInstance().getDataSourceStatDataList();

        for (Map<String, Object> stat : stats) {
            // 将统计数据转化为 Prometheus 指标
            int activeCount = (Integer) stat.get("ActiveCount");
            int poolingCount = (Integer) stat.get("PoolingCount");
            // ... 输出到 Prometheus
        }
    }
}

Spring 监控

Druid 可以监控 Spring Bean 的方法执行情况:

yaml
spring:
  datasource:
    druid:
      aop-patterns: com.yourapp.service.*,com.yourapp.dao.*

安全建议

  1. 务必设置登录密码 — 监控页面包含敏感信息
  2. 配置 IP 白名单 — 限制监控页面访问来源
  3. 生产环境禁用 reset — 设置 reset-enable: false
  4. 定期清理统计 — 长期运行后统计数据会积累,注意内存占用

English

Overview

Druid provides built-in monitoring and statistics capabilities that collect SQL execution stats, connection pool states, and web request information in real-time.

Quick Setup

yaml
spring:
  datasource:
    druid:
      filter:
        stat:
          enabled: true
          log-slow-sql: true
          slow-sql-millis: 2000
      stat-view-servlet:
        enabled: true
        login-username: admin
        login-password: your_password
      web-stat-filter:
        enabled: true
        url-pattern: /*
        exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"

Access the monitoring console at http://your-host/druid/index.html.

Programmatic Access

java
// Get datasource statistics
DruidStatManagerFacade.getInstance().getDataSourceStatDataList();

// Get SQL statistics
DruidStatManagerFacade.getInstance().getSqlStatDataList(null);

// Get active connection stack traces (returns List<List<String>>)
DruidStatManagerFacade.getInstance().getActiveConnStackTraceList();

Key Metrics

  • Connection Pool: PoolingCount, ActiveCount, WaitThreadCount, PhysicalConnectCount
  • SQL Execution: ExecuteCount, TotalTime, MaxTimespan, ErrorCount, SlowSQL count
  • Transactions: CommitCount, RollbackCount, StartTransactionCount

Security

  • Always set login credentials for the monitoring console
  • Configure IP whitelist (allow property)
  • Disable reset in production (reset-enable: false)