本文提要

前文也提到过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可以做到方法级别的监控,这个功能可以让你发现方法的调用频率及方法的运行时间,及时做出调整和修正使得项目更健壮。

转载于:https://www.cnblogs.com/telwanggs/p/7484854.html

druid监控及慢sql记录相关推荐

  1. druid监控配置及sql注入防火墙配置

    转载自https://www.cnblogs.com/heartlifes/p/6971015.html 原文及更多文章请见个人博客:http://heartlifes.com druid是阿里巴巴开 ...

  2. SpringBoot 开启Druid监控统计功能

    Druid 相关配置属性: 配置Druid数据源(连接池): 如同以前 c3p0.dbcp 数据源可以设置数据源连接初始化大小.最大连接数.等待时间.最小连接数 等一样,Druid 数据源同理可以进行 ...

  3. druid监控记录mysql_使用Druid监控SQL执行状态

    本文使用Druid的连接池替换掉原来的C3P0连接池,然后配置Druid的相关属性,完成对spring web工程的JDBC监控. 其实,我采用Druid替换其它连接池,最关键的一个理由是Druid有 ...

  4. 使用Druid监控SQL执行状态

    本文使用Druid的连接池替换掉原来的C3P0连接池,然后配置Druid的相关属性,完成对Spring web工程的JDBC监控. 其实,我采用Druid替换其它连接池,最关键的一个理由是Druid有 ...

  5. SpringBoot使用Druid监控SQL

    文章目录 1 监控mybatis下SQL 1.1 Druid简介 1.2 添加pom.xml依赖 1.3 配置相关属性 1.3.1 如何配置 Filter 1.4 监控页面 1.5 sql监控 1.6 ...

  6. 使用Druid监控SQL

    今天把C3P0连接池更换了Druid数据,没有想到Druid监控SQL如此强大,以下是我配置Druid数据源步骤 Druid介绍 Druid是一个JDBC组件库,包括数据库连接池.SQL Parser ...

  7. springboot整合druid 监控sql

    介绍 Druid是阿里巴巴开发的号称为监控而生的数据库连接池,在功能.性能.扩展性方面,都超过其他数据库连接池,包括DBCP.C3P0.BoneCP.Proxool.JBoss DataSource等 ...

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

    本文使用Druid的连接池替换掉原来的C3P0连接池,然后配置Druid的相关属性,完成对Spring web工程的JDBC监控. 其实,我采用Druid替换其它连接池,最关键的一个理由是Druid有 ...

  9. druid监控页面 关闭_新版druid监控页面SQL不显示问题

    新版druid数据源驱动的SQL监控如果用以前的老版本配置是无法监控到SQL的: application.yml spring: datasource: druid: filters: - stat ...

最新文章

  1. suse11sp4配置vnc显示gnome
  2. 将XML转为HTML
  3. HDU1002(高精度模拟加法)
  4. (转)Properties Editor为你解除通过native2ascii进行Unicode转码的烦恼
  5. mxnet slice_axis
  6. Android ViewPager多页面滑动切换以及动画效果---换view
  7. 分布式面试题(含解答)
  8. simulink中使用memory模块实现变量的累加和(离散积分器)
  9. 【每周NLP论文推荐】 对话管理中的标志性论文介绍
  10. 【bzoj2850】巧克力王国 KD-tree
  11. Django之orm查询
  12. ETHREAD APC 《寒江独钓》内核学习笔记(4)
  13. [面试专题]Vue.js 2.0 独立构建和运行时构建的区别
  14. 72. 文件上传(1)
  15. 量子统计巨正则系综应用理想费米气体与波色气体性质详解
  16. shim是什么?Vue响应式原理
  17. calloc、realloc、malloc
  18. 【Linux杂篇】经常登录Linux,用户密码背后的知识了解一下
  19. 遗传算法解决旅行商问题(Python版)
  20. java 音频 二进制互转,Java/Android 二进制数据与String互转

热门文章

  1. Redis集群之官方集群
  2. java菱形乱码 编码_【分享】Java开发过程中中文乱码问题总结
  3. (229)DPU加速数据处理
  4. python 添加图片_python3 tkinter添加图片和文本
  5. 数字地和模拟地都是地,为什么要分开?
  6. cdev_alloc和cdev_init
  7. oracle输入命令为什么显示2,oracle安装后完善2-2 sqlplus配置变量 命令提示符如何显示为用户名...
  8. 【LeetCode】剑指 Offer 50. 第一个只出现一次的字符
  9. 【高校宿舍管理系统】终章 完成主页以及项目总结
  10. Mysql之数据库锁(表锁和行锁)详解