druid监控数据转存mysql_使用Druid监控SQL执行状态

本文使用Druid的连接池替换掉原来的C3P0连接池,然后配置Druid的相关属性,完成对Spring web工程的JDBC监控。

其实,我采用Druid替换其它连接池,最关键的一个理由是Druid有对SQL执行的监控统计功能。 :)

本文就是来看看看Druid的监控功能。~~~ 一起玩起来 : )

Druid介绍

Druid是一个JDBC组件库,包括数据库连接池、SQL Parser等组件。DruidDataSource是最好的数据库连接池。参考Druid wiki上的文章

Druild包获取

Maven工程中添加druid依赖包:

com.alibaba

druid

1.0.26

Druid使用

替换C3P0连接池

Web工程原先采用C3P0连接池的配置:

destroy-method="close">

改成Druid连接池DruidDataSource

destroy-method="close">

StatViewServlet配置

Druid内置提供了一个StatViewServlet用于展示Druid的统计信息。

这个StatViewServlet的用途包括:

提供监控信息展示的html页面

提供监控信息的JSON API

StatViewServlet是一个标准的javax.servlet.http.HttpServlet,需要配置在你web应用中的WEB-INF/web.xml中。

DruidStatView

com.alibaba.druid.support.http.StatViewServlet

DruidStatView

/druid/*

配置完之后,可以通过如下格式的地址在浏览器访问查看。

http:/://druid

举个例子:

如果host为localhost,port为8080,context为Demo,那么,可以通过如下URL访问。

http://localhost:8080/Demo/druid

fa03b9b84d63551155639d9807cbcccd.png

那么问题来了

查看的时候,能否提供用户名和密码作为验证呢,而不是直接就能看JDBC执行的状态信息?

答案是肯定的。

需要在上述配置的情况下,配置Servlet的 loginUsername 和 loginPassword这两个初始参数。

如:

DruidStatView

com.alibaba.druid.support.http.StatViewServlet

loginUsername

druid

loginPassword

druid

DruidStatView

/druid/*

配置好之后,登录之后才能访问。

2de41e38412f0796245391849c25e03f.png

StatFilter配置

Druid内置提供一个StatFilter,用于统计监控信息。

如果没有配置StatFilter,那么,我们无法获取相关统计信息。

比如:

无法看到SQL监控TAB上的数据。

477279476e689e83ba03bea83dc975c8.png

URI监控TAB中,无法获取JDBC相关的SQL执行信息。

28d3bb8dab4dbf0adae8bb33050a2264.png

如何展示出这些数据呢? 解决的办法就是配置StatFilter。

StatFilter的别名是stat,在spring中使用别名配置方式如下:

将上述stat添加到dataSource中去即可。

destroy-method="close">

添加完毕之后,再来看一下上述两个TAB (SQL监控以及 URI监控)下JDBC的内容:

fb7a0c2f08a0001eff11871261e0b635.png

在SQL监控页面,可以很清楚地看到目前执行SQL的具体情况,包括某条SQL语句执行的时间(平均、最慢)、SQL执行次数、SQL执行出错的次数等。这些信息,可以作为系统SQL语句优化的一个指标。

68dc447c42f91cc3046a91266b0a5f97.png

在URI监控页,可以清楚地看到执行某个动作,关联SQL有多少,请求次数、执行时间、并发数等信息。

StatFilter可以和其他的Filter配置使用,比如, 与log4j组合使用。

5dd5033649ee3fe159018501f309bbf8.png

这样,我们在点击 “记录日志并重置” 的按钮时,Console中就会输入JDBC相关日志,日志采用JSON的方式记录,如:

[INFO ][2016-11-15 20:11:11,677] com.alibaba.druid.pool.DruidDataSourceStatLoggerImpl.log(DruidDataSourceStatLoggerImpl.java:77) -

{"url":"jdbc:mysql://127.0.0.1:3306/Demo?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull","dbType":"mysql","name":"DataSource-958465974","activeCount":0,"poolingCount":1,"connectCount":0,"closeCount":0}

内置Filter别名和对应的Filter类名如下:

别名

Filter类名

default

com.alibaba.druid.filter.stat.StatFilter

stat

com.alibaba.druid.filter.stat.StatFilter

mergeStat

com.alibaba.druid.filter.stat.MergeStatFilter

encoding

com.alibaba.druid.filter.encoding.EncodingConvertFilter

log4j

com.alibaba.druid.filter.logging.Log4jFilter

log4j2

com.alibaba.druid.filter.logging.Log4j2Filter

slf4j

com.alibaba.druid.filter.logging.Slf4jLogFilter

commonlogging

com.alibaba.druid.filter.logging.CommonsLogFilter

慢SQL记录

StatFilter属性slowSqlMillis用来配置SQL慢的标准,执行时间超过slowSqlMillis的就是慢。slowSqlMillis的缺省值为3000,也就是3秒。

在上面的配置中,slowSqlMillis被修改为10秒,并且通过日志输出执行慢的SQL。

slowSqlMillis属性也可以通过connectProperties来配置,例如:

... ...

Wallfilter配置

配置WallFilter,可以起到拦截作用,从而形成SQL的白名单和黑名单。

缺省情况下,配置装载的目录如下:

数据库类型

目录

mysql

META-INF/druid/wall/mysql

oracle

META-INF/druid/wall/oracle

sqlserver

META-INF/druid/wall/sqlserver

postgres

META-INF/druid/wall/postgres

从配置目录中以下文件中读取配置:

deny-variant.txt

deny-schema.txt

deny-function.txt

permit-variant.txt

permit-variant.txt

8807378c1613cd07f34a4f0738e612d8.png

指定配置装载的目录是可以指定,例如:

...

本文实例中,采用如下的配置:

init-method="init">

destroy-method="close">

配置好Wallfilter, 我们就可以看到SQL防火墙 TAB下的内容了。

d8b9d5145c4f172420ea935f78ad448d.png

0c8d91b81cb227adc227152bc1cf3d62.png

因为是默认状态,没有配置任何拦截的属性信息,所以,SQL的执行都在白名单中展示出来了。

配置Spring和jdbc的关联

最后,还有一个Tab的内容没有展示,那就是Spring监控。

Druid提供了Spring和Jdbc的关联监控。

本文在Spring的applicationContext.xml配置文件中配置如下信息,支持方法名的拦截。

class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor">

scope="prototype">

com.demo.mybatis.auto.*

com.demo.mybatis.manual.*

pointcut-ref="druid-stat-pointcut" />

完工后,我们再去看一下,Spring监控的TAB内容,就可以看到相关的MyBatis Mapper执行信息。

f3eeb611a9ac9a5519f357f5bc8a1848.png

在Spring监控页,可以显示相关DAO执行的方法,方法执行的次数、执行的时间等信息。

小结

通过上述几个部分的配置,监控页面上所有的TAB都可以查看信息了。

fb7a0c2f08a0001eff11871261e0b635.png

当然,Druid还有很多其他的功能,在这篇文章中就一一展示,有兴趣的朋友可以在Druid的Github网页上查看。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值