本發(fā)明屬于數(shù)據(jù)庫監(jiān)控領(lǐng)域,主要應(yīng)用于互聯(lián)網(wǎng)行業(yè)各種類型的數(shù)據(jù)庫的性能監(jiān)控。
背景技術(shù):
對于互聯(lián)網(wǎng)公司而言,數(shù)據(jù)庫應(yīng)用越來越普及,為了提高數(shù)據(jù)庫可用性,需要為數(shù)據(jù)庫部署監(jiān)控,除了常規(guī)的功能監(jiān)控,還需要對數(shù)據(jù)庫性能進(jìn)行監(jiān)控,從而提高監(jiān)控精度,及時發(fā)現(xiàn)數(shù)據(jù)庫性能問題,保證數(shù)據(jù)庫服務(wù)質(zhì)量。
現(xiàn)有的數(shù)據(jù)庫監(jiān)控系統(tǒng)及方法的缺點(diǎn)是:
(1)操作繁雜,維護(hù)成本高:操作步驟繁多,需要大量的人力維護(hù),維護(hù)成本高;
(2)自動化程度低:幾乎全部需要人力操作,缺乏自動化,效率低下;
(3)不適合大規(guī)模數(shù)據(jù)庫監(jiān)控:在大規(guī)模數(shù)據(jù)庫情況下,使用現(xiàn)由的監(jiān)控方法,幾乎很難沐足監(jiān)控需求;
(4)功能單一:現(xiàn)有監(jiān)控方案,功能比較單一。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于針對現(xiàn)有技術(shù)的不足,提供一種基于salt的數(shù)據(jù)庫性能自動化監(jiān)控系統(tǒng),可以實(shí)現(xiàn)各種數(shù)據(jù)庫性能監(jiān)控自動化,基本沒有人工成本,通用性強(qiáng),并且使用非常方便。
本發(fā)明的目的是通過以下技術(shù)方案來實(shí)現(xiàn)的:一種基于salt的數(shù)據(jù)庫性能自動化監(jiān)控系統(tǒng),通過采集數(shù)據(jù)庫服務(wù)進(jìn)程對應(yīng)的cpu數(shù)據(jù)來監(jiān)控?cái)?shù)據(jù)庫性能,該系統(tǒng)包括salt管理端、數(shù)據(jù)庫節(jié)點(diǎn)和zabbix服務(wù)端;
salt管理端是管理salt客戶端的服務(wù)器,包括salt管理模塊、元信息管理模塊和發(fā)送監(jiān)控?cái)?shù)據(jù)模塊;salt管理端通過salt客戶端采集數(shù)據(jù)庫節(jié)點(diǎn)上數(shù)據(jù)庫服務(wù)進(jìn)程的cpu信息,發(fā)送到zabbix服務(wù)端。
數(shù)據(jù)庫節(jié)點(diǎn)是部署數(shù)據(jù)庫服務(wù)的服務(wù)器,包括采集性能監(jiān)控?cái)?shù)據(jù)模塊;不同的數(shù)據(jù)庫服務(wù),端口唯一,每個數(shù)據(jù)庫節(jié)點(diǎn)上部署一個salt客戶端;數(shù)據(jù)庫節(jié)點(diǎn)根據(jù)salt管理端傳入的參數(shù),調(diào)用該節(jié)點(diǎn)上的采集腳本,采集性能監(jiān)控?cái)?shù)據(jù)。
zabbix服務(wù)端是支持短信和郵件的監(jiān)控服務(wù)器,包括監(jiān)控告警和展示模塊;zabbix服務(wù)端接收監(jiān)控?cái)?shù)據(jù),并根據(jù)告警策略進(jìn)行告警,以及展示監(jiān)控?cái)?shù)據(jù)的趨勢圖。
進(jìn)一步地,所述salt管理模塊包括:
在所有數(shù)據(jù)庫節(jié)點(diǎn)部署salt客戶端,salt管理端部署在單獨(dú)的一臺服務(wù)器上。
定期調(diào)用salt管理端接口,檢查所有的數(shù)據(jù)庫節(jié)點(diǎn)上的salt客戶端是否注冊到salt管理端;如未注冊,調(diào)用salt管理端接口,注冊所述salt客戶端;如注冊失敗,則發(fā)送通知給管理員??蛇x擇注銷某個數(shù)據(jù)庫節(jié)點(diǎn)的salt客戶端。
在salt管理端,定期檢測salt客戶端是否通達(dá),如不通,發(fā)送通知給管理員。
進(jìn)一步地,所述元信息管理模塊包括:
salt管理端定期調(diào)用元信息管理模塊,及時獲取最新的元信息;所述元信息包括數(shù)據(jù)庫節(jié)點(diǎn)主機(jī)名、數(shù)據(jù)庫節(jié)點(diǎn)ip、數(shù)據(jù)庫端口和數(shù)據(jù)庫進(jìn)程號以及數(shù)據(jù)庫標(biāo)識符。
首先,salt管理端獲取所有的數(shù)據(jù)庫節(jié)點(diǎn)主機(jī)名;然后,針對每個數(shù)據(jù)庫節(jié)點(diǎn),salt管理端通過發(fā)送指令給salt客戶端,獲取每個數(shù)據(jù)庫節(jié)點(diǎn)上所有的數(shù)據(jù)庫進(jìn)程信息;通過數(shù)據(jù)庫進(jìn)程信息,解析得到數(shù)據(jù)庫端口和數(shù)據(jù)庫進(jìn)程號;同時,根據(jù)數(shù)據(jù)庫節(jié)點(diǎn)主機(jī)名獲取數(shù)據(jù)庫節(jié)點(diǎn)ip。所述數(shù)據(jù)庫節(jié)點(diǎn)主機(jī)名、數(shù)據(jù)庫節(jié)點(diǎn)ip、數(shù)據(jù)庫端口和數(shù)據(jù)庫進(jìn)程號保存在元信息文件中。接下來,在salt管理端,掃描元信息文件,傳入數(shù)據(jù)庫端口,數(shù)據(jù)庫節(jié)點(diǎn)ip,以及zabbix服務(wù)端的用戶名密碼,調(diào)用zabbix服務(wù)端接口,自動創(chuàng)建相應(yīng)的所述數(shù)據(jù)庫主機(jī)。同時,根據(jù)所述數(shù)據(jù)庫主機(jī),解析得到相應(yīng)的監(jiān)控模板,根據(jù)該監(jiān)控模板,調(diào)用zabbix服務(wù)端接口,自動掛載相應(yīng)的監(jiān)控模板,包括cpu采集項(xiàng)、cpu報(bào)警項(xiàng)和cpu趨勢圖。如果某個所述數(shù)據(jù)庫主機(jī)不需要cpu監(jiān)控,可以采用手動方式,在zabbix服務(wù)端頁面卸載對應(yīng)的監(jiān)控模板。也可以根據(jù)具體需求,調(diào)用zabbix服務(wù)端功能,調(diào)整cpu報(bào)警項(xiàng)設(shè)置。
進(jìn)一步地,所述采集性能監(jiān)控?cái)?shù)據(jù)模塊包括:
需要傳入的參數(shù):數(shù)據(jù)庫節(jié)點(diǎn)主機(jī)名,數(shù)據(jù)庫進(jìn)程號;
在salt管理端,定期調(diào)用元信息管理模塊之后,得到所有的數(shù)據(jù)庫節(jié)點(diǎn)主機(jī)名,以及對應(yīng)的數(shù)據(jù)庫進(jìn)程號。然后,根據(jù)這些信息,salt管理端發(fā)送指令到所述數(shù)據(jù)庫節(jié)點(diǎn)對應(yīng)的salt客戶端,首先判斷是否存在性能監(jiān)控腳本,如果存在,那么不需要分發(fā)監(jiān)控腳本,否則,分發(fā)監(jiān)控腳本:然后,在salt管理端上,針對每個數(shù)據(jù)庫節(jié)點(diǎn)上的每個數(shù)據(jù)庫進(jìn)程,采集性能監(jiān)控?cái)?shù)據(jù);采集到的性能監(jiān)控?cái)?shù)據(jù)保存在salt管理端本地文件中,稱為監(jiān)控?cái)?shù)據(jù)文件。
進(jìn)一步地,所述發(fā)送監(jiān)控?cái)?shù)據(jù)模塊包括:調(diào)用zabbix服務(wù)端接口,發(fā)送所述監(jiān)控?cái)?shù)據(jù)文件到zabbix服務(wù)端,如果發(fā)送監(jiān)控?cái)?shù)據(jù)成功,那么需要清空所述監(jiān)控?cái)?shù)據(jù)文件;否則需要通知管理員處理。
進(jìn)一步地,所述監(jiān)控告警和展示模塊包括:
zabbix服務(wù)端接收和存儲所述監(jiān)控?cái)?shù)據(jù),分析所述監(jiān)控?cái)?shù)據(jù)并產(chǎn)生告警,以及通過zabbix服務(wù)端的趨勢圖展示監(jiān)控?cái)?shù)據(jù)。調(diào)用zabbix服務(wù)端自身功能,為數(shù)據(jù)庫性能監(jiān)控配置短信接收人和郵件接收人,方便第一時間接收告警信息和處理數(shù)據(jù)庫性能問題。
本發(fā)明的有益效果如下:
(1)監(jiān)控部署非常簡單:只需要部署zabbix服務(wù)端、salt管理端和salt客戶端和制定監(jiān)控模板,操作簡單。
(2)維護(hù)成本低:以上組件部署完畢后,對于新增加的數(shù)據(jù)庫服務(wù),不需要維護(hù)監(jiān)控,可以實(shí)現(xiàn)自動采集和發(fā)送監(jiān)控?cái)?shù)據(jù),維護(hù)成本為零。
(3)性能監(jiān)控準(zhǔn)確:通過數(shù)據(jù)庫服務(wù)占用的cpu反映數(shù)據(jù)庫性能,可以準(zhǔn)確發(fā)現(xiàn)性能問題。
(4)支持多種類型數(shù)據(jù)庫:適用于對于關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫。
(5)易擴(kuò)展:對于大規(guī)模數(shù)據(jù)庫節(jié)點(diǎn),只需要部署多個salt管理端,分別管理各自的salt客戶端即可。擴(kuò)展容易并且可行。
附圖說明
圖1是本發(fā)明基于salt的數(shù)據(jù)庫性能自動化監(jiān)控系統(tǒng)的總體架構(gòu)圖;
圖2是本發(fā)明各個模塊相互調(diào)用的流程圖。
具體實(shí)施方式
圖1是本發(fā)明基于salt的數(shù)據(jù)庫性能自動化監(jiān)控系統(tǒng)的總體架構(gòu)圖??傮w上包括三部分:salt管理端、數(shù)據(jù)庫節(jié)點(diǎn)和zabbix服務(wù)端,每個數(shù)據(jù)庫節(jié)點(diǎn)部署一個salt客戶端。salt管理端通過salt客戶端獲取所有數(shù)據(jù)庫進(jìn)程,然后調(diào)用zabbix服務(wù)端接口注冊數(shù)據(jù)庫主機(jī),接下來,salt管理端通過salt客戶端采集所述數(shù)據(jù)庫節(jié)點(diǎn)上每個數(shù)據(jù)庫進(jìn)程對應(yīng)的監(jiān)控?cái)?shù)據(jù),最后發(fā)送所述監(jiān)控?cái)?shù)據(jù)到zabbix服務(wù)端。
圖2是本發(fā)明各個模塊相互調(diào)用的流程圖。首先,salt管理模塊注冊所有數(shù)據(jù)庫節(jié)點(diǎn)對應(yīng)的salt客戶端,然后通過salt客戶端獲取所有數(shù)據(jù)庫節(jié)點(diǎn)上的數(shù)據(jù)庫進(jìn)程,根據(jù)所述數(shù)據(jù)庫進(jìn)程,解析得到數(shù)據(jù)庫進(jìn)程號和數(shù)據(jù)庫端口號,然后,salt管理端通過salt客戶端采集對應(yīng)的cpu信息;最后,salt管理端調(diào)用zabbix服務(wù)端接口,發(fā)送到zabbix服務(wù)端。
下面詳細(xì)介紹各模塊的實(shí)現(xiàn)過程:
(1)salt管理端
salt管理端是管理salt客戶端的服務(wù)器,用于注冊和注銷salt客戶端,發(fā)送指令到salt客戶端等。這里的指令一般是通過一個或者多個linux命令完成的操作。salt管理端包括salt管理模塊、元信息管理模塊和發(fā)送監(jiān)控?cái)?shù)據(jù)模塊,功能包括管理salt客戶端,分發(fā)指令和文件,獲取數(shù)據(jù)庫節(jié)點(diǎn)上的數(shù)據(jù)庫進(jìn)程信息,以及發(fā)送監(jiān)控?cái)?shù)據(jù)到zabbix服務(wù)端。
salt管理端通過salt客戶端采集數(shù)據(jù)庫節(jié)點(diǎn)上數(shù)據(jù)庫服務(wù)進(jìn)程的cpu信息,發(fā)送到zabbix服務(wù)端。
(2)數(shù)據(jù)庫節(jié)點(diǎn)
數(shù)據(jù)庫節(jié)點(diǎn)是指部署數(shù)據(jù)庫服務(wù)的服務(wù)器,這些數(shù)據(jù)庫服務(wù)包括常用的關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫,不同的數(shù)據(jù)庫服務(wù),端口唯一。
主要包括采集性能監(jiān)控?cái)?shù)據(jù)模塊,根據(jù)salt管理端傳入的參數(shù),調(diào)用該節(jié)點(diǎn)上的采集腳本,采集性能監(jiān)控?cái)?shù)據(jù)。
每個數(shù)據(jù)庫節(jié)點(diǎn)上,都需要部署一個salt客戶端。salt客戶端用于接收salt管理端的指令和文件,執(zhí)行相應(yīng)的操作,返回結(jié)果給salt管理端。
(3)zabbix服務(wù)端
zabbix服務(wù)端是一種支持短信和郵件的監(jiān)控服務(wù)器,接收監(jiān)控?cái)?shù)據(jù),并根據(jù)告警策略進(jìn)行告警,以及展示監(jiān)控?cái)?shù)據(jù)的趨勢圖。
包括監(jiān)控告警和展示模塊,主要功能是接收和存儲監(jiān)控?cái)?shù)據(jù),以及監(jiān)控告警。
數(shù)據(jù)庫主機(jī)是zabbix服務(wù)端注冊的數(shù)據(jù)庫服務(wù)標(biāo)識,每個數(shù)據(jù)庫服務(wù),數(shù)據(jù)庫主機(jī)采用端口_主機(jī)方式命名,比如3306_10.1.1.11,表示10.1.1.11數(shù)據(jù)庫節(jié)點(diǎn)上的3306數(shù)據(jù)庫服務(wù)。
監(jiān)控模板是指根據(jù)數(shù)據(jù)庫的接口,設(shè)置采集項(xiàng)、觸發(fā)器和趨勢圖,用于掛載到數(shù)據(jù)庫主機(jī)中。
各子模塊具體實(shí)現(xiàn)如下:
(1)salt管理模塊
主要功能是在所有數(shù)據(jù)庫節(jié)點(diǎn)部署salt客戶端,salt管理端部署在單獨(dú)的一臺服務(wù)器上。
定期調(diào)用salt管理端接口,檢查所有的數(shù)據(jù)庫節(jié)點(diǎn)上的salt客戶端是否注冊到salt管理端,檢測方式如下:
#salt‐key‐l‐acc|grep‘?dāng)?shù)據(jù)庫節(jié)點(diǎn)主機(jī)名’
如果返回值為假,需要調(diào)用salt管理端接口,注冊所述salt客戶端,注冊方式如下:
#salt‐key–a–y‘?dāng)?shù)據(jù)庫節(jié)點(diǎn)主機(jī)名’
否則,不需要調(diào)用注冊所述salt客戶端。如果注冊失敗,那么發(fā)送通知給管理員處理。
如果需要注銷某個數(shù)據(jù)庫節(jié)點(diǎn)的salt客戶端,需要手動執(zhí)行如下指令:
#salt‐key–d‘?dāng)?shù)據(jù)庫節(jié)點(diǎn)主機(jī)名’
所有的數(shù)據(jù)庫節(jié)點(diǎn)對應(yīng)的salt客戶端全部注冊到salt管理端后,salt管理端就可以發(fā)送指令和文件給salt客戶端,完成特定的操作。
并且,在salt管理端,定期檢測salt客戶端是否通達(dá),檢測方式如下:
#salt'數(shù)據(jù)庫節(jié)點(diǎn)主機(jī)名'cmd.run'exit'
如果返回值為真,說明該數(shù)據(jù)庫節(jié)點(diǎn)主機(jī)名所述salt客戶端可以通達(dá);否則,需要發(fā)送通知給管理員,需要人工處理。
(2)元信息管理模塊
這里的元信息包括數(shù)據(jù)庫節(jié)點(diǎn)主機(jī)名、數(shù)據(jù)庫節(jié)點(diǎn)ip、數(shù)據(jù)庫端口和數(shù)據(jù)庫進(jìn)程號以及數(shù)據(jù)庫標(biāo)識符。
salt管理端定期調(diào)用元信息管理模塊,及時獲取最新的元信息。
首先,salt管理端獲取所有的數(shù)據(jù)庫節(jié)點(diǎn)主機(jī)名:獲取方式如下:
#salt‐key–l|grep數(shù)據(jù)庫節(jié)點(diǎn)主機(jī)名前綴
數(shù)據(jù)庫節(jié)點(diǎn)主機(jī)名前綴是數(shù)據(jù)庫節(jié)點(diǎn)主機(jī)名的前綴字符,基于此可以過濾得到所有的數(shù)據(jù)庫節(jié)點(diǎn)。
然后,針對每個數(shù)據(jù)庫節(jié)點(diǎn),salt管理端通過發(fā)送指令給salt客戶端,獲取每個數(shù)據(jù)庫節(jié)點(diǎn)上所有的數(shù)據(jù)庫進(jìn)程信息,命令如下:
#salt‘?dāng)?shù)據(jù)庫節(jié)點(diǎn)主機(jī)名’cmd.run‘ps–ef|egrep數(shù)據(jù)庫標(biāo)識符|egrep–vgrep’
數(shù)據(jù)庫標(biāo)識符是數(shù)據(jù)庫類型的標(biāo)識,比如,mysql數(shù)據(jù)庫的數(shù)據(jù)庫標(biāo)識符為mysqld。
通過數(shù)據(jù)庫進(jìn)程信息,可以解析得到數(shù)據(jù)庫端口和數(shù)據(jù)庫進(jìn)程號。
同時,根據(jù)數(shù)據(jù)庫節(jié)點(diǎn)主機(jī)名獲取到數(shù)據(jù)庫節(jié)點(diǎn)ip。
所述數(shù)據(jù)庫節(jié)點(diǎn)主機(jī)名、數(shù)據(jù)庫節(jié)點(diǎn)ip、數(shù)據(jù)庫端口和數(shù)據(jù)庫進(jìn)程號保存在元信息文件中。
接下來,在salt管理端,掃描元信息文件,傳入數(shù)據(jù)庫端口,數(shù)據(jù)庫節(jié)點(diǎn)ip,以及zabbix服務(wù)端的用戶名密碼,調(diào)用zabbix服務(wù)端接口,自動創(chuàng)建相應(yīng)的所述數(shù)據(jù)庫主機(jī)。同時,根據(jù)所述數(shù)據(jù)庫主機(jī),解析得到相應(yīng)的監(jiān)控模板,根據(jù)該監(jiān)控模板,調(diào)用zabbix服務(wù)端接口,自動掛載相應(yīng)的監(jiān)控模板,包括cpu采集項(xiàng),cpu報(bào)警項(xiàng)和cpu趨勢圖。
如果某個所述數(shù)據(jù)庫主機(jī)不需要cpu監(jiān)控,可以采用手動方式,在zabbix服務(wù)端頁面卸載對應(yīng)的監(jiān)控模板即可。
也可以根據(jù)具體需求,調(diào)用zabbix服務(wù)端功能,調(diào)整cpu報(bào)警項(xiàng)設(shè)置。
(3)采集性能監(jiān)控?cái)?shù)據(jù)模塊
需要傳入的參數(shù):數(shù)據(jù)庫節(jié)點(diǎn)主機(jī)名,數(shù)據(jù)庫進(jìn)程號
在salt管理端,定期調(diào)用元信息管理模塊之后,得到所有的數(shù)據(jù)庫節(jié)點(diǎn)主機(jī)名,以及對應(yīng)的數(shù)據(jù)庫進(jìn)程號。然后,根據(jù)這些信息,salt管理端發(fā)送指令到所述數(shù)據(jù)庫節(jié)點(diǎn)對應(yīng)的salt客戶端,首先判斷是否存在性能監(jiān)控腳本,指令如下:#salt‘?dāng)?shù)據(jù)庫節(jié)點(diǎn)主機(jī)名’cmd.run‘ls–l/path/to/監(jiān)控腳本’
如果返回為真,那么不需要分發(fā)監(jiān)控腳本,否則,通過如下指令分發(fā)監(jiān)控腳本:
#salt'數(shù)據(jù)庫節(jié)點(diǎn)主機(jī)名'cp.get_filesalt://監(jiān)控腳本/path/to/監(jiān)控腳本
然后,在salt管理端上,針對每個數(shù)據(jù)庫節(jié)點(diǎn)上的每個數(shù)據(jù)庫進(jìn)程,采集性能監(jiān)控?cái)?shù)據(jù)指令如下:
#salt‘?dāng)?shù)據(jù)庫節(jié)點(diǎn)主機(jī)名’cmd.run‘python/path/to/監(jiān)控腳本數(shù)據(jù)庫進(jìn)程號’
說明,采用python編寫監(jiān)控腳本,執(zhí)行該監(jiān)控腳本,需要傳入一個參數(shù):數(shù)據(jù)庫進(jìn)程號
所述監(jiān)控腳本采集數(shù)據(jù)庫進(jìn)程占用的cpu信息的核心邏輯為:
p=psutil.process(int(pid))
cpuusage=p.cpu_percent(interval=1)
該監(jiān)控腳本依賴python的psutil模塊。pid是該腳本需要傳入的參數(shù),表示數(shù)據(jù)庫進(jìn)程號。
采集到的性能監(jiān)控?cái)?shù)據(jù)保存在salt管理端本地文件中,稱之為監(jiān)控?cái)?shù)據(jù)文件。(4)發(fā)送監(jiān)控?cái)?shù)據(jù)模塊
每當(dāng)調(diào)用采集性能監(jiān)控?cái)?shù)據(jù)模塊結(jié)束后,本模塊將被調(diào)用,本模塊功能是調(diào)用zabbix服務(wù)端接口,發(fā)送所述監(jiān)控?cái)?shù)據(jù)文件到zabbix服務(wù)端,指令如下:
#zabbix_sender‐‐zabbix‐serverzabbix服務(wù)端ip‐‐portzabbix服務(wù)端端口‐‐input‐file監(jiān)控?cái)?shù)據(jù)文件‐‐with‐timestamps
如果發(fā)送監(jiān)控?cái)?shù)據(jù)成功,那么需要清空所述監(jiān)控?cái)?shù)據(jù)文件;否則需要通知管理員處理。
(5)監(jiān)控告警和展示模塊
該模塊可選。zabbix服務(wù)端接收和存儲所述監(jiān)控?cái)?shù)據(jù),分析所述監(jiān)控?cái)?shù)據(jù)并產(chǎn)生告警,以及通過zabbix服務(wù)端的趨勢圖展示監(jiān)控?cái)?shù)據(jù)。
說明:調(diào)用zabbix服務(wù)端自身功能,為數(shù)據(jù)庫性能監(jiān)控配置短信接收人和郵件接收人,方便第一時間接收告警信息和處理數(shù)據(jù)庫性能問題。