使用druid的监控组件进行数据库连接池的监控

项目中大家都会使用到数据库连接池来管理数据库链接。使用druid做数据库连接池的也很多,druid连接池提供监控组件,让我们可以很方便对数据库连接池进行监控,让你可以清晰的看到数据库连接池的运行情况,也可以记录一些慢sql记录,用来保证应用的服务质量。

首先在springboot中引入druid数据库连接池

在springboot中引入druid数据库连接池非常简单,直接在application.yml配置文件中加上相关配置:

spring:
  datasource:
    url: 数据库连接
    username: 数据库用户名
    password: 数据库密码
    driver-class-name: com.mysql.jdbc.Driver
    platform: mysql
    type: com.alibaba.druid.pool.DruidDataSource
    # 下面为连接池的补充设置,应用到上面所有数据源中
    # 初始化大小,最小,最大
    initialSize: 60
    minIdle: 120
    maxActive: 200
    # 配置获取连接等待超时的时间
    maxWait: 60000
    # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
    timeBetweenEvictionRunsMillis: 60000
    # 配置一个连接在池中最小生存的时间,单位是毫秒
    minEvictableIdleTimeMillis: 30000
    validationQuery: select 'x'
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    # 打开PSCache,并且指定每个连接上PSCache的大小
    poolPreparedStatements: true
    maxPoolPreparedStatementPerConnectionSize: 20
    # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
    filters: stat,wall,log4j
    # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
    # 合并多个DruidDataSource的监控数据
    #useGlobalDataSourceStat: true

这个配置是通用的,只需要把连接池的type替换成druid数据库对应的类型既可

  • type: com.alibaba.druid.pool.DruidDataSource
    这样既可,在引入的orm框架中就可以直接使用

springboot中开启druid监控

druid中内置了很多种Filter,这里使用StatFilter,是用于统计监控信息。开启配置的有两种方式

springboot中开启druid监控方式一

通过默认配置开启,就是上面数据库连接池里面这一行配置

# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
filters: stat,wall,log4j
默认开启StatFilter
springboot中开启druid监控方式二

自定义配置来开启StatFilter,配置也很简单

      # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
      # filters: stat,wall,log4j
      # 添加StatFilter配置
      filter:
        stat:
          enabled: true
          db-type: mysql
          log-slow-sql: true
          slow-sql-millis: 1000

这几个配置就不详解了,都是字面意思,slow-sql-millis,慢sql时间是毫秒单位的

查询监控的方式
通过DruidStatManagerFacade.getInstance().getDataSourceStatDataList()方法查询数据库链接池监控信息

代码中可以通过DruidStatManagerFacade.getInstance().getDataSourceStatDataList()方法查询数据库链接池监控信息,大家可以通过服务接口、定时任务写入数据库、定时任务写入日志抽取到kafka等方式来存储这个监控信息,进行实时监控,来看下监控返回的数据:

[
    {
        "ActiveCount": 0,
        "ActivePeak": 8,
        "ActivePeakTime": 1586764216671,
        "BlobOpenCount": 0,
        "ClobOpenCount": 0,
        "CommitCount": 67,
        "ConnectionHoldTimeHistogram": [
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0
        ],
        "DbType": "mysql",
        "DefaultAutoCommit": true,
        "DriverClassName": "com.mysql.jdbc.Driver",
        "ErrorCount": 0,
        "ExceptionSorterClassName": "com.alibaba.druid.pool.vendor.MySqlExceptionSorter",
        "ExecuteCount": 91,
        "FilterClassNames": [],
        "Identity": 1606272155,
        "InitialSize": 0,
        "LogicCloseCount": 93,
        "LogicConnectCount": 93,
        "LogicConnectErrorCount": 0,
        "LoginTimeout": 0,
        "MaxActive": 8,
        "MinIdle": 0,
        "Name": "DataSource-1606272155",
        "NotEmptyWaitCount": 69,
        "NotEmptyWaitMillis": 0,
        "PSCacheAccessCount": 0,
        "PSCacheHitCount": 0,
        "PSCacheMissCount": 0,
        "PhysicalCloseCount": 0,
        "PhysicalConnectCount": 8,
        "PhysicalConnectErrorCount": 0,
        "PoolingCount": 8,
        "PoolingPeak": 8,
        "PoolingPeakTime": 1586764216896,
        "QueryTimeout": 0,
        "RemoveAbandoned": false,
        "RollbackCount": 0,
        "StartTransactionCount": 67,
        "TestOnBorrow": false,
        "TestOnReturn": false,
        "TestWhileIdle": true,
        "TransactionHistogram": [
            0,
            5,
            62,
            0,
            0,
            0,
            0
        ],
        "TransactionQueryTimeout": 0,
        "URL": "",
        "UserName": "",
        "ValidConnectionCheckerClassName": "com.alibaba.druid.pool.vendor.MySqlValidConnectionChecker",
        "WaitThreadCount": 0
    }
]

数据返回是一个json格式的,说一下各个参数的含义吧,只说关键的监控字段

参数 值(栗子中的值) 含义
ActiveCount 0 当前连接池中活跃连接数
ActivePeak 1 连接池中活跃连接数峰值
ActivePeakTime 2020/4/13 16:12 活跃连接池峰值出现的时间
BlobOpenCount 0 Blob打开数
ClobOpenCount 0 Clob打开数
CommitCount 0 提交数
ConnectionHoldTimeHistogram 0,0,0,0,0,0,0,0 连接持有时间分布,分布区间为[0-1 ms, 1-10 ms, 10-100 ms, 100ms-1s, 1-10 s, 10-100 s, 100-1000 s, >1000 s],这个值是一个数组,数值的索引位的含义如上述,第几索引上的数据就代表在这个时间区间内包含的连接数
ErrorCount 0 错误数
ExecuteCount 0 执行数
InitialSize 60 连接池建立时创建的初始化连接数
LogicCloseCount 2 产生的逻辑连接关闭总数
LogicConnectCount 2 产生的逻辑连接建立总数
LogicConnectErrorCount 0 产生的逻辑连接出错总数
LoginTimeout 0 数据库客户端登录超时时间
MaxActive 200 连接池中最大的活跃连接数
MinIdle 120 连接池中最小的活跃连接数
NotEmptyWaitCount 0 获取连接时最多等待多少次
NotEmptyWaitMillis 0 获取连接时最多等待多长时间,毫秒为单位
PSCacheAccessCount 0 PSCache访问总数
PSCacheHitCount 0 PSCache命中次数
PSCacheMissCount 0 PSCache未命中次数
PhysicalCloseCount 0 产生的物理关闭总数
PhysicalConnectCount 60 产生的物理连接建立总数
PhysicalConnectErrorCount 0 产生的物理连接失败总数
PoolingCount 60 当前连接池中的连接数
PoolingPeak 60 连接池中连接数的峰值
PoolingPeakTime 2020/4/13 16:12 连接池数目峰值出现的时间
QueryTimeout 0 查询超时数
RollbackCount 0 回滚数
StartTransactionCount 0 事务开始的个数
TransactionHistogram 0,0,0,0,0,0,0,0 事务运行时间分布,分布区间为[0-10 ms, 10-100 ms, 100-1 s, 1-10 s, 10-100 s, >100 s],这个值是一个数组,数值的索引位的含义如上述,第几索引上的数据就代表在这个时间区间内包含的事务数
TransactionQueryTimeout 0 事务查询超时数
WaitThreadCount 0 当前等待获取连接的线程数

使用druid的监控组件进行数据库连接池的监控就为大家说到这里,欢迎大家来交流,指出文中一些说错的地方,让我加深认识。
谢谢大家!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,869评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,716评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,223评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,047评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,089评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,839评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,516评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,410评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,920评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,052评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,179评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,868评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,522评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,070评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,186评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,487评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,162评论 2 356

推荐阅读更多精彩内容