結(jié)合Zabbix與Ansible打造自動(dòng)化數(shù)據(jù)庫(kù)監(jiān)控體系_第1頁(yè)
結(jié)合Zabbix與Ansible打造自動(dòng)化數(shù)據(jù)庫(kù)監(jiān)控體系_第2頁(yè)
結(jié)合Zabbix與Ansible打造自動(dòng)化數(shù)據(jù)庫(kù)監(jiān)控體系_第3頁(yè)
結(jié)合Zabbix與Ansible打造自動(dòng)化數(shù)據(jù)庫(kù)監(jiān)控體系_第4頁(yè)
結(jié)合Zabbix與Ansible打造自動(dòng)化數(shù)據(jù)庫(kù)監(jiān)控體系_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 結(jié)合Zabbix與Ansible打造自動(dòng)化數(shù)據(jù)庫(kù)監(jiān)控體系目 錄 TOC o 1-3 h z u HYPERLINK l _Toc528748897 一、前言 PAGEREF _Toc528748897 h 3 HYPERLINK l _Toc528748898 二、Zabbix自動(dòng)化核心功能介紹 PAGEREF _Toc528748898 h 3 HYPERLINK l _Toc528748899 三、監(jiān)控自動(dòng)化 PAGEREF _Toc528748899 h 9 HYPERLINK l _Toc528748900 四、數(shù)據(jù)庫(kù)監(jiān)控項(xiàng)目 PAGEREF _Toc528748900 h 14 H

2、YPERLINK l _Toc528748901 五、總結(jié) PAGEREF _Toc528748901 h 24一、前言隨著業(yè)務(wù)的飛速發(fā)展,數(shù)據(jù)庫(kù)服務(wù)器量級(jí)飛速增長(zhǎng),比如Oracle、MySQL、Redis、MongoDB的使用更加普及,對(duì)數(shù)據(jù)庫(kù)運(yùn)維人員的要求也越來(lái)越高,構(gòu)建一個(gè)真正好用的監(jiān)控系統(tǒng)是一項(xiàng)艱巨的任務(wù)。在監(jiān)控系統(tǒng)的開(kāi)源軟件中,可供選擇的工具眾多,然而真正適合自己需求、能夠真正解決自己數(shù)據(jù)庫(kù)問(wèn)題的監(jiān)控系統(tǒng)軟件卻鳳毛麟角。Zabbix和Ansible分別是兩款非常流行的開(kāi)源監(jiān)控和自動(dòng)化工具。具有上手簡(jiǎn)單,學(xué)習(xí)曲線平滑、配置簡(jiǎn)單、功能強(qiáng)大、擴(kuò)展性強(qiáng)等優(yōu)點(diǎn)。本次將分享如何使用Zabbix并

3、結(jié)合Ansible打造自動(dòng)化數(shù)據(jù)庫(kù)監(jiān)控體系。二、Zabbix自動(dòng)化核心功能介紹Zabbix是企業(yè)級(jí)監(jiān)控解決方案,和自動(dòng)化相關(guān)的核心功能包括:LLD、API、Zabbix_trapper。1、LLD在數(shù)據(jù)庫(kù)監(jiān)控中監(jiān)控的對(duì)象往往是變化的,以部署Redis來(lái)說(shuō):近幾年硬件發(fā)展迅速,在企業(yè)中新購(gòu)的X86服務(wù)器配置基本都在32C、256GB以上,大家都知道Redis是用“單線程-多路復(fù)用IO模型”來(lái)實(shí)現(xiàn)高性能的內(nèi)存數(shù)據(jù)服務(wù),只能用到一個(gè)CPU核心,內(nèi)存配置一般也在8G-16G左右,為了提高資源利用率,一般會(huì)選擇在一臺(tái)服務(wù)器上部署多個(gè)實(shí)例。當(dāng)需要監(jiān)控的內(nèi)容比較多的時(shí)候,此時(shí)每次添加一批實(shí)例都去手動(dòng)部署監(jiān)控

4、、配置告警的話就會(huì)造成大量人力的消耗。此時(shí)通過(guò)LLD能自動(dòng)發(fā)現(xiàn)并自動(dòng)發(fā)現(xiàn)添加新部署實(shí)例的監(jiān)控項(xiàng),包括Item、Trigger這些的自動(dòng)添加,做到一次部署永久受益,提高數(shù)據(jù)庫(kù)監(jiān)控人員的幸福值。LLD的核心思路是給服務(wù)端發(fā)送一個(gè)JSON的數(shù)據(jù)格式,下面以Redis Standalone類型實(shí)例為例說(shuō)明。首先模板中添加discovey rules增加一個(gè)trapper類型:然后增加宏#REDISPORT:當(dāng)關(guān)聯(lián)好Redis的模板后,使用zabbix_sender發(fā)送給如下的數(shù)據(jù): data: #REDIS_PORT:6379 就完成了Redis的監(jiān)控添加,其中一項(xiàng)Item示例如下:2、APIAPI是

5、Zabbix中非常強(qiáng)大的功能,通過(guò)調(diào)用API可以將Zabbix和其他系統(tǒng)串聯(lián)到一起,在自動(dòng)化運(yùn)維環(huán)境中非常有用。Zabbix API是一個(gè)JSON-RPC的API,通過(guò)http請(qǐng)求,它提供了幾乎所有Zabbix的功能,比如更新Item、添加Host監(jiān)控等。API使用流程如下:官方也提供了詳細(xì)的API功能說(shuō)明。官方API:/documentation/3.2/manual/api 下面通過(guò)調(diào)用user.login的例子來(lái)說(shuō)明:JSON RPC:標(biāo)準(zhǔn)的JSON RPC參數(shù)以標(biāo)示協(xié)議版本。所有的請(qǐng)求都會(huì)保持不變。Method:定義了需要執(zhí)行的方法。Params:這里通過(guò)傳遞JSON對(duì)象來(lái)作為特定方法

6、的參數(shù)。ID:用于綁定JSON請(qǐng)求和響應(yīng)。響應(yīng)會(huì)跟請(qǐng)求有相同的ID。Auth:0424bd59b807674191e7d77572075f33,這是一個(gè)認(rèn)證令牌用以鑒別用戶、訪問(wèn)API。在Python項(xiàng)目上一般可以使用第三方的py-Zabbix或者自己封裝(urllib、requests)來(lái)實(shí)現(xiàn)訪問(wèn)。其中py-Zabbix的網(wǎng)址如下:/adubkov/py-zabbix使用示例如下:3、Zabbix_trapperZabbix_trapper是不通過(guò)zabbix-client收集數(shù)據(jù),直接主動(dòng)向Zabbix Server發(fā)送數(shù)據(jù)的一種方式。我們監(jiān)控?cái)?shù)據(jù)庫(kù),如果使用Agent的方式發(fā)送,要用到a

7、gent conf文件中的userParameter,這樣需要接受一個(gè)參數(shù),來(lái)返回對(duì)應(yīng)的監(jiān)控?cái)?shù)據(jù),這樣等于有多少個(gè)Item就要在一次監(jiān)控周期內(nèi)執(zhí)行多少次命令,并且對(duì)數(shù)據(jù)庫(kù)說(shuō)也是要建立相應(yīng)次的短鏈接,增加了數(shù)據(jù)庫(kù)的負(fù)擔(dān)。此外,在監(jiān)控的數(shù)據(jù)庫(kù)實(shí)例比較多的情況下,也將給Zabbix Server帶來(lái)較大的壓力,可以通過(guò)使用trapper的方式,一次搜集所有的監(jiān)控?cái)?shù)據(jù)到一個(gè)JSON中,并且只給Zabbix Server發(fā)送一次。使用方式如下:直接調(diào)用:使用py-Zabbix:三、監(jiān)控自動(dòng)化監(jiān)控運(yùn)維自動(dòng)化的目的在于解放、簡(jiǎn)化、方便運(yùn)維人員的工作,提高效率,減少人為故障,思路是能自動(dòng)堅(jiān)決不手動(dòng),將高頻率低

8、風(fēng)險(xiǎn)的監(jiān)控操作全部自動(dòng)。自動(dòng)化的基礎(chǔ)是基礎(chǔ)信息的準(zhǔn)確性和各種配置信息規(guī)則的規(guī)范化。1、監(jiān)控規(guī)范化約定服務(wù)器主機(jī)名規(guī)范:見(jiàn)到這個(gè)主機(jī)名就能知道這個(gè)設(shè)備是部署了什么樣的服務(wù),以及是什么業(yè)務(wù)來(lái)使用的。約定服務(wù)器網(wǎng)卡IP規(guī)范:比如一臺(tái)服務(wù)器可能有多個(gè)IP:應(yīng)用IP、數(shù)據(jù)IP等,監(jiān)控要用哪個(gè)IP以及哪塊網(wǎng)卡綁定IP,需要統(tǒng)一。約定服務(wù)部署規(guī)范:統(tǒng)一所有被監(jiān)控服務(wù)器的Zabbix Agent部署目錄,監(jiān)控腳本部署目錄。還有包括數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)化比如,如Oracle、MySQL、Redis這些常見(jiàn)服務(wù)的應(yīng)用初始化流程、部署更新流程等。 報(bào)警等級(jí)的規(guī)范:用于區(qū)分報(bào)警發(fā)給誰(shuí)、怎么發(fā)、如何做報(bào)警升級(jí)等,還可以根據(jù)等級(jí)

9、和監(jiān)控項(xiàng)進(jìn)行自動(dòng)處理,等級(jí)較高的優(yōu)先處理,較低的可以集中處理等。 等這些標(biāo)準(zhǔn)規(guī)范固化下來(lái)之后,消除了各種差異,才能為后續(xù)的自動(dòng)化開(kāi)發(fā)鋪平前進(jìn)的道路。因?yàn)檫B標(biāo)準(zhǔn)都沒(méi)有的話,那就毫無(wú)自動(dòng)化構(gòu)建可言。2、自動(dòng)化部署我們自己的項(xiàng)目后端開(kāi)發(fā)語(yǔ)言為Python,Ansible基于Python開(kāi)發(fā),能夠很好的支持Python項(xiàng)目進(jìn)行二次開(kāi)發(fā)發(fā)布。在不需要考慮大規(guī)模并發(fā)性能的情況下,Ansible是最合適的自動(dòng)化工具,只需要一臺(tái)能夠SSH到其他服務(wù)器的管理機(jī)。上圖為Ansible的基礎(chǔ)架構(gòu)圖,由以下部分組成:Ansible:核心;Core Modules:Ansible自帶的核心模塊;Custom Modul

10、es:自定義模塊;Plugins:Ansible插件,包括郵件插件、日志插件、連接插件等;Playbooks:劇本,Ansible配置、部署、編排語(yǔ)言,定義主機(jī)執(zhí)行的Task集合;Host Inventory:Ansible管理遠(yuǎn)程主機(jī)和組之間的關(guān)系清單,記錄主機(jī)SSH端口、賬號(hào)密碼等。如上圖所示,只需要在Ansible Server上執(zhí)行:就可完成所有工作。(如果是自動(dòng)化項(xiàng)目,可以通過(guò)封裝Ansible API來(lái)實(shí)現(xiàn))這里的main.yml如下:- hosts: host_list gather_facts: True roles: - role: role_name 其中host_list

11、指?jìng)魅氡槐O(jiān)控服務(wù)器的信息;role_name指?jìng)魅胱远x的Zabbix監(jiān)控角色。這里需要注意的是通過(guò)Auto Register關(guān)聯(lián)模板,當(dāng)添加主機(jī)、加入主機(jī)組后,關(guān)聯(lián)到相應(yīng)的模板,才能使整個(gè)流程形成閉環(huán)。那么如何做呢?例如我們上面的Ansible命令,會(huì)同時(shí)添加zabbix_agentd.conf這個(gè)agent的配置文件,其中有一個(gè)參數(shù)是HostMetadata=MySQL。Zabbix Server會(huì)提前為Discovery創(chuàng)建Action:這樣就完成了對(duì)MySQL模板的管理,從而形成閉環(huán)。四、數(shù)據(jù)庫(kù)監(jiān)控項(xiàng)目下面介紹如何根據(jù)Oracle、MySQL、Redis、Mongo以及自己的需求情況使

12、用Python開(kāi)發(fā)一套DBA_Monitor項(xiàng)目,使監(jiān)控更加全面、豐富、靈活,使交付更加快速、穩(wěn)定、高效。項(xiàng)目目錄結(jié)構(gòu)如下:其中authzabbix.py封裝了共用的Zabbix API的方法,Lib目錄主要存放全局的變量信息,包括Zabbix API地址、Zabbix用戶、各類數(shù)據(jù)庫(kù)的監(jiān)控用戶、路徑等信息,Log目錄用于存放監(jiān)控日志,Template用來(lái)存放Zabbix模板信息。pyora.py是Oracle的監(jiān)控腳本,mysql_db_status.py是MySQL的監(jiān)控腳本,redis_db_status.py是Redis的監(jiān)控腳本,mongo_db_status.py是Mongo的監(jiān)控

13、腳本。Ansible把DBA_Monitor包推送到被監(jiān)控機(jī)后,會(huì)根據(jù)不同的數(shù)據(jù)庫(kù)服務(wù)類型來(lái)啟動(dòng)對(duì)應(yīng)的監(jiān)控腳本。如果再有新的數(shù)據(jù)庫(kù)類型需要監(jiān)控,也可以方便的進(jìn)行擴(kuò)展。下面將對(duì)Oracle、MySQL、Redis、MongoDB監(jiān)控的關(guān)鍵點(diǎn)進(jìn)行講解。1、OracleOracle監(jiān)控使用了Pyora這套腳本,Pyora大量使用了Python反射(自?。?,從而實(shí)現(xiàn)了非常靈活的Oracle監(jiān)控,自定義自己想監(jiān)控的指標(biāo)相當(dāng)方便,只需要添加相關(guān)函數(shù)就能獲得相應(yīng)的Item值。Pyora通過(guò)組件cx_Oracle來(lái)連接Oracle數(shù)據(jù)庫(kù),獲取到的數(shù)據(jù)傳遞給Zabbix的Agent,從而獲取到相關(guān)監(jiān)控?cái)?shù)據(jù)。Py

14、ora的網(wǎng)址:/bicofino/Pyora下面對(duì)Pyora中的關(guān)鍵代碼進(jìn)行注釋說(shuō)明:如果我們想要添加新的監(jiān)控user_status,只需在Checks增加相應(yīng)的方法:非常靈活。2、MySQLMySQL的監(jiān)控主要使用MySQLdb這個(gè)包,通過(guò)show global variables、show global status、show slave status管理命令獲取,然后進(jìn)行計(jì)算,存在一個(gè)Python的dict數(shù)據(jù)結(jié)構(gòu)中,key為監(jiān)控項(xiàng),value為取到的值。因?yàn)樾掳姹镜腗ySQL對(duì)硬件的利用率很高,這里沒(méi)有使用多實(shí)例監(jiān)控,所以沒(méi)有過(guò)多難點(diǎn)。在MySQL模板里定義item為trapper類型

15、,通過(guò)zabbix_sender將dict中的數(shù)據(jù)發(fā)送給zabbix_server就完成了。下圖是對(duì)trapper類型MySQL監(jiān)控的模板配置示例:3、RedisRedis實(shí)例的監(jiān)控是使用Python-Redis通過(guò)info命令來(lái)獲取信息,并對(duì)信息進(jìn)行處理來(lái)完成。Redis Standalone和Cluster都可以在一次LLD添加item后通過(guò)info命令收集數(shù)據(jù)來(lái)監(jiān)控,而Seninel稍微特殊,下面主要說(shuō)明Seninel的監(jiān)控技巧。首先要用LLD發(fā)現(xiàn)Seninel的實(shí)例,這個(gè)和Standalone類似,上圖中的Sentinel discover,就是第一次LLD。在前面的LLD章節(jié)已有說(shuō)明

16、,這里主要說(shuō)明是如何發(fā)現(xiàn)Seninel中監(jiān)控的Master實(shí)例信息,即上圖中的Sentinel master。在發(fā)現(xiàn)了Seninel的實(shí)例后,通過(guò)info sentinel命令可以抓取如下類似的關(guān)鍵信息:master0:name=redis-coretest,status=ok,address=2:6387,slaves=1,sentinels=5master1:name=redis-buitest,status=ok,address=2:6394,slaves=1,sentinels=5master2:name=redis-batchtest,status=ok,address=2:6389

17、,slaves=1,sentinels=5master3:name=redis-agenttest,status=ok,address=2:6399,slaves=1,sentinels=5這些信息通過(guò)再次LLD來(lái)添加到Zabbix Server的item中,用來(lái)監(jiān)控Seninel中存儲(chǔ)的被監(jiān)控Master的狀態(tài),并且如果有新加入的Master也能自動(dòng)LLD發(fā)現(xiàn),也就是兩次LLD監(jiān)控Seninel中的被監(jiān)控Master的狀態(tài)信息。需要注意的是其中這里的Seninel master需要同時(shí)接收到#REDISPORT和#SENTINELMASTER兩個(gè)宏信息。包括item也要設(shè)置#REDISPOR

18、T和#SENTINELMASTER兩個(gè)宏信息:4、Mongo線上環(huán)境基本都會(huì)選擇MongoDB Sharded cluster架構(gòu),MongoDB Sharded cluster共有三種不同類型的服務(wù):Mongos、Mongod、Config Server。在MongoDB的監(jiān)控中,為了滿足自動(dòng)化的需求,最好是在一個(gè)腳本中里同時(shí)完成:發(fā)現(xiàn)實(shí)例(LLD)判斷出實(shí)例類型,在Zabbix添加對(duì)應(yīng)的監(jiān)控,是Mongos就添加Mongos模板,是Mongod和Config Server都是添加Mongo模板。發(fā)送數(shù)據(jù)判斷實(shí)例類型,收集相應(yīng)數(shù)據(jù)并發(fā)送給Zabbix Server,這里監(jiān)控Mongo使用的是PyMongo包,通過(guò)Mongo中的管理命令serverStatus、replSetGetStatus(mongos無(wú)此命令,需要過(guò)濾)來(lái)獲取信息,并進(jìn)行處理。代碼片段如下:這里通過(guò)serverStatus中的process是否為Mongod來(lái)區(qū)分實(shí)例類型:發(fā)現(xiàn)實(shí)例

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論