Spring Boot如何监控SQL运行情况?

目录
  • 前言
  • MYSQL监控慢SQL
    • MySLQ如果需要监控慢SQL,需要在/ect/my.cnf文件中进行如下配置:
    • 输出结果
  • Druid监控慢SQL
    • 添加Druid依赖
    • Yml文件中配置Druid属性
    • 监控页面
    • 特殊说明
  • Prometheus+grafana实现SQL监控
  • 结尾

前言

监控SQL是现在项目运维中必要的一部分,通过SQL监控我们能够明显的分析系统那些地方存在问题,从而有效的进行SQL优化,提升系统的性能。那么常见的SQL监控方式又那些呢?

MYSQL监控慢SQL

MySLQ如果需要监控慢SQL,需要在/ect/my.cnf文件中进行如下配置:

slow_query_log = ON
slow_query_log_file = /data/mysql/slow.log
long_query_time = 2
  • slow_query_log:打开慢SQL日志
  • slow_query_log_file:输出慢SQL文件的路径
  • long_query_time : 定义SQl时间为多久为慢SQL

输出结果

select userid from t_user;
# Time: 2022-04-16T20:40:30.411674Z
# Query_time: 90.438767  Lock_time: 0.000000 Rows_sent: 43  Rows_examined: 25360591

输出SQL的查询时间、锁定时间、影响的行数等。

Druid监控慢SQL

Spring Boot默认使用的数据库连接池为HikariCP,但是Druid连接池为阿里巴巴开发的,提供强大的监控和扩展功能,如果项目中使用Druid连接池而没有开启SQL监控,那么对于项目来说就是一种浪费,那么Spring Boot Druid如何监控SQL呢?

添加Druid依赖

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
      </dependency>	

	 <dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<scope>runtime</scope>
		</dependency>

      <!--druid -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid-spring-boot-starter</artifactId>
			<version>${druid.version}</version>
		</dependency>

Yml文件中配置Druid属性

spring:
  messages:
    encoding: UTF-8
    baseName: i18n/messages
    fallbackToSystemLocale: false
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/test?allowMultiQueries=true&characterEncoding=utf8&serverTimezone=Hongkong&useSSL=true&nullNamePatternMatchesAll=true&autoReconnect=true
      username: xx
      password: yy
      #初始连接池值
      initial-size: 10
      //最大连接数
      max-active: 100
      //最小连接数
      min-idle: 10
      #连接等待时间
      max-wait: 60000
      #
      pool-prepared-statements: true
      max-pool-prepared-statement-per-connection-size: 20
      time-between-eviction-runs-millis: 60000
      min-evictable-idle-time-millis: 300000
      validation-query: SELECT 1 FROM DUAL
      test-while-idle: true
      test-on-borrow: false
      test-on-return: false
      #配置StatViewServlet监控页面
      stat-view-servlet:
            #开启
            enabled: true
            #访问监控路径的地址
            url-pattern: /druid/*
            #不允许清空,重新统计
            reset-enable: false
            #登录用户名
            login-username: admin
            #登录密码
            login-password: admin
            #允许访问地址
            allow: 127.0.0.1
      ########## 配置WebStatFilter,用于采集web关联监控的数据 #########
      web-stat-filter:
        #启动statFilter
        enabled: true
        #排除的url
        exclusions: /druid/*,*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico
        #开启session统计
        session-stat-enable: true
        #session的最大个数,默认为100
        session-stat-max-count: 1000
        #过滤的url
        url-pattern: /*
      filter:
           stat:
             #开启慢sql统计
             log-slow-sql: true
             #慢sql的时间
             slow-sql-millis: 2000
             merge-sql: true
             #开启druid datasource监控
             enabled: true
           wall:
             config:
             multi-statement-allow: true

监控页面

1.启动项目,访问http://ip:port/druid, 进入登录页面,输入用户名和密码登录

2.数据源页面,该页面配置的是当前dataSource的相关信息

3.SQL监控页面

此页面会展示所有执行sql的语句,包含SQL执行次数、执行的时间、事务执行次数、最慢执行时间等信息

4.URI监控,统计了所有Controller接口的访问以及执行情况

5.去除相关的广告

访问监控页面的时候,你可能会在页面底部(footer)看到阿里巴巴的广告 原因:引入的druid的jar包中的common.js(里面有一段js代码是给页面的footer追加广告的) 去除的方案有两种

5.1 直接注释源码中的的相关代码

找到 druid-1.19 jar包 在common.j中直接注释如下代码即可

  // this.buildFooter();

5.2 自定义过滤来去除广告

@WebFilter(urlPatterns = "/druid/js/common.js")
public class RemoveDruidAdvertFilter implements Filter
{
    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException
    {
        String text = Utils.readFromResource("support/http/resources/js/common.js");
        text = text.replace("this.buildFooter();", "");
        response.getWriter().write(text);
    }
}

注意需要在中添加相关的过滤器

@SpringBootApplication
@ServletComponentScan("com.skywares.fw.common.filter")//配置过滤器的地址
public class FwCoreApplication
{
    public static void main(String[] args)
    {
        SpringApplication.run(FwCoreApplication.class, args);
    }
}

特殊说明

目前Driud监控SQL功能只能针对单数据库的情况,对于多数据源的场景无法满足。

Prometheus+grafana实现SQL监控

Prometheus+grafana实现SQL监控方案比较复杂,本文中就不详细讲解了,在后续的性能优化专栏中会重点讲解。

结尾

SQL监控是项目中比较重要的一环,本文从几个方法来讲解如何监控SQL,如果项目中还没使用此功能,那么赶紧去开启吧。

到此这篇关于Spring Boot如何监控SQL运行情况的文章就介绍到这了,更多相关SpringBoot监控SQL内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringBoot对Druid配置SQL监控功能失效问题及解决方法

    由于我使用的是properties类型的配置文件,在对druid的参数进行配置的时候,多加了druid,也就是spring.datasource.druid.xxx,运行sql语句后SQL监控功能无效. spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/userinfo?useUnicode=true&characterEnc

  • SpringBoot统计、监控SQL运行情况的方法详解

    目录 1 基本概念 2 添加依赖 3 配置相关属性 3.1 如何配置 Filter 4 监控页面 5 sql监控 6 慢sql记录 7 spring 监控 8 去 Ad(广告) (1) 直接手动注释这段代码 (2) 使用过滤器过滤 9 获取 Druid 的监控数据 总结 1 基本概念 Druid 是Java语言中最好的数据库连接池. 虽然 HikariCP 的速度稍快,但是,Druid能够提供强大的监控和扩展功能,也是阿里巴巴的开源项目. Druid是阿里巴巴开发的号称为监控而生的数据库连接池,

  • Spring Boot监控SQL运行情况的全过程

    目录 前言 1. 准备工作 2. 引入 Druid 3. 测试 4. 去广告 总结 前言 今天想和大家聊一聊 Druid 中的监控功能. Druid 数据库连接池相信很多小伙伴都用过,个人感觉 Druid 是阿里比较成功的开源项目了,不像 Fastjson 那么多槽点,Druid 各方面一直都比较出色,功能齐全,使用也方便,基本的用法就不说了,今天我们来看看 Druid 中的监控功能. 1. 准备工作 首先我们来创建一个 Spring Boot 工程,引入 MyBatis 等,如下: 选一下 M

  • SpringBoot集成Druid连接池进行SQL监控的问题解析

    Druid连接池是阿里巴巴开源的数据库连接池项目.Druid连接池为监控而生,内置强大的监控功能,监控特性不影响性能. Druid的监控统计功能是通过filter-chain扩展实现,采集的信息非常全面,包括SQL执行.并发.慢查.执行时间区间分布等.并且Druid内置提供了一个StatViewServlet用于展示Druid的统计信息,提高html页面展示非常完备的监控信息,可以快速诊断系统的瓶颈. 而Druid增加StatFilter之后,能采集大量统计信息,同时对性能基本没有影响.Stat

  • Spring Boot如何监控SQL运行情况?

    目录 前言 MYSQL监控慢SQL MySLQ如果需要监控慢SQL,需要在/ect/my.cnf文件中进行如下配置: 输出结果 Druid监控慢SQL 添加Druid依赖 Yml文件中配置Druid属性 监控页面 特殊说明 Prometheus+grafana实现SQL监控 结尾 前言 监控SQL是现在项目运维中必要的一部分,通过SQL监控我们能够明显的分析系统那些地方存在问题,从而有效的进行SQL优化,提升系统的性能.那么常见的SQL监控方式又那些呢? MYSQL监控慢SQL MySLQ如果需

  • 如何利用Spring Boot 监控 SQL 运行情况

    目录 前言 1. 准备工作 2. 引入 Druid 3. 测试 4. 去广告 前言 今天想和大家聊一聊 Druid 中的监控功能. Druid 数据库连接池相信很多小伙伴都用过,个人感觉 Druid 是阿里比较成功的开源项目了,不像 Fastjson 那么多槽点,Druid 各方面一直都比较出色,功能齐全,使用也方便,基本的用法就不说了,今天我们来看看 Druid 中的监控功能. 1. 准备工作 首先我们来创建一个 Spring Boot 工程,引入 MyBatis 等,如下: 选一下 MyBa

  • Spring Boot Actuator监控端点小结

    在Spring Boot的众多Starter POMs中有一个特殊的模块,它不同于其他模块那样大多用于开发业务功能或是连接一些其他外部资源.它完全是一个用于暴露自身信息的模块,所以很明显,它的主要作用是用于监控与管理,它就是:spring-boot-starter-actuator. spring-boot-starter-actuator模块的实现对于实施微服务的中小团队来说,可以有效地减少监控系统在采集应用指标时的开发量.当然,它也并不是万能的,有时候我们也需要对其做一些简单的扩展来帮助我们

  • springboot 使用Spring Boot Actuator监控应用小结

    微服务的特点决定了功能模块的部署是分布式的,大部分功能模块都是运行在不同的机器上,彼此通过服务调用进行交互,前后台的业务流会经过很多个微服务的处理和传递,出现了异常如何快速定位是哪个环节出现了问题? 在这种框架下,微服务的监控显得尤为重要.本文主要结合Spring Boot Actuator,跟大家一起分享微服务Spring Boot Actuator的常见用法,方便我们在日常中对我们的微服务进行监控治理. Actuator监控 Spring Boot使用"习惯优于配置的理念",采用包

  • Spring Boot应用监控的实战教程

    概述 Spring Boot 监控核心是 spring-boot-starter-actuator 依赖,增加依赖后, Spring Boot 会默认配置一些通用的监控,比如 jvm 监控.类加载.健康监控等. 我们之前讲过Docker容器的可视化监控,即监控容器的运行情况,包括 CPU使用率.内存占用.网络状况以及磁盘空间等等一系列信息.同样利用SpringBoot作为微服务单元的实例化技术选型时,我们不可避免的要面对的一个问题就是如何实时监控应用的运行状况数据,比如:健康度.运行指标.日志信

  • 关于Prometheus + Spring Boot 应用监控的问题

    1. Prometheus是什么 Prometheus是一个具有活跃生态系统的开源系统监控和告警工具包.一言以蔽之,它是一套开源监控解决方案. Prometheus主要特性: 多维数据模型,其中包含由指标名称和键/值对标识的时间序列数据 PromQL,一种灵活的查询语言 不依赖分布式存储: 单服务器节点是自治的 时间序列收集通过HTTP上的pull模型进行 通过中间网关支持推送(push)时间序列 通过服务发现或静态配置发现目标 支持多种模式的图形和仪表盘 为什么用pull(拉取)而不用push

  • spring boot actuator监控超详细教程

    spring boot actuator介绍 Spring Boot包含许多其他功能,可帮助您在将应用程序推送到生产环境时监视和管理应用程序. 您可以选择使用HTTP端点或JMX来管理和监视应用程序. 审核,运行状况和指标收集也可以自动应用于您的应用程序. 总之Spring Boot Actuator就是一款可以帮助你监控系统数据的框架,其可以监控很多很多的系统数据,它有对应用系统的自省和监控的集成功能,可以查看应用配置的详细信息,如: 显示应用程序员的Health健康信息 显示Info应用信息

  • 教你开发脚手架集成Spring Boot Actuator监控的详细过程

    目录 集成 引入依赖 配置文件 访问验证 端点 Endpoints Health Info 安全 高级 自定义健康检查 自定义metrics指标 PID PORT过程监控 自定义管理端点路径 自定义管理服务器端口 暴露数据给Prometheus 集成 引入依赖 在项目的pom.xml中增加以下依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-

随机推荐