本发明涉及一种动态数据库连接池实现DB监控的方法。
背景技术:
目前主流数据库性能指标监控,主要由工具如zabbix、nagios、cacti等通过自身丰富插件或自开发脚本来实现特定指标监控或由Agent方式监控目标。
Agent方式对目标入侵性高,占用目标机资源,且Agent方式不便于监控目标的动态扩展。Agent在目标机中进程,可能会受到用户或其它操作影响。工具如Zabbix、Nagios等配置繁琐,各式脚本或插件同样需要运行在目标端。
技术实现要素:
有鉴于此,本发明旨在提出一种动态数据库连接池实现DB监控的方法,以解决上述背景技术中提到的问题。
为达到上述目的,本发明的技术方案是这样实现的:
一种动态数据库连接池实现DB监控的方法,通过MQ传递目标创建和删除目标操作的消息,应用监听消息后ConnectionPoolManager动态创建/删除相应目标的连接池。
进一步的,具体包括如下步骤:
(1)用户创建新的监控目标,MQ传递新建动作和目标数据库信息;
(2)连接池管理器建立相应Ip连接池;
(3)在Quratz定时器辅助下,定时扫描目标集合;
(4)依据DB类型和IP获取ConnectionPoolManager中相应连接池并获取当前活跃链接,如没有活跃链接会自动创建新的连接。
进一步的,所述步骤(1)中,MQ传递新建动作和目标数据库信息包括但不限于Ip,port,username,password,DB_type。
进一步的,所述步骤(2)中,连接池由ConcurrentHashMap来实现,键值为数据库类型和IP拼接。
进一步的,数据库可以为MySQL、Oracle或postgresql。
相对于现有技术,本发明所述的一种动态数据库连接池实现DB监控的方法具有以下优势:
本发明通过无Agent方式监控数据库,并连接池随监控目标动态变化,无侵入,易扩展,适用于多种数据库类型。
附图说明
构成本发明的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为本发明实施例所述的一种动态数据库连接池实现DB监控的方法原理示意图。
具体实施方式
需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
下面将参考附图并结合实施例来详细说明本发明。
本发明主要通过MQ传递目标创建和删除目标操作的消息,应用监听消息后ConnectionPoolManager动态创建/删除相应目标的连接池。如图所1所示,受监控数据库可以为MySQL、Oracle或postgresql等。当用户创建新的监控目标,MQ传递新建动作和目标数据库信息如Ip,port,username,password,DB_type等,连接池管理器建立相应Ip连接池,该连接池可以由ConcurrentHashMap来实现,键值为数据库类型和IP拼接。在Quratz定时器辅助下,定时扫描目标集合如每分钟,依据DB类型和IP获取ConnectionPoolManager中相应连接池并获取当前活跃链接如没有活跃链接会自动创建新的连接,执行相应指标收集语句后通过Druid批量持久化到性能监控数据库内供上层应用展示。
具体操作过程:
首先实例管理类监听特定队列,消费消息,持久化并创建/删除相应实例DB连接池,并用ConcurrentHashMap维护起来,DB类型和ip拼接作为key,IConnectionPool作为Value。连接池由DB model类PropertyBean和AbstractPropertyBean来初始化基础配置如用户名、密码、驱动、最小最大连接数等,相同关系型数据库属性属于父类。
项目启动时,加载定时任务如实例定时扫描任务、历史数据清除任务等。定时扫描如每分钟,获取监控目标并加入单线程阻塞队列,消费队列分发给相应处理线程池(不同数据库),调用相应指标抓取类。
指标抓取类通过目标基础信息建立与目标端连接,并加载相应SQL列表从SQL XML文件中,持久化来提供外部接口请求。不同指标语句通过XML标签来维护,结构依据需求可以自行定义,本应用只涉及基础SQL。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。