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
druid连接池配置详解StatViewServlet是⼀个标准的javax.servlet.http.HttpServlet,需要配置在你web应⽤中的l中。
DruidStatView
com.alibaba.druid.support.http.StatViewServlet
DruidStatView
/druid/*
配置完之后,可以通过如下格式的地址在浏览器访问查看。
http:/://druid
举个例⼦:
如果host为localhost,port为8080,context为Demo,那么,可以通过如下URL访问。
那么问题来了
查看的时候,能否提供⽤户名和密码作为验证呢,⽽不是直接就能看JDBC执⾏的状态信息?
答案是肯定的。
需要在上述配置的情况下,配置Servlet的 loginUsername 和 loginPassword这两个初始参数。如:
DruidStatView
com.alibaba.druid.support.http.StatViewServlet
loginUsername
druid
loginPassword
druid
DruidStatView
/druid/*
配置好之后,登录之后才能访问。
StatFilter配置
Druid内置提供⼀个StatFilter,⽤于统计监控信息。
如果没有配置StatFilter,那么,我们⽆法获取相关统计信息。
⽐如:
⽆法看到SQL监控TAB上的数据。
URI监控TAB中,⽆法获取JDBC相关的SQL执⾏信息。
如何展⽰出这些数据呢? 解决的办法就是配置StatFilter。
StatFilter的别名是stat,在spring中使⽤别名配置⽅式如下:
将上述stat添加到dataSource中去即可。
destroy-method="close">
添加完毕之后,再来看⼀下上述两个TAB ( SQL监控以及 URI监控)下JDBC的内容:
在SQL监控页⾯,可以很清楚地看到⽬前执⾏SQL的具体情况,包括某条SQL语句执⾏的时间(平均、最慢)、SQL执⾏次数、SQL执⾏出错的次数等。这些信息,可以作为系统SQL语句优化的⼀个指标。
在URI监控页,可以清楚地看到执⾏某个动作,关联SQL有多少,请求次数、执⾏时间、并发数等信息。
StatFilter可以和其他的Filter配置使⽤,⽐如, 与log4j组合使⽤。
这样,我们在点击 “记录⽇志并重置” 的按钮时,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.ding.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
从配置⽬录中以下⽂件中读取配置:
<
<
<
<
<
指定配置装载的⽬录是可以指定,例如:
...
本⽂实例中,采⽤如下的配置:
init-method="init">
destroy-method="close">
配置好Wallfilter, 我们就可以看到SQL防⽕墙 TAB下的内容了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论