druid配置logback日志記錄慢sql以及應用數據源監控開啟


性能排查在數據源方面,通過使用druid提供的慢sql日志記錄以及應用數據源監控來跟蹤,分析,定位應用上的性能問題。

基於druid配置開啟慢sql的例子很多,大部分都是使用log4j,但項目中使用的是logback,所以一下都是基於logback的配置。

1.druid慢日志記錄的開啟配置

1.1 配置Filter

    <!-- 慢SQL記錄 -->
    <bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter">
        <!-- 慢sql時間設置,即執行時間大於1000毫秒的都是慢sql -->
        <property name="slowSqlMillis" value="1000"/>
        <property name="logSlowSql" value="true"/>
    </bean>

    <bean id="log-filter" class="com.alibaba.druid.filter.logging.Slf4jLogFilter">
        <property name="dataSourceLogEnabled" value="true" />
        <property name="statementExecutableSqlLogEnable" value="true"/>
    </bean>

1.2 數據源使用Filter

<bean id="ims-druidDataSource-adb" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close" primary="false">
       <property name="url" value="${spring.datasource.adb.url}"/>
       <property name="username" value="${spring.datasource.adb.username}"/>
       <property name="password" value="${spring.datasource.adb.password}"/>
       <property name="driverClassName" value="${spring.datasource.adb.driver-class-name}"/>
    <!--druid數據源使用Filter -->
       <property name="proxyFilters">
           <list>
               <ref bean="stat-filter"/>
               <ref bean="log-filter"/>
           </list>
       </property>
</bean>

1.3配置logback

 

  <appender name="DruidFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在記錄的日志文件的路徑及文件名 -->
        <file>${LOG_HOME}/log_druid_slow_sql.log</file>
        <!-- 日志記錄器的滾動策略,按日期,按大小記錄 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 歸檔的日志文件的路徑,例如今天是2013-12-21日志,當前寫的日志文件路徑為file節點指定,可以將此文件與file指定文件路徑設置為不同路徑,從而將當前日志文件或歸檔日志文件置不同的目錄。
            而2013-12-21的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->
            <fileNamePattern>${LOG_HOME}/log-druid_slow_sql-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- 除按日志記錄之外,還配置了日志文件不能超過2M,若超過2M,日志文件會以索引0開始,
            命名日志文件,例如log-error-2013-12-21.0.log -->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>200MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <!-- 追加方式記錄日志 -->
        <append>true</append>
        <!-- 日志文件的格式 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!-- 此日志文件只記錄級別的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <logger name="com.alibaba.druid.filter.stat.StatFilter" level="ERROR">
        <appender-ref ref="DruidFILE" />
    </logger>

效果如下:會在日志目錄按天生成日志文件,將慢sql記錄到日志文件中。

 

 

2.配置druid內置監控頁面(基於springboot)

直接上代碼:

import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

/**
 * <P>
 * 描述:druidCofig監控
 * </p>
 *
 * @author lishang Created on 2020/5/8 17:24
 * @version 1.0
 */
@Configuration
public class DruidConfig {


    //1.配置管理后台的servlet
    @Bean
    public ServletRegistrationBean statViewServlet(){
        //druid監控頁面的url
        ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
        Map<String,String> initParams = new HashMap<>();

        initParams.put("loginUsername","druid");   //登陸用戶名
        initParams.put("loginPassword","123456");  //密碼
        initParams.put("allow","");                //允許哪些ip
        initParams.put("deny","");                 //拒絕ip
        bean.setInitParameters(initParams);
        return bean;
    }
    //2.配置一個web監控的filter,監控sql
    @Bean
    public FilterRegistrationBean webStatFilter(){
        FilterRegistrationBean bean = new FilterRegistrationBean();
        bean.setFilter(new WebStatFilter());

        Map<String,String> initParams = new HashMap<>();
        initParams.put("exclusions","*.js,*.css,*.html,/druid/*");
        bean.setInitParameters(initParams);
        bean.setUrlPatterns(Arrays.asList("/*"));
        return bean;
    }
}

然后, 就可以通過也沒訪問了,如下:

 

 數據源相關信息,一目了然:

 

 不得不承認,durid提供的相關監控使用起來方便,功能也是十分強大。

有了強大的監控支持,慢慢去定位系統的性能瓶頸去吧,希望通過我們的努力可以給客戶更好用戶體驗。

 


免責聲明!

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



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