• 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提供的相关监控使用起来方便,功能也是十分强大。

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

  • 相关阅读:
    SQL Join的一些总结
    大型网站架构演变和知识体系
    从零开始学习jQuery (九) jQuery工具函数
    对称加密(1) 对称加密基本原理
    javascript 几个字符串截取函数
    .net 登录博客园 并且发表文章一篇
    304 Not Modified 与 IfModifiedSince 及 CacheControl
    代码设置输出缓存头的一些问题记录
    js事件冒泡,默认行为,阻止冒泡
    http协议中的一些基础知识
  • 原文地址:https://www.cnblogs.com/sloveling/p/druid_log.html
Copyright © 2020-2023  润新知