Druid Monitor小記


繼上篇DruidDataSource源碼分析之后 , 公司又要求做一個Druid的數據庫監控 , 以及spring監控 , 研究一小時 , 總結出了一點經驗 , 特此貼出來分享一下

 

一 . 利用Druid Monitor監控JavaWeb項目

    1. 首先配置數據源

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
    xmlns:context="http://www.springframework.org/schema/context"  
    xmlns:aop="http://www.springframework.org/schema/aop"  
    xmlns:tx="http://www.springframework.org/schema/tx"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
           http://www.springframework.org/schema/aop   
           http://www.springframework.org/schema/aop/spring-aop-3.0.xsd  
           http://www.springframework.org/schema/tx  
           http://www.springframework.org/schema/tx/spring-tx-3.0.xsd  
           http://www.springframework.org/schema/context  
           http://www.springframework.org/schema/context/spring-context-3.0.xsd">  
      
      
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init"  
        destroy-method="close">  
           
        <!-- 基本屬性 url、user、password -->  
        <property name="driverClassName" value="oracle.jdbc.OracleDriver" />  
        <property name="url" value="jdbc:oracle:thin:@192.168.102.93:1521:mydb1" />  
        <property name="username" value="my_v31" />  
        <property name="password" value="my_v31" />  
      
        <!-- 配置初始化大小、最小、最大 -->  
        <property name="initialSize" value="1" />  
        <property name="minIdle" value="1" />  
        <property name="maxActive" value="20" />  
      
        <!-- 配置獲取連接等待超時的時間 -->  
        <property name="maxWait" value="60000" />  
      
        <!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒 -->  
        <property name="timeBetweenEvictionRunsMillis" value="60000" />  
      
        <!-- 配置一個連接在池中最小生存的時間,單位是毫秒 -->  
        <property name="minEvictableIdleTimeMillis" value="300000" />  
          
        <!--   
            用來檢測連接是否有效的sql,要求是一個查詢語句。  
            如果validationQuery為null,testOnBorrow、testOnReturn、  
            testWhileIdle都不會其作用   
        -->  
        <property name="validationQuery" value="SELECT 1 FROM DUAL" />  
        <property name="testWhileIdle" value="true" />  
        <property name="testOnBorrow" value="false" />  
        <property name="testOnReturn" value="false" />  
      
        <!--   
            打開PSCache,並且指定每個連接上PSCache的大小   
            如果用Oracle,則把poolPreparedStatements配置為true,mysql可以配置為false  
        -->  
        <property name="poolPreparedStatements" value="true" />  
        <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />  
      
        <!-- 配置監控統計攔截的filters,去掉后監控界面sql無法統計 -->  
        <property name="filters" value="stat,wall,log4j" />  
          
        <!--   
            如果配置了proxyFilters,此配置可以不配置  
            druid.stat.mergeSql=true 合並執行的相同sql,避免因為參數不同而統計多條sql語句  
            druid.stat.slowSqlMillis=10000 用來配置SQL慢的標准,執行時間超過slowSqlMillis的就是慢  
              
        <property name="connectionProperties" value="druid.stat.mergeSql=true;druid.stat.slowSqlMillis=10000" />  
         -->  
           
        <!-- 監控統計攔截的filters -->  
        <!-- 並在filters屬性中配置了log4j -->  
        <property name="proxyFilters">  
            <list>  
                <ref bean="stat-filter" />  
                <ref bean="log-filter" />  
            </list>  
        </property>  
    </bean>  
      
    <!-- 慢SQL記錄-->  
    <bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter">  
        <property name="mergeSql" value="true" />  
        <property name="slowSqlMillis" value="10000" />  
        <property name="logSlowSql" value="true" />  
    </bean>  
      
    <bean id="log-filter" class="com.alibaba.druid.filter.logging.Log4jFilter">  
        <!-- <property name="resultSetLogEnabled" value="false" /> -->  
        <!-- <property name="statementExecutableSqlLogEnable" value="true" /> -->  
    </bean>  
      
    <!-- 配置druid監控spring jdbc -->  
    <bean id="druid-stat-interceptor" class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor" />  
   
    <bean id="druid-stat-pointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut" scope="prototype">  
        <property name="patterns">  
            <list>  
                <value>com.XXX.stat.service.*</value>  
                <value>com.XXX.stat.dao.*</value>  
            </list>  
        </property>  
    </bean>  
      
    <aop:config proxy-target-class="true">  
        <aop:advisor advice-ref="druid-stat-interceptor" pointcut-ref="druid-stat-pointcut" />  
    </aop:config>  
</beans>

  2 . 配置web.xml

<filter>  
        <filter-name>DruidWebStatFilter</filter-name>  
        <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>  
        <init-param>  
            <!-- 經常需要排除一些不必要的url,比如.js,/jslib/等等。配置在init-param中 -->  
            <param-name>exclusions</param-name>  
            <param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>  
        </init-param>  
        <!-- 缺省sessionStatMaxCount是1000個。你可以按需要進行配置 -->  
        <init-param>  
            <param-name>sessionStatMaxCount</param-name>  
            <param-value>1000</param-value>  
        </init-param>  
        <!-- druid 0.2.7版本開始支持profile,配置profileEnable能夠監控單個url調用的sql列表 -->  
        <init-param>  
            <param-name>profileEnable</param-name>  
            <param-value>true</param-value>  
        </init-param>  
        <init-param>  
            <param-name>principalSessionName</param-name>  
            <param-value>users.username</param-value>  
        </init-param>  
        <!-- 你可以關閉session統計功能   
        <init-param>   
            <param-name>sessionStatEnable</param-name>   
            <param-value>true</param-value>  
        </init-param> -->  
    </filter>  
       
    <servlet>  
        <servlet-name>DruidStatView</servlet-name>  
        <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>  
        <!--   
            deny優先於allow,如果在deny列表中,就算在allow列表中,也會被拒絕。  
            如果allow沒有配置或者為空,則允許所有訪問  
         -->  
        <init-param>  
            <param-name>allow</param-name>  
            <param-value>128.242.127.1/24,127.0.0.1</param-value>  
        </init-param>  
        <init-param>  
            <param-name>deny</param-name>  
            <param-value>192.168.1.118</param-value>  
        </init-param>  
        <!-- 在StatViewSerlvet輸出的html頁面中,有一個功能是Reset All,執行這個操作之后,會導致所有計數器清零,重新計數 -->  
       <span style="white-space:pre"> </span><init-param>  
            <span style="white-space:pre">    </span><param-name>resetEnable</param-name>  
            <span style="white-space:pre">    </span><param-value>false</param-value>  
        <span style="white-space:pre">    </span></init-param>  
        <span style="white-space:pre">    </span><!--  用戶名和密碼 -->  
        <span style="white-space:pre">    </span><init-param>  
            <param-name>loginUsername</param-name>  
            <param-value>druid</param-value>  
        </init-param>  
        <init-param>  
            <param-name>loginPassword</param-name>  
            <param-value>druid</param-value>  
        </init-param>  
    </servlet>  
    <servlet-mapping>  
        <servlet-name>DruidStatView</servlet-name>  
        <url-pattern>/druid/*</url-pattern>  
    </servlet-mapping> 

  3 . 配置好web.xml之后,啟動自己的JavaWeb服務,訪問一下地址就可以看到Druid的監控界面。比如我在這里的訪問地址是:http://web4.bj1:8119/druid/index.htm

   

  4 . 輸入用戶名密碼(druid/druid)就可以進入監控頁面。

 

 

 

二 . 監控JavaSE項目 ( 使用druidStat.sh 這個命令腳本在Git源碼的druid\src\main\scripts目錄下

     首先貼出腳本內容

     1 . druidStat.sh

    

    #!/bin/sh  
      
    if [ -z "$JAVA_HOME" ] ; then  
      echo "Error: JAVA_HOME is not defined."  
      exit 1  
    fi  
      
    "$JAVA_HOME/bin/java" -Dfile.encoding="UTF-8" -cp "./druid-0.2.6.jar:$JAVA_HOME/lib/tools.jar" com.alibaba.druid.support.console.DruidStat  $@

  2 . druidStat.bat

   

@echo off  
  
rem Copyright 1999-2011 Alibaba Group Holding Ltd.  
rem   
rem Licensed under the Apache License, Version 2.0 (the "License");  
rem you may not use this file except in compliance with the License.  
rem You may obtain a copy of the License at  
rem   
rem      http://www.apache.org/licenses/LICENSE-2.0  
rem   
rem Unless required by applicable law or agreed to in writing, software  
rem distributed under the License is distributed on an "AS IS" BASIS,  
rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  
rem See the License for the specific language governing permissions and  
rem limitations under the License.  
  
  
set _RUNJAVA="%JAVA_HOME%\bin\java.exe"  
set _TOOLSJAR="%JAVA_HOME%\lib\tools.jar"  
  
%_RUNJAVA% -classpath "./druid-0.2.6.jar;%_TOOLSJAR%" com.alibaba.druid.support.console.DruidStat %*

    3 . 有了這個腳本就可以在服務器上查看監控信息了 , 只修要修改druid的jar包的路徑和版本號.下面舉個例子 , 用 sh druidStat.sh -help即可一目了然的看到使用方法 , 具體就不描述了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM