為什么要了解Icinga
近段時(shí)間桦锄,由于公司服務(wù)出現(xiàn)過幾次小故障,導(dǎo)致所有用戶短暫不能訪問蔫耽,后來開會(huì)復(fù)盤事故時(shí)结耀,領(lǐng)導(dǎo)提出要對(duì)主要服務(wù)、網(wǎng)絡(luò)匙铡、硬件設(shè)施等進(jìn)行監(jiān)控图甜,以保證出故障時(shí)能第一時(shí)間知悉并采取針對(duì)性的措施,而不是各方盲目排查定位原因鳖眼。于是黑毅,運(yùn)維的同事根據(jù)對(duì)公司其他服務(wù)的監(jiān)控經(jīng)驗(yàn),向我們介紹了 Icinga 這套監(jiān)控系統(tǒng)钦讳。
能監(jiān)控什么
為了有個(gè)直觀的認(rèn)識(shí)矿瘦,下面先直接上圖。
從效果圖可以大致看出來愿卒,通過 Icinga 我們可以得到服務(wù)器主機(jī)缚去、服務(wù)等監(jiān)控信息,如果有異常琼开,會(huì)有特殊事件顯示詳細(xì)的信息易结,并可以添加備注、發(fā)送提醒柜候、手工重新檢查等操作搞动。
是怎么實(shí)現(xiàn)的
作為程序員,看到一個(gè)新系統(tǒng)改橘,肯定會(huì)去想它是怎么實(shí)現(xiàn)的滋尉。非常幸運(yùn)的是, Icinga 是一個(gè)開源系統(tǒng)飞主,我們可以自由查看它的實(shí)現(xiàn)方式狮惜。為了學(xué)習(xí)它,我 ssh 連上測試環(huán)境碌识,查看了一下這個(gè)項(xiàng)目的部署目錄碾篡,主要看它的配置文件都有什么東西,數(shù)據(jù)是保存在哪的筏餐,還有啟動(dòng)命令執(zhí)行時(shí)帶了哪些命令參數(shù) 开泽。
通過 locate icinga 命令,我找到了這個(gè)目錄 “/etc/icinga2”魁瞪,cd 進(jìn)去后穆律,在該目錄及其子目錄下看到了一堆 ".conf" 后綴的配置文件惠呼,有 init.conf, icinga2.conf, hosts.conf, services.conf, … 等等。其實(shí)如果對(duì)開源項(xiàng)目看得比較多峦耘,或者是開發(fā)經(jīng)驗(yàn)比較豐富的話剔蹋,基本上從配置文件的名稱就能猜到文件里的內(nèi)容是哪方面的了,這時(shí)候我們就需要對(duì)自己感興趣的配置文件一探究竟了辅髓。不得不佩服做開源軟件的大神們泣崩,各種配置項(xiàng)都有較詳細(xì)的文字說明,讓我們大概清楚這個(gè)配置項(xiàng)有什么作用洛口。由于配置文件比較多矫付,而且配置文件之間是有依賴關(guān)系的,當(dāng)我看到某些配置項(xiàng)引用的變量在當(dāng)前文件找不到的時(shí)候第焰,我便用 grep 命令搜索多個(gè)配置文件买优,找到它出現(xiàn)的原始位置,然后再看它的注釋說明樟遣,這樣便能把配置串聯(lián)起來了而叼。遇到一些不明白的關(guān)鍵字,當(dāng)然是要請(qǐng) Google 大神出馬了豹悬,還有就是官方的文檔說明葵陵,各種方法配合著來,總能有收獲的瞻佛。
在看配置文件時(shí)脱篙,我發(fā)現(xiàn)有些服務(wù)配置是引用了內(nèi)置的服務(wù),或者是引入了外置的插件實(shí)現(xiàn)伤柄。原來 Icinga 是兼容另一個(gè)監(jiān)控系統(tǒng) nagios 的大部分插件的绊困,網(wǎng)上說 Icinga 的作者原來就是 nagios 項(xiàng)目的開發(fā)人員,因此适刀,站在成熟的項(xiàng)目肩膀上秤朗,Icinga 得以快速發(fā)展壯大。
而要實(shí)現(xiàn)自己的自定義監(jiān)控服務(wù)笔喉,我們可以通過配置 services.conf取视,調(diào)用內(nèi)置的功能或像示例一樣引入豐富的插件。而像我們對(duì)應(yīng)用內(nèi)的業(yè)務(wù)監(jiān)控常挚,則可能需要在應(yīng)用內(nèi)提供接口作谭,把監(jiān)控邏輯寫在業(yè)務(wù)接口里,再在 Icinga 系統(tǒng)里配置服務(wù)請(qǐng)求接口奄毡。
更多功能
除了看到的監(jiān)控告警數(shù)據(jù)折欠,從公司部署的測試環(huán)境上,我們還可以看到一些配置管理、權(quán)限控制的菜單锐秦。出于好奇咪奖,自然要去看看這些菜單都提供了什么功能∨┾可以看到赡艰,Icinga web 2 項(xiàng)目具備了一個(gè)后臺(tái)管理系統(tǒng)應(yīng)用的基礎(chǔ)功能售淡,如角色管理斤葱、權(quán)限管理、用戶管理等揖闸,還可以配置數(shù)據(jù)源揍堕,啟用或禁用某些模塊,配置服務(wù)監(jiān)控的主動(dòng)汤纸、被動(dòng)方式和監(jiān)控間隔衩茸,告警方式等等。
怎么嵌入已有的管理后臺(tái)
我們現(xiàn)在看到的是 Icinga web 2 項(xiàng)目的效果圖贮泞,那如果要把這些功能集成到已有的管理后臺(tái)上做展示該怎么辦呢楞慈?一個(gè)方法是用 iframe 在管理后臺(tái)的頁面上嵌入 Icinga web 2 的頁面,這樣做的好處是頁面是現(xiàn)成的啃擦,只需要簡單集成囊蓝,缺點(diǎn)是兩套頁面風(fēng)格不能保持統(tǒng)一體驗(yàn),權(quán)限不好管理令蛉。另一個(gè)方案是直接調(diào)用 Icinga 的接口獲取數(shù)據(jù)聚霜。Icinga 提供了 RESTful 的API,只需要后端程序用一個(gè)固定的身份賬號(hào)去取數(shù)據(jù)珠叔,封裝一層后可以增加權(quán)限控制蝎宇、自定義提醒等邏輯,實(shí)現(xiàn)比較靈活祷安,頁面也可以用已有的組件和風(fēng)格姥芥,完美集成。當(dāng)然汇鞭,缺點(diǎn)也比較明顯凉唐,要封裝調(diào)用API,并重新開發(fā)頁面虱咧。
總結(jié)
以上就是我今天花了一個(gè)多小時(shí)了解了 Icinga 系統(tǒng)后所想到的熊榛,在接下來的項(xiàng)目應(yīng)用中,我應(yīng)該更多是關(guān)注它提供的 RESTful API腕巡,結(jié)合我們項(xiàng)目和公司的實(shí)際情況去搭建一套實(shí)用的監(jiān)控系統(tǒng)玄坦。Bug 是不可避免的,那就讓我們?cè)?bug 出現(xiàn)時(shí)就知道它的存在,迅速解決它吧煎楣。