druid监控及慢sql记录
本文提要
前文也提到过druid不仅仅是一个连接池技术,因此在将整合druid到项目中后,这一篇文章将去介绍druid的其他特性和功能,作为一个辅助工具帮助提升项目的性能,本文的重点就是两个字:监控。
我的github地址点这里
druid监控
因为已经做了整合,所以这一步较为简单,只需要在web.xml中做一下简单的Servlet配置即可。
<!--druid监控页面 -->
<servlet>
<servlet-name>DruidStatView</servlet-name>
<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
<init-param>
<!-- 不允许清空统计数据 -->
<param-name>resetEnable</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<!-- 用户名 -->
<param-name>loginUsername</param-name>
<param-value>yourname</param-value>
</init-param>
<init-param>
<!-- 密码 -->
<param-name>loginPassword</param-name>
<param-value>yourpassword</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DruidStatView</servlet-name>
<url-pattern>/druid/*</url-pattern>
</servlet-mapping>
<!--druid监控页面 -->
重新构建工程并启动tomcat,在浏览器中输入druid即可进入到druid监控面板的登录页面。
输入在web.xml中配置的账号和密码即可进入监控后台,注意,配置的账号和密码是明文,你在这里配置什么就是什么,并没有经过加密。
OK,我们看到系统的一些简述信息,当然,你也应该看到启动时间了,没错,我就是在下班后9点多才开始写这篇博客的。
接下来是比较重要的一个页面,SQL监控
从这个页面里我们能看到网站从启动开始执行的sql语句统计,每一条语句的执行次数、执行时间之和、最慢执行时间、执行错误数等等多个统计指标,通过这个统计数据我们可以找出sql语句的执行规律及sql语句的不足之处,也可以通过错误数来定位程序的不足并及时修改。
在配置druid数据源时,做了如下配置,开启了druid防火墙。
<property name="filters" value="wall,stat"/>
因此在控制后台也能见到SQL防火墙面板,如下图所示:
面板里是防御统计及sql的统计信息,这里用的是druid默认的一些过滤规则,并没有自定义复杂的防火墙规则,因此也不细说了。
但是再去点击其他几个页面的时候,发现页面中都是空数据,因为并没有开启druid相关的功能。这是比较粗糙些的做法,不用做其他配置,就是默认的filters配置加上Servlet配置,虽然也有监控和统计,但是并不是特别满足需求。
开启慢sql监控
在SQL监控中,有一项关于sql执行最慢执行时间的统计,但是只有一个值,就是一条sql语句最慢的执行时间记录,其他执行时间是看不到的,只能通过总时间来进行粗略的估计,还有一个问题就是,一旦项目重启,这些记录就全都没了,因此制定对应的日志输出策略是极其必要的。
大致想法就是通过druid获取所有项目运行中的慢sql执行记录,并将这些数据输出到日志文件中,查了一下druid的资料,调试了一段时间,最终成功实现。
1、修改数据源配置,增加拦截器:
<property name="proxyFilters">
<list>
<ref bean="stat-filter"/>
<ref bean="log-filter"/>
</list>
</property>
2、配置慢sql及日志拦截器:
<!-- 慢SQL记录 -->
<bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter">
<!-- 慢sql时间设置,即执行时间大于200毫秒的都是慢sql -->
<property name="slowSqlMillis" value="200"/>
<property name="logSlowSql" value="true"/>
</bean>
<bean id="log-filter" class="com.alibaba.druid.filter.logging.Log4jFilter">
<property name="dataSourceLogEnabled" value="true" />
<property name="statementExecutableSqlLogEnable" value="true" />
</bean>
3、修改log4j配置文件,增加慢sql日志的输出策略:
log4j.rootLogger=DEBUG,debug,druid
# Druid
log4j.logger.druid.sql=WARN,druid
log4j.logger.druid.sql.DataSource=WARN,druid
log4j.logger.druid.sql.Connection=WARN,druid
log4j.logger.druid.sql.Statement=WARN,druid
log4j.appender.druid=org.apache.log4j.DailyRollingFileAppender
log4j.appender.druid.layout=org.apache.log4j.PatternLayout
log4j.appender.druid.layout.ConversionPattern= [%d{HH\:mm\:ss}] %c{1} - %m%n
log4j.appender.druid.datePattern='.'yyyy-MM-dd
log4j.appender.druid.Threshold = WARN
log4j.appender.druid.append=true
log4j.appender.druid.File=${catalina.home}/logs/ssm-maven/druid-slow-sql.log
重启再去查看druid监控后台,可以看到跟原来有了一些差别,由于设置了慢sql的时间为大于200毫秒,所以执行时间大于200毫秒的都会被红色标注。
再去tomcat日志文件夹中查看日志文件,可以看到日志文件中已经存在配置的慢sql日志文件了,点击查看其中也已经有了慢sql记录的数据,慢sql以及这条sql语句执行的时间都有记录。
开启spring监控
在监控面板中看到有spring监控这个功能,但是由于没有进行配置,所以功能不能用,查了一下druid的文档,最终开启了spring监控功能。
配置如下:
<bean id="druid-stat-interceptor"
class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor">
</bean>
<bean id="druid-stat-pointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut"
scope="prototype">
<property name="patterns">
<list>
<value>com.ssm.maven.core.service.*</value>
<value>com.ssm.maven.core.dao.*</value>
</list>
</property>
</bean>
<aop:config>
<aop:advisor advice-ref="druid-stat-interceptor" pointcut-ref="druid-stat-pointcut"/>
</aop:config>
再次查看spring监控页面,已经有了数据:
原先的做法只能对sql语句及jdbc相关操作进行监控,无法监控到代码级别的运行,因此进一步设置,结合spring的AOP特性对代码的运行效果进行监控,druid可以做到方法级别的监控,这个功能可以让你发现方法的调用频率及方法的运行时间,及时做出调整和修正使得项目更健壮。
druid监控及慢sql记录的更多相关文章
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(十一)数据层优化-druid监控及慢sql记录
本文提要 前文也提到过druid不仅仅是一个连接池技术,因此在将整合druid到项目中后,这一篇文章将去介绍druid的其他特性和功能,作为一个辅助工具帮助提升项目的性能,本文的重点就是两个字:监控. ...
- SpringBoot配置 druid 数据源配置 慢SQL记录
spring: datasource: url: jdbc:mysql://127.0.0.12:3306/test?autoReconnect=true&useUnicode=true&am ...
- SpringBoot之使用Druid连接池,SQL监控和spring监控
项目结构 1.引入maven依赖 <dependencies> <dependency> <groupId>org.springframework.boot< ...
- (二十二)SpringBoot之使用Druid连接池以及SQL监控和spring监控
一.引入maven依赖 <dependencies> <dependency> <groupId>org.springframework.boot</grou ...
- SpringBoot之使用Druid连接池以及SQL监控和spring监控
一.引入maven依赖 <dependencies> <dependency> <groupId>org.springframework.boot</grou ...
- SpringMVC4+MyBatis+SQL Server2014+druid 监控SQL运行情况
前言 在基于SpringMVC+MyBatis的开发过程中,我们希望能看到自己手写SQL的执行情况,在开发阶段我们可以配置log4j在控制台里基于debug模式查看,那么上线后,在生产声我们想查看SQ ...
- druid监控sql完整版
利用Druid实现应用和SQL监控 一.关于Druid Druid是一个JDBC组件,它包括三部分: DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体系. D ...
- SpringBoot(七):集成DataSource 与 Druid监控配置
绑定DataSource:Spring Boot默认的数据源是:org.apache.tomcat.jdbc.pool.DataSource,Druid是Java语言中最好的数据库连接池,并且能够提供 ...
- springboot配置Druid监控
整体步骤: (1) —— Druid简单介绍,具体看官网: (2) —— 在pom.xml配置druid依赖包: (3) —— 配置application.propertie ...
随机推荐
- windows下的java+maven项目环境搭建
年底了,进公司刚好半年,于是全新一轮的挑战开始:让我接触java项目了,真的是全新的,完全一片茫然.经过了半个月的折腾,把环境搭了一遍又一遍,还可以小小的改一下程序,还OK啦~继续努力.接下来,进入正 ...
- ABAP文件加密解密-PGP
1.SM69创建命令 2.解密 DATA: lv_para = '--passphrase (key) -o /oracle/sfdata/sfdata.csv -d /oracle/sfdata/s ...
- 设计模式-(17)策略模式 (swift版)
一,概念: 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们可以相互替换,让算法独立于使用它的客户而独立变化. 二,使用场景 1.针对同一类型问题的多种处理方式,仅仅是具体行为有差别时: ...
- mysql07---主从复制
mysql主从复制,replication,(可以一主多从,不可一从多主) 原理: 主从分离,最少2台服务器.主服务器里面的数据,要在从服务器里面都有一份. 把主服务器的所有insert,update ...
- Package vim is not available, but is referred to by another package及我的vim配置
新安装的ubuntu,先安装vim,但是安装出现 Reading package lists... Done Building dependency tree Reading state inform ...
- 并不对劲的bzoj1861: [Zjoi2006]Book 书架
传送门-> 这题的正确做法是splay维护这摞书. 但是并不对劲的人选择了暴力(皮这一下很开心). #include<algorithm> #include<cmath> ...
- 并不对劲的splay
splay和不加任何旋转一定会被卡的二叉搜索树的唯一区别就是每次操作把当前节点旋转到根. 旋转有各种zig.zag的组合方式,感觉很麻烦,并不对劲的人并不想讲. 其实可以找出一些共性将它们合并.设ls ...
- jenkins配置发送邮件时,日志中显示发送成功,但是邮箱没有收到邮件
遇到这种问题,是因为安装的Email Extension Plugin插件版本与jenkins不兼容, 经试验2.39.3版本可以正常发送邮件,在jenkins主目录中 将2.39.3的文件和文件夹复 ...
- Vue解决安卓4.4不兼容的问题
1.npm安装 npm install babel-polyfillnpm install es6-promise package.json中会出现 "babel-polyfill" ...
- 把pdf传给kindle
对于不是纯文本的,最好主题不要用convert,虽说用了之后可以转换为大小更合适的字体,但是会破坏本来PDF的格式,变得更加不合适阅读