本发明属于数据库监控领域,主要应用于互联网行业各种类型的数据库的性能监控。
背景技术:
对于互联网公司而言,数据库应用越来越普及,为了提高数据库可用性,需要为数据库部署监控,除了常规的功能监控,还需要对数据库性能进行监控,从而提高监控精度,及时发现数据库性能问题,保证数据库服务质量。
现有的数据库监控系统及方法的缺点是:
(1)操作繁杂,维护成本高:操作步骤繁多,需要大量的人力维护,维护成本高;
(2)自动化程度低:几乎全部需要人力操作,缺乏自动化,效率低下;
(3)不适合大规模数据库监控:在大规模数据库情况下,使用现由的监控方法,几乎很难沐足监控需求;
(4)功能单一:现有监控方案,功能比较单一。
技术实现要素:
本发明的目的在于针对现有技术的不足,提供一种基于salt的数据库性能自动化监控系统,可以实现各种数据库性能监控自动化,基本没有人工成本,通用性强,并且使用非常方便。
本发明的目的是通过以下技术方案来实现的:一种基于salt的数据库性能自动化监控系统,通过采集数据库服务进程对应的cpu数据来监控数据库性能,该系统包括salt管理端、数据库节点和zabbix服务端;
salt管理端是管理salt客户端的服务器,包括salt管理模块、元信息管理模块和发送监控数据模块;salt管理端通过salt客户端采集数据库节点上数据库服务进程的cpu信息,发送到zabbix服务端。
数据库节点是部署数据库服务的服务器,包括采集性能监控数据模块;不同的数据库服务,端口唯一,每个数据库节点上部署一个salt客户端;数据库节点根据salt管理端传入的参数,调用该节点上的采集脚本,采集性能监控数据。
zabbix服务端是支持短信和邮件的监控服务器,包括监控告警和展示模块;zabbix服务端接收监控数据,并根据告警策略进行告警,以及展示监控数据的趋势图。
进一步地,所述salt管理模块包括:
在所有数据库节点部署salt客户端,salt管理端部署在单独的一台服务器上。
定期调用salt管理端接口,检查所有的数据库节点上的salt客户端是否注册到salt管理端;如未注册,调用salt管理端接口,注册所述salt客户端;如注册失败,则发送通知给管理员。可选择注销某个数据库节点的salt客户端。
在salt管理端,定期检测salt客户端是否通达,如不通,发送通知给管理员。
进一步地,所述元信息管理模块包括:
salt管理端定期调用元信息管理模块,及时获取最新的元信息;所述元信息包括数据库节点主机名、数据库节点ip、数据库端口和数据库进程号以及数据库标识符。
首先,salt管理端获取所有的数据库节点主机名;然后,针对每个数据库节点,salt管理端通过发送指令给salt客户端,获取每个数据库节点上所有的数据库进程信息;通过数据库进程信息,解析得到数据库端口和数据库进程号;同时,根据数据库节点主机名获取数据库节点ip。所述数据库节点主机名、数据库节点ip、数据库端口和数据库进程号保存在元信息文件中。接下来,在salt管理端,扫描元信息文件,传入数据库端口,数据库节点ip,以及zabbix服务端的用户名密码,调用zabbix服务端接口,自动创建相应的所述数据库主机。同时,根据所述数据库主机,解析得到相应的监控模板,根据该监控模板,调用zabbix服务端接口,自动挂载相应的监控模板,包括cpu采集项、cpu报警项和cpu趋势图。如果某个所述数据库主机不需要cpu监控,可以采用手动方式,在zabbix服务端页面卸载对应的监控模板。也可以根据具体需求,调用zabbix服务端功能,调整cpu报警项设置。
进一步地,所述采集性能监控数据模块包括:
需要传入的参数:数据库节点主机名,数据库进程号;
在salt管理端,定期调用元信息管理模块之后,得到所有的数据库节点主机名,以及对应的数据库进程号。然后,根据这些信息,salt管理端发送指令到所述数据库节点对应的salt客户端,首先判断是否存在性能监控脚本,如果存在,那么不需要分发监控脚本,否则,分发监控脚本:然后,在salt管理端上,针对每个数据库节点上的每个数据库进程,采集性能监控数据;采集到的性能监控数据保存在salt管理端本地文件中,称为监控数据文件。
进一步地,所述发送监控数据模块包括:调用zabbix服务端接口,发送所述监控数据文件到zabbix服务端,如果发送监控数据成功,那么需要清空所述监控数据文件;否则需要通知管理员处理。
进一步地,所述监控告警和展示模块包括:
zabbix服务端接收和存储所述监控数据,分析所述监控数据并产生告警,以及通过zabbix服务端的趋势图展示监控数据。调用zabbix服务端自身功能,为数据库性能监控配置短信接收人和邮件接收人,方便第一时间接收告警信息和处理数据库性能问题。
本发明的有益效果如下:
(1)监控部署非常简单:只需要部署zabbix服务端、salt管理端和salt客户端和制定监控模板,操作简单。
(2)维护成本低:以上组件部署完毕后,对于新增加的数据库服务,不需要维护监控,可以实现自动采集和发送监控数据,维护成本为零。
(3)性能监控准确:通过数据库服务占用的cpu反映数据库性能,可以准确发现性能问题。
(4)支持多种类型数据库:适用于对于关系型数据库和非关系型数据库。
(5)易扩展:对于大规模数据库节点,只需要部署多个salt管理端,分别管理各自的salt客户端即可。扩展容易并且可行。
附图说明
图1是本发明基于salt的数据库性能自动化监控系统的总体架构图;
图2是本发明各个模块相互调用的流程图。
具体实施方式
图1是本发明基于salt的数据库性能自动化监控系统的总体架构图。总体上包括三部分:salt管理端、数据库节点和zabbix服务端,每个数据库节点部署一个salt客户端。salt管理端通过salt客户端获取所有数据库进程,然后调用zabbix服务端接口注册数据库主机,接下来,salt管理端通过salt客户端采集所述数据库节点上每个数据库进程对应的监控数据,最后发送所述监控数据到zabbix服务端。
图2是本发明各个模块相互调用的流程图。首先,salt管理模块注册所有数据库节点对应的salt客户端,然后通过salt客户端获取所有数据库节点上的数据库进程,根据所述数据库进程,解析得到数据库进程号和数据库端口号,然后,salt管理端通过salt客户端采集对应的cpu信息;最后,salt管理端调用zabbix服务端接口,发送到zabbix服务端。
下面详细介绍各模块的实现过程:
(1)salt管理端
salt管理端是管理salt客户端的服务器,用于注册和注销salt客户端,发送指令到salt客户端等。这里的指令一般是通过一个或者多个linux命令完成的操作。salt管理端包括salt管理模块、元信息管理模块和发送监控数据模块,功能包括管理salt客户端,分发指令和文件,获取数据库节点上的数据库进程信息,以及发送监控数据到zabbix服务端。
salt管理端通过salt客户端采集数据库节点上数据库服务进程的cpu信息,发送到zabbix服务端。
(2)数据库节点
数据库节点是指部署数据库服务的服务器,这些数据库服务包括常用的关系型数据库和非关系型数据库,不同的数据库服务,端口唯一。
主要包括采集性能监控数据模块,根据salt管理端传入的参数,调用该节点上的采集脚本,采集性能监控数据。
每个数据库节点上,都需要部署一个salt客户端。salt客户端用于接收salt管理端的指令和文件,执行相应的操作,返回结果给salt管理端。
(3)zabbix服务端
zabbix服务端是一种支持短信和邮件的监控服务器,接收监控数据,并根据告警策略进行告警,以及展示监控数据的趋势图。
包括监控告警和展示模块,主要功能是接收和存储监控数据,以及监控告警。
数据库主机是zabbix服务端注册的数据库服务标识,每个数据库服务,数据库主机采用端口_主机方式命名,比如3306_10.1.1.11,表示10.1.1.11数据库节点上的3306数据库服务。
监控模板是指根据数据库的接口,设置采集项、触发器和趋势图,用于挂载到数据库主机中。
各子模块具体实现如下:
(1)salt管理模块
主要功能是在所有数据库节点部署salt客户端,salt管理端部署在单独的一台服务器上。
定期调用salt管理端接口,检查所有的数据库节点上的salt客户端是否注册到salt管理端,检测方式如下:
#salt‐key‐l‐acc|grep‘数据库节点主机名’
如果返回值为假,需要调用salt管理端接口,注册所述salt客户端,注册方式如下:
#salt‐key–a–y‘数据库节点主机名’
否则,不需要调用注册所述salt客户端。如果注册失败,那么发送通知给管理员处理。
如果需要注销某个数据库节点的salt客户端,需要手动执行如下指令:
#salt‐key–d‘数据库节点主机名’
所有的数据库节点对应的salt客户端全部注册到salt管理端后,salt管理端就可以发送指令和文件给salt客户端,完成特定的操作。
并且,在salt管理端,定期检测salt客户端是否通达,检测方式如下:
#salt'数据库节点主机名'cmd.run'exit'
如果返回值为真,说明该数据库节点主机名所述salt客户端可以通达;否则,需要发送通知给管理员,需要人工处理。
(2)元信息管理模块
这里的元信息包括数据库节点主机名、数据库节点ip、数据库端口和数据库进程号以及数据库标识符。
salt管理端定期调用元信息管理模块,及时获取最新的元信息。
首先,salt管理端获取所有的数据库节点主机名:获取方式如下:
#salt‐key–l|grep数据库节点主机名前缀
数据库节点主机名前缀是数据库节点主机名的前缀字符,基于此可以过滤得到所有的数据库节点。
然后,针对每个数据库节点,salt管理端通过发送指令给salt客户端,获取每个数据库节点上所有的数据库进程信息,命令如下:
#salt‘数据库节点主机名’cmd.run‘ps–ef|egrep数据库标识符|egrep–vgrep’
数据库标识符是数据库类型的标识,比如,mysql数据库的数据库标识符为mysqld。
通过数据库进程信息,可以解析得到数据库端口和数据库进程号。
同时,根据数据库节点主机名获取到数据库节点ip。
所述数据库节点主机名、数据库节点ip、数据库端口和数据库进程号保存在元信息文件中。
接下来,在salt管理端,扫描元信息文件,传入数据库端口,数据库节点ip,以及zabbix服务端的用户名密码,调用zabbix服务端接口,自动创建相应的所述数据库主机。同时,根据所述数据库主机,解析得到相应的监控模板,根据该监控模板,调用zabbix服务端接口,自动挂载相应的监控模板,包括cpu采集项,cpu报警项和cpu趋势图。
如果某个所述数据库主机不需要cpu监控,可以采用手动方式,在zabbix服务端页面卸载对应的监控模板即可。
也可以根据具体需求,调用zabbix服务端功能,调整cpu报警项设置。
(3)采集性能监控数据模块
需要传入的参数:数据库节点主机名,数据库进程号
在salt管理端,定期调用元信息管理模块之后,得到所有的数据库节点主机名,以及对应的数据库进程号。然后,根据这些信息,salt管理端发送指令到所述数据库节点对应的salt客户端,首先判断是否存在性能监控脚本,指令如下:#salt‘数据库节点主机名’cmd.run‘ls–l/path/to/监控脚本’
如果返回为真,那么不需要分发监控脚本,否则,通过如下指令分发监控脚本:
#salt'数据库节点主机名'cp.get_filesalt://监控脚本/path/to/监控脚本
然后,在salt管理端上,针对每个数据库节点上的每个数据库进程,采集性能监控数据指令如下:
#salt‘数据库节点主机名’cmd.run‘python/path/to/监控脚本数据库进程号’
说明,采用python编写监控脚本,执行该监控脚本,需要传入一个参数:数据库进程号
所述监控脚本采集数据库进程占用的cpu信息的核心逻辑为:
p=psutil.process(int(pid))
cpuusage=p.cpu_percent(interval=1)
该监控脚本依赖python的psutil模块。pid是该脚本需要传入的参数,表示数据库进程号。
采集到的性能监控数据保存在salt管理端本地文件中,称之为监控数据文件。(4)发送监控数据模块
每当调用采集性能监控数据模块结束后,本模块将被调用,本模块功能是调用zabbix服务端接口,发送所述监控数据文件到zabbix服务端,指令如下:
#zabbix_sender‐‐zabbix‐serverzabbix服务端ip‐‐portzabbix服务端端口‐‐input‐file监控数据文件‐‐with‐timestamps
如果发送监控数据成功,那么需要清空所述监控数据文件;否则需要通知管理员处理。
(5)监控告警和展示模块
该模块可选。zabbix服务端接收和存储所述监控数据,分析所述监控数据并产生告警,以及通过zabbix服务端的趋势图展示监控数据。
说明:调用zabbix服务端自身功能,为数据库性能监控配置短信接收人和邮件接收人,方便第一时间接收告警信息和处理数据库性能问题。