企业实战之阿里druid统一监控方案,你了解吗?

德鲁伊(Druid)后台监控配置详细操作。生产环境定位问题方法 从写System.out.println(“hello world!”)开始,到现在我一直认为,一个项目的系统上线,完成CURD(增删改查)的代码远远不够。为便于项目快速定位问题、排查思路、压力监控、加载缓慢等疑难杂症,你们如今又留了几手去捕捉呢?当然,成熟的软件公司会有运维部的支撑,极大程度上帮忙定位和解决了非代码上问题。对我现在的情况而言,拿到的产线环境,甚至还要自己去敲命令挂载磁盘…因此,不得不为上线后的问题排查做好几手的准备。今天就分下一下个人在项目中使用的Druid的监控配置。 阅读详情

前言

相信大家对阿里的druid数据库连接池很熟悉了,在国内使用数据库操作的时候,绝大部分都会引用druid。当然今天不是介绍怎么使用druid,而是分析一下druid的监控。我们先来回顾一下druid是什么吧?

简介

1、Druid是阿里开源的一个JDBC应用组件, 其包括三部分:

  • DruidDriver: 代理Driver,能够提供基于Filter-Chain模式的插件体系。

  • DruidDataSource: 高效可管理的数据库连接池。

  • SQLParser: 实用的SQL语法分析

2、通过Druid连接池中间件, 我们可以实现:

  • 可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。

  • 替换传统的DBCP和C3P0连接池中间件。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。

  • 数据库密码加密。直接把数据库密码写在配置文件中,容易导致安全问题。DruidDruiver和DruidDataSource都支持PasswordCallback。

  • SQL执行日志,Druid提供了不同的LogFilter,能够支持Common-Logging、Log4j和JdkLog,你可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。

  • 扩展JDBC,如果你要对JDBC层有编程的需求,可以通过Druid提供的Filter-Chain机制,很方便编写JDBC层的扩展插件

监控

druid最大的特色就是有相应的监控,可以帮忙我们查看到执行SQL日志,慢SQL语句,执行SQL的性能以及防止SQL注入等功能。

​

 

数据源

数据源菜单显示数据库连接池的基本信息,如连接地址、连接类型、最大连接数、最小连接数、初始连接等信息。

可通过逻辑连接打开次数、逻辑连接关闭次数来判断系统中是否存在有连接未关闭的情况(正常情况下打开次数和关闭次数应该一致)

SQL监控

SQL监控显示系统已执行过的每条SQL语句的执行情况。通过执行数、执行时间、最慢时间、事务中、错误数、最大并发、执行时间分布等统计维度来展现。

​

 



1、执行数:本条sql语句已执行的次数 2、执行时间:本条sql语句累计执行时间(单位:毫秒) 3、最慢:本条sql语句执行最慢一次的耗时(单位:毫秒) 4、执行时间分布【- - - - - - - -】:这8个 – 分别代表8个耗时区间的次数,从左至右依次是: 0-1毫秒次数、1-10毫秒次数、10-100毫秒次数、100-1000毫秒次数、1-10秒次数、10-100秒次数、100-1000秒次数、大于1000秒次数。

WEB应用

主要统计本应用的并发、请求、事务提交、事务回滚等信息,另外统计了本应用在各操作系统上、各浏览器上的访问次数。

SQL防火墙

分防御统计、表访问统计、函数调用统计、SQL防御统计-白名单、SQL防御统计-黑名单这几项。其中若是涉嫌SQL注入的SQL语句将被拦截,出现在SQL防御统计-黑名单中

请求URL监控

统计了应用中各url的访问次数、请求时间、并发数等信息

​

编辑切换为居中

添加图片注释,不超过 140 字(可选)

Session监控

显示应用中session的请求时间、请求次数、最大并发等数据

​

编辑切换为居中

添加图片注释,不超过 140 字(可选)

问题一

我们看到了druid监控功能的强大,也发现了一个重大的问题,如图

​

编辑切换为居中

添加图片注释,不超过 140 字(可选)

druid控制台是针对每个实例的,不同的实例就有不同的druid控制台;但在生产环境中,会有多个实例,那监控平台会存在多个,那我们运维/开发人员查看的时候就麻烦了,需要打开多个控制台。不能整体查看监控数据。

那怎么解决呢?

源码分析

我们先来看一下druid的监控功能是怎么实现的?

我们看一下DruidDataSource核心类,里面有一个LogStatsThread线程



private LogStatsThread logStatsThread;

在DruidDataSource初始化init方法中,调用了createAndLogThread方法,再看一下createAndLogThread这个方法,在timeBetweenLogStatsMillis属性大于0的时候就实例化LogStatsThread线程。

​

编辑切换为居中

添加图片注释,不超过 140 字(可选)

再来看一下LogStatsThread线程做了什么

​

编辑切换为居中

添加图片注释,不超过 140 字(可选)

LogStatsThread线程一直循环调用logStats方法,每次sleep睡眠timeBetweenLogStatsMillis毫秒。那我们就知道这个参数的本质就是每隔多少毫秒去执行logStats方法。

​

编辑切换为居中

添加图片注释,不超过 140 字(可选)

上面的代码表示,数据监控是存在DruidDataSourceStatValue实例里面,然后statLogger对象进行记录。到底存放到哪里,就由statLogger决定。

druid默认的DruidDataSourceStatLogger接口实现 DruidDataSourceStatLoggerImpl,

​

 

​

 

可以看到Druid是以Json形式进行日志输出的,具体的数据处理在log(DruidDataSourceStatValue)方法中进行,这个方法也是后续我们需要用到的。

方案一

Druid默认的持久化方式是进行文件记录,如果我们想要自定义监控记录的持久化方式则需要自定义StatLogger,参考以上StatLogger的默认实现,我们可以定义一个简单的StatLogger,如下所示:

)

在这里,我们重写了log(DruidDataSourceStatValue)方法,一个简单的StatLogger就定制完成了,下面需要在dataSource中配置这个statLogger,我们在配置文件中druid节点下加上如下配置:



time-between-log-stats-millis: 60000 stat-logger:

配置过程中发现 stat-logger 对应的是一个 DruidDataSourceStatLoggerAdapter对象,而yml配置文件中仅支持基本数据类型和Map、List等类型,查看源码可以发现,在DruidAbstractDataSource类中有如下定义:

​

 

支持直接设置statLogger对象和通过类名设置两种方式,回到配置文件中发现没有类名的这个配置项,如下:

​

 

既然通过配置文件不能够直接配置,那么我们就以配置类的方式来配置Druid数据源,新建一个Druid的配置类,如下所示:

 

其中@ConfigurationProperties表示配置的属性,这里会将配置文件中以spring.datasource.druid为前缀的值映射到DataSource对象的同名属性上,在这个方法中,我们将DatSource的statLogger设置为我们自定义的StatLogger。

这样配置之后,我们就可以看到每隔10秒会做监控数据的持久化了。

问题二

我们再仔细看一下上面的方案,如图

​

 

上面的方案会有一些问题

1、如果持久化数据库挂了,就会导致监控数据会丢失 2、在很多实例的时候,都会给数据库进行提交监控数据;会产生高并发问题 3、druid组件和监控持久化有一定耦合关系了。监控持久化业务异常就有可能会影响到druid

怎么解决呢?我们再回来看看druid之前的监控数据方案,druid默认把监控数据记录下日志文件中,这个方案其实已经把监控数据持久化到磁盘上面了,只是日志文件是保存在每个服务实例上面的。那是不是我们只要把这些日志都收集起来,保存到某处,这样是不是也就可以了?

方案二

我们来调整一下方案

这个方案涉及到大数据方面的知识点了,其实也不是太难,大家只要理解架构思路就行了

 

如上核心思想就是采集日志文件,然后把日志数据发送到消息中间件kafka(这样就起到了削峰作用);再独立开发个持久化服务订阅kafka消息,做持久化业务。

这个方案就解决了之前方案一的问题,又能抗高并发,又能解耦合

方案中有个Flume组件,他的作用就是用来采集文件,然后同步到各个地方,常用到的就是同步到kafka中。

现在大多数Druid配置都是log4j作为logger,但是logback作为新一代的日志框架,我们有理由使用logback配置Druid Filter,之前的配置是:



dataSourceA.filters=stat,wall,log4j

Druid支持配置多种Filter,配置信息保存在druid-xxx.jar! /META-INF/druid-filter.properties下面,具体如下:

​

 

我们知道,logback是slf4j的实现类,按照规定格式,改成下面就可以了:



dataSourceA.filters=stat,wall,slf4j

具体logback的配置,这里就不介绍了。

总结

本文介绍了druid的监控数据的统一化管理,可以方便我们开发运维进行监控,虽然我们已经把监控数据都进行了采集,那怎么在界面上面显示,这个就需要报表可视化的方案了,有时间老顾会给大家介绍,谢谢!!!

Alibaba Druid简单介绍及使用 Alibaba Druid(以下简称 Druid)是阿里巴巴开源的数据库连接池、SQL 解析、监控和扩展功能的工具集合。它不仅仅是一个数据库连接池,还提供了强大的监控和管理功能,可以帮助开发者更好地管理数据库连接、优化SQL查询以及监控数据库性能。 阅读详情

相关推荐

SpringBoot+Druid多数据源配置:从Hikari切换到Druid的完整流程

本文详细介绍了如何将SpringBoot项目从HikariCP迁移到Druid连接池,并实现多数据源配置。通过对比Druid与HikariCP的优势,提供完整的依赖配置、单数据源和多数据源设置、MyBatis-Plus集成以及监控功能配置,帮助开发者提升数据库连接管理效率和系统监控能力。

qsc901234567的博客 971

带你了解SpringBoot---开启Durid 监控

HiKariCP: 目前市面上非常优秀的数据源, 是springboot2 默认数据源。Druid: 性能优秀,Druid 提供性能卓越的连接池功能外【Java 基础】,还集成了SQL 监控,黑名单拦截等功能,强大的监控特性,通过Druid 提供的监控功能,可以清楚知道连接池和SQL 的工作情况,所以根据项目需要,我们也要掌握Druid 和SpringBoot 整合。整合Druid 到Spring-Boot 方式● 自定义方式● 引入starter 方式。

m0_73557631的博客 6178

Spring Boot 2.7.5项目实战:将RuoYi-Vue-Plus的数据源从Druid平滑迁移到HikariCP

本文详细介绍了在Spring Boot 2.7.5项目中,如何将RuoYi-Vue-Plus框架的数据源从Druid平滑迁移到HikariCP。通过对比分析两种连接池的特性,提供依赖调整、配置文件修改、代码清理及性能测试的完整步骤,帮助开发者实现高效、稳定的数据源切换,提升系统性能。

weixin_34098209的博客 349

阿里巴巴(alibaba)系列_druid 数据库连接池_监控(一篇搞定)记录执行慢的sql语句...

参考帖子:http://www.cnblogs.com/han-1034683568/p/6730869.html Druid数据连接池简介 Druid是Java语言中最好的数据库连接池。Druid能够提供强大的监控和扩展功能。 性能好,同时自带监控页面,可以实时监控应用的连接池情况以及其中性能差的sql,方便我们找出应用中连接池方面的问题。 Druid是一个JDBC组件,它...

weixin_34235371的博客 777

Spring Boot 集成 Druid 监控数据源

Druid 是阿里巴巴开源平台上的一个项⽬,整个项⽬由数据库连接池、插件框架和 SQL 解析器器组成,该项目主要是为了了扩展 JDBC 的⼀些限制,可以让程序员实现一些特殊的需求,⽐如向密钥服务请求凭证、统计SQL 信息、 SQL 性能收集、 SQL 注⼊检查、 SQL 翻译等,程序员可以通过定制来实现⾃己需要的功能。Druid ⾸先是一个数据库连接池,但它不仅是⼀个数据库连接池,还包含了了一个 ProxyDriver,⼀系列列内置的 JDBC 组件库,⼀个 SQL Parser。

九师兄 850

基于Spring Boot的Druid数据库连接池集成实战Demo

别以为用了MyBatis/Hibernate就安全了,动态拼SQL的情况依然存在。Druid的就是为此而生。Druid的成功告诉我们:一个好的中间件,不仅要解决问题,更要预防问题。它让我们意识到,数据库访问不应该是一个“用了就行”的基础能力,而是一个需要持续观测、主动防护、动态调优的关键系统。下次当你再次打开准备配置Druid时,希望你能多花一分钟思考:这些参数背后的逻辑是什么?我的系统真的安全吗?监控能不能第一时间发现问题?毕竟,真正的稳定性,藏在细节里。

weixin_42601608的博客 878

高可用利器:阿里巴巴 Druid-HA 实现数据库监控与管理新高度

高可用利器:阿里巴巴 Druid-HA 实现数据库监控与管理新高度 是一个由阿里巴巴开源的数据库连接池组件,而 druid-ha 则是其高可用(High Availability)版本,专为复杂的企业级应用场景设计,提供了一系列强大的监控和管理功能,帮助开发者更好地理解和优化数据库性能。 项目简介 druid-ha 建立在原生 Druid 的基础上,增强了对数据库健康检查、故障切换、负载均衡等高可...

gitblog_00027的博客 545

Java数据库连接池实战:Druid详解与应用

Druid 是阿里巴巴开源的一款高性能、功能全面的数据库连接池组件,专为 Java 应用设计。它不仅实现了标准的 JDBC 接口,提供数据库连接的高效管理,还内置了强大的监控、统计、SQL解析和防御 SQL 注入等功能,广泛应用于企业级项目中。相较于传统的连接池(如 C3P0、DBCP),Druid 在性能、可维护性和安全性方面均有显著提升。

weixin_29215509的博客 839

数据库之连接池Druid

Druid是阿里巴巴开源的高性能数据库连接池组件,广泛应用于高并发互联网应用和企业级项目中。它提供了高效的连接管理、详细的监控信息、丰富的配置选项和安全特性。Druid支持快速创建和回收数据库连接,减少性能开销,并通过连接复用机制降低频繁连接的成本。其监控功能帮助开发者实时了解数据库状态,优化性能。Druid还内置防SQL注入功能,增强安全性。此外,它易于与Spring等框架集成,支持动态配置和插件扩展,Druid能显著提升应用性能和响应速度,是企业级应用的首选数据库连接池解决方案。

一个老Java开发的自白 1851

潜在图神经网络学习笔记(Latent Graph Neural Networks for Human Skeleton-based Action Recognition)

在本文中,我们从一个新的角度来解决这个问题,通过将非结构化的骨架数据映射到潜在空间,如图2所示,这里称为潜在特征空间或嵌入空间,其中一组项嵌入在一个流形中[ 1 ],并且在潜在空间中彼此更相似的项被放置在彼此更接近的位置。潜在空间中的位置可以被认为是由一组潜在变量定义的,这些潜在变量来源于对象的相似性。将骨架数据嵌入到流形中,消除了远近邻居之间的冗余依赖关系,以解决加权问题。得到具有多尺度聚合特征的稀疏图矩阵结构,以更好地理解骨骼关节的直接加权信息。

qq_45631885的博客 489

(超详细)Qt入门和配置Visual Studio的Qt环境

内容写了Qt入门,创建并编写第一个Qt程序,以及配置VS编写Qt程序的环境。(超级详细)

LY549826LY549264的博客 7678

SpringBoot整合Druid连接池:从配置到监控的完整实践指南

数据库连接池是Java后端开发中的核心组件,它通过复用数据库连接来提升应用性能和资源利用率。其工作原理是预先创建并管理一定数量的连接,应用需要时从池中获取,使用完毕后归还,避免了频繁创建和销毁连接的开销。这项技术对于构建高并发、可扩展的现代应用具有重要价值,尤其在微服务架构和云原生环境中,能够有效管理数据库连接资源,防止连接泄露和数据库过载。在实际应用场景中,开发者需要根据业务负载动态调整连接池参数,并借助监控工具实时洞察SQL执行性能和连接池状态。本文以阿里巴巴开源的Druid连接池为例,深入探讨其在Sp

weixin_34236869的博客 373

学习笔记9--智能驾驶的功能安全设计之功能安全设计

本系列博客包括6个专栏,分别为:《自动驾驶技术概览》、《自动驾驶汽车平台技术基础》、《自动驾驶汽车定位技术》、《自动驾驶汽车环境感知》、《自动驾驶汽车决策与控制》、《自动驾驶系统设计及应用》。此专栏是关于《自动驾驶系统设计及应用》书籍的笔记.

FUXI_Willard 1794

从密码到角色:Druid连接池监控权限体系的终极升级实践

Druid作为阿里云计算平台DataWorks团队出品的数据库连接池,专为监控而生,在保障数据库连接高效管理的同时,其监控权限体系的安全性至关重要。随着系统复杂度提升,单纯的密码验证已难以满足精细化权限管理需求,角色化权限控制成为必然趋势。 ### 一、传统密码验证的局限性 在早期的Druid监控体系中,主要依赖简单的密码验证机制。通过在配置中设置`druid.monitor.username`

gitblog_00829的博客 820

ArduPilot代码解析之四 — 姿态和位置控制

ArduPilot采用级联控制架构实现飞行器的姿态和位置管理。该系统通过位置→速度→加速度→姿态→角速率→电机指令的逐级转换,将高级指令转化为底层执行信号。位置控制采用三维独立控制,水平轴与垂直轴分别处理;姿态控制通过角度误差→角速率→电机输出的两层级联实现。系统支持多种输入模式,并内置运动学整形功能确保轨迹平滑。不同飞行器类型(多旋翼、直升机、潜艇等)有专门的调参方案,通过调整PID参数、加速度限制等实现最优控制性能。该架构兼顾控制精度与飞行稳定性,适用于各类自主飞行场景。

rainercool的专栏 825

使用JAVA 的 POI 库 将DOC文件转为DOCX文件

java使用POI库,将doc文件转为docx文件

qq_45808266的博客 5706

Druid配置不当引发的安全风险:手把手教你如何加固监控页面

本文深入剖析了Druid监控面板因配置不当导致的未授权访问高危漏洞,并提供了从基础到企业级的完整安全加固方案。文章详细讲解了常见错误配置模式、核心安全参数设置,并手把手指导如何通过IP白名单、强密码认证及多层次防御策略,有效防范信息泄露风险,保障数据库监控安全。

kiwi8的博客 644

手把手教你分析解决Innovus DRC Violation 和Antenna Effect Violation

数字IC后端设计培训教程之手把手教你分析解决Innovus DRC Violation 和Antenna Effect Violation

weixin_37584728的博客 2934

MyBatis核心:Druid连接池深度解析

在当今的Java应用开发中,数据库连接池的管理是保证系统性能和稳定性的关键环节。随着业务量的不断增长,传统的数据库连接管理方式已经无法满足高效、稳定的需求。Druid作为一款高性能、可扩展的数据库连接池,已经成为MyBatis框架中不可或缺的一部分。本文将围绕Druid进行介绍,探讨其作用和特点。在传统的数据库应用中,每次数据库操作都需要创建和销毁数据库连接,这种做法在并发量较低的情况下尚可接受,但在高并发环境下,频繁的连接创建和销毁会导致系统性能严重下降,甚至出现连接池耗尽的情况。

我是Java程序员廖志伟,感谢朋友们的支持!不定期贡献一篇高品质、过万文字、图文并茂且附有视频解说、满载代码示例注释的良心之作,坚决杜绝粗制乱造。 1036

基于matlab的形态学的权重自适应图像去噪

数学形态学以图像的形态特征为研究对象,通过设计一套独特的数字图像处理方法和理论来描述图像的基本特征和结构,通过引入集合的概念来描述图像中元素与元素、部分与部分的关系运算。因此,数学形态学的运算由基础的集合运算(并、交、补等)来定义,并且所有的图像矩阵都能被方便地转换为集合。随着集合理论研究的不断深入和实际应用的拓展,图像形态学处理也在图像分析、模式识别等领域起着重要的应用。实验结果表明,如果仅通过串联滤波器去噪,则往往具有一定的局限性,在结果图像中也保留着较为明显的噪声。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 757

STM32实战开发(122):基于STM32的溶解氧检测系统设计与实现

溶解氧(DO, Dissolved Oxygen)是水质检测中至关重要的指标之一,尤其是在环境监测、工业废水处理以及水产养殖等领域,溶解氧的浓度直接影响到水体的生态环境和生物的健康。电流的大小就可以用来反映水中溶解氧的浓度。本博客将详细介绍如何基于STM32微控制器开发一个智能溶解氧检测系统,内容涵盖系统的硬件设计、软件开发、优化与调试等方面,提供实际的代码实现与实验数据,并展望溶解氧检测系统在物联网环境下的应用。为了提高系统的精度,可以优化ADC的采样率,增加传感器的校准频率,或使用更加精确的传感器。

2201_76125393的博客 1601

Spring Boot项目里Druid监控页面没设密码?手把手教你从信息泄露到后台接管

本文详细分析了Spring Boot项目中Druid监控页面未授权访问的安全风险,从信息泄露到后台接管的完整攻击链,并提供了多层次防御方案。通过配置密码保护、IP限制、数据脱敏等措施,有效防止Druid未授权漏洞带来的安全隐患,保障企业级应用的数据安全。

weixin_30243533的博客 340

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

druid产生大量mysql的sleep连接

在使用druid连接池后,show full processlist 后发现有大量sleep状态的链接,高峰期时达到1000多个,项目框架用的springmvc+mybatis,由spring管理的链接在每次数据库操作后应该是释放连接的,排除是代码泄露连接的可能性。有的话就会关闭该连接。如果某个高峰时间段,每台连接数都跑满,则数据库中每个连接sleep的时间是(300+120)秒的时间,如果在这300到420秒的时间段内,请求很频繁的话,数据库中的连接数短期内是不会降下来的。

java1527的博客 2275

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

阿里云RDS升降配如何实现业务无感?从连接池到DTS的实战方案

数据库弹性伸缩是云原生架构的核心能力之一,其本质是通过动态调整CPU、内存等资源配置来应对业务流量波动。传统升降配操作常伴随实例重启,导致数据库连接中断,影响业务连续性。为实现平滑的资源调整,需从应用架构与云服务工具两个层面着手。在应用侧,通过优化数据库连接池的健康检查机制(如设置test-on-borrow)与集成重试框架,可有效缓冲中断冲击,这是构建高可用系统的通用基础。在云平台侧,可结合读写分离架构隔离影响,或利用DMS(数据管理服务)的自动化流程管理变更风险。对于要求极高的场景,可基于DTS(数据传

weixin_33997389的博客 337

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

视频教程-阿里Canal从入门到实战-大数据

阿里Canal从入门到实战 10年一线开发及项目管理经验,6年以上大数据项目...

weixin_33231229的博客 1182
上一篇: Spring多种启动初始化方案,看这篇就够了
下一篇: 105 道 Java 面试题,认真思考对你面试很有价值
java小姜在线冲
博客等级 码龄4年 53粉丝 137原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值