druid監控及慢sql記錄

本文提要

前文也提到過druid不只僅是一個鏈接池技術,所以在將整合druid到項目中後,這一篇文章將去介紹druid的其餘特性和功能,做爲一個輔助工具幫助提高項目的性能,本文的重點就是兩個字:監控。
個人github地址點這裏git

druid監控

由於已經作了整合,因此這一步較爲簡單,只須要在web.xml中作一下簡單的Servlet配置便可。github

<!--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

輸入在web.xml中配置的帳號和密碼便可進入監控後臺,注意,配置的帳號和密碼是明文,你在這裏配置什麼就是什麼,並無通過加密。
spring

OK,咱們看到系統的一些簡述信息,固然,你也應該看到啓動時間了,沒錯,我就是在下班後9點多才開始寫這篇博客的。sql

接下來是比較重要的一個頁面,SQL監控
apache

從這個頁面裏咱們能看到網站從啓動開始執行的sql語句統計,每一條語句的執行次數、執行時間之和、最慢執行時間、執行錯誤數等等多個統計指標,經過這個統計數據咱們能夠找出sql語句的執行規律及sql語句的不足之處,也能夠經過錯誤數來定位程序的不足並及時修改。django

在配置druid數據源時,作了以下配置,開啓了druid防火牆。瀏覽器

<property name="filters" value="wall,stat"/>

所以在控制後臺也能見到SQL防火牆面板,以下圖所示:
tomcat

面板裏是防護統計及sql的統計信息,這裏用的是druid默認的一些過濾規則,並無自定義複雜的防火牆規則,所以也不細說了。bash

可是再去點擊其餘幾個頁面的時候,發現頁面中都是空數據,由於並無開啓druid相關的功能。這是比較粗糙些的作法,不用作其餘配置,就是默認的filters配置加上Servlet配置,雖然也有監控和統計,可是並非特別知足需求。

開啓慢sql監控

在SQL監控中,有一項關於sql執行最慢執行時間的統計,可是隻有一個值,就是一條sql語句最慢的執行時間記錄,其餘執行時間是看不到的,只能經過總時間來進行粗略的估計,還有一個問題就是,一旦項目重啓,這些記錄就全都沒了,所以制定對應的日誌輸出策略是極其必要的。
大體想法就是經過druid獲取全部項目運行中的慢sql執行記錄,並將這些數據輸出到日誌文件中,查了一下druid的資料,調試了一段時間,最終成功實現。

一、修改數據源配置,增長攔截器:

 <property name="proxyFilters"> <list> <ref bean="stat-filter"/> <ref bean="log-filter"/> </list> </property>

二、配置慢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>

三、修改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能夠作到方法級別的監控,這個功能可讓你發現方法的調用頻率及方法的運行時間,及時作出調整和修正使得項目更健壯。

相關文章
相關標籤/搜索