本發明屬于數據庫監控領域,主要應用于互聯網行業各種類型的數據庫的性能監控。
背景技術:
對于互聯網公司而言,數據庫應用越來越普及,為了提高數據庫可用性,需要為數據庫部署監控,除了常規的功能監控,還需要對數據庫性能進行監控,從而提高監控精度,及時發現數據庫性能問題,保證數據庫服務質量。
現有的數據庫監控系統及方法的缺點是:
(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服務端自身功能,為數據庫性能監控配置短信接收人和郵件接收人,方便第一時間接收告警信息和處理數據庫性能問題。