http://www.cnblogs.com/han-1034683568/p/6730869.html
本文提要
前文也提到過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的相關功能,也上傳到了github倉庫,如果你不需要的話,可以根據我在代碼裡寫的注釋删除相關配置檔案即可。