ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

druid配置logback日志记录慢sql以及应用数据源监控开启

2020-05-26 15:03:07  阅读:393  来源: 互联网

标签:数据源 druid new bean sql import initParams


性能排查在数据源方面,通过使用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提供的相关监控使用起来方便,功能也是十分强大。

有了强大的监控支持,慢慢去定位系统的性能瓶颈去吧,希望通过我们的努力可以给客户更好用户体验。

 

标签:数据源,druid,new,bean,sql,import,initParams
来源: https://www.cnblogs.com/sloveling/p/druid_log.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有