1. 程式人生 > >使用Druid監控專案的sql和service

使用Druid監控專案的sql和service

本文提要

前文也提到過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> </servlet> <servlet-mapping> <servlet-name>DruidStatView</servlet-name> <url-pattern>/druid/*</url-pattern> </servlet-mapping> <filter> <filter-name
>
druidWebStatFilter</filter-name> <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class> <init-param> <param-name>exclusions</param-name> <param-value>/public/*,*.js,*.css,/druid*,*.jsp,*.swf</param-value
>
</init-param> <init-param> <param-name>principalSessionName</param-name> <param-value>sessionInfo</param-value> </init-param> <init-param> <param-name>profileEnable</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>druidWebStatFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

然後在瀏覽器輸入:http://ip+port/專案名/druid/sql.html,即可進入監控sql頁面

這裡寫圖片描述

從這個頁面裡我們能看到網站從啟動開始執行的sql語句統計,每一條語句的執行次數、執行時間之和、最慢執行時間、執行錯誤數等等多個統計指標,通過這個統計資料我們可以找出sql語句的執行規律及sql語句的不足之處,也可以通過錯誤數來定位程式的不足並及時修改。

在配置druid資料來源時,做了如下配置,開啟了druid防火牆。

<!-- 配置監控統計攔截的filters -->
<property name="filters" value="stat" /> 

因此在控制後臺也能見到SQL防火牆面板。

開啟慢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毫秒的都會被紅色標註。

開啟spring監控

在監控面板中看到有spring監控這個功能,但是由於沒有進行配置,所以功能不能用,查了一下druid的文件,最終開啟了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.boya.*.service.*</value>
            </list>
        </property>
    </bean>
    <aop:config>
        <aop:advisor advice-ref="druid-stat-interceptor"
            pointcut-ref="druid-stat-pointcut" />
    </aop:config>
    <!-- end -->

然後就可以看到spring監控了
這裡寫圖片描述