首先感謝孔峰同志贈(zèng)書,讓我能夠?qū)agios這個(gè)世界級(jí)的開源監(jiān)控產(chǎn)品有了一個(gè)系統(tǒng)級(jí)的認(rèn)識(shí)。
對(duì)于一個(gè)曾經(jīng)的運(yùn)維,監(jiān)控系統(tǒng)會(huì)變成夜夜狼嚎,讓人無法安睡,是深有體會(huì)。一個(gè)好的監(jiān)控系統(tǒng)尤為重要,nagios這個(gè)應(yīng)用是如何解決這個(gè)問題呢?我理解應(yīng)該是采用眾創(chuàng)的方式,但這種眾創(chuàng)的方式有點(diǎn)像免費(fèi)游戲,每個(gè)使用者又是免費(fèi)玩家,你可以通過自己的勤奮練級(jí)(編碼),打怪(集成插件)來定制一套符合自己的監(jiān)控系統(tǒng)。
所以,nagios推崇的不是一次性整體的解決方案,而是與其他開源工具互操作,組合完成。作者認(rèn)為:現(xiàn)實(shí)中大多數(shù)商業(yè)軟件的產(chǎn)品方向,他們解決問題的方式是假設(shè)所有人都希望采用相同的解決方案(注:可復(fù)制性是商業(yè)軟件的盈利基礎(chǔ)。商業(yè)的解決方案目前也趨向于自助選擇按需服務(wù),但是與nagios這樣的產(chǎn)品由用戶創(chuàng)造內(nèi)容還差距較大)。商業(yè)軟件希望通過一站式解決方案滿足所有監(jiān)控需求,這就造成不斷的監(jiān)控代碼加入到了監(jiān)控軟件,逐漸也就形成了一份龐大的監(jiān)控功能清單。
監(jiān)控系統(tǒng)的構(gòu)建需要能夠有效的與環(huán)境中的其他系統(tǒng)交互,要適用于各種客戶,包括菜鳥和專家。監(jiān)控平臺(tái)的構(gòu)建不僅僅需要技術(shù)能力,還需要精心的規(guī)劃、全局的視角以及良好的人際溝通技巧。可能很重要的是,所構(gòu)建的系統(tǒng)不能對(duì)現(xiàn)有系統(tǒng)影響。拙略的監(jiān)控系統(tǒng)不僅會(huì)占用網(wǎng)絡(luò)、系統(tǒng)資源、還會(huì)產(chǎn)生安全問題,甚至?xí)绊懙叫氯怂倪\(yùn)維人員。“首先,不要帶來傷害”。
下面這個(gè)案例是一個(gè)典型的監(jiān)控所帶來的的問題,或者不合理的監(jiān)控s帶來的一種變向傷害:
**經(jīng)理:你把我加入監(jiān)控系統(tǒng)中,我想接收所有系統(tǒng)的警告消息。
管理員:所有的?
經(jīng)理:是的,所有的警告消息。
管理員:呃,好的。
------第二天
經(jīng)理 :昨晚傳呼機(jī)響個(gè)不停,害我一夜沒合眼,這意味著什么?
管理員:哦,服務(wù)器I的/var分區(qū)滿了,連接站點(diǎn)site5的VPN隧道時(shí)斷時(shí)續(xù)。
經(jīng)理:你就不能通知我實(shí)際的問題?
管理員:這就是實(shí)際的問題。**
并不是說管理員需要服務(wù)器1 的/var分區(qū)滿了的時(shí)候發(fā)出告警,而說在收到通知的時(shí)候,他應(yīng)該明白了通知的什么以上,管理層是希望立刻修復(fù)還是明天再說?還應(yīng)該通知誰(shuí)呢?如果他不響應(yīng)會(huì)發(fā)生什么?這種完備的信息對(duì)管理層抉擇是非常有幫助的,只有明確的定義問題的構(gòu)成,管理層才能給出自己的意見。監(jiān)控系統(tǒng)應(yīng)該執(zhí)行組織的制度,而非僅僅將問題反應(yīng)處理來,如果組織需要有人能夠10分鐘內(nèi)查看服務(wù)器1的所有問題,那么監(jiān)控系統(tǒng)應(yīng)當(dāng)給我們的管理員明確提供指示(比如優(yōu)先級(jí)),確認(rèn)告警消息的機(jī)制以及告警的自動(dòng)升級(jí)(例如超出10分鐘自動(dòng)通知他人)。
監(jiān)控規(guī)劃過程中,關(guān)鍵系統(tǒng)是有運(yùn)營(yíng)公司的管理層確定的,有點(diǎn)類似于災(zāi)難恢復(fù)順序,當(dāng)所有IT系統(tǒng)崩潰時(shí),恢復(fù)的順序應(yīng)該是監(jiān)控的優(yōu)先級(jí)的順序。獲得關(guān)鍵系統(tǒng)順序后,各專業(yè)系統(tǒng)的不同組件順序的優(yōu)先級(jí)應(yīng)該由專業(yè)系統(tǒng)的管理員給出定義。
建立減少監(jiān)控系統(tǒng)到監(jiān)控目標(biāo)的三層路由,避免對(duì)路由決策的依賴。避免擁塞阻塞,例如部署再內(nèi)網(wǎng)的監(jiān)控主機(jī),監(jiān)控主機(jī)在防火墻故障時(shí)候無法監(jiān)控dmz區(qū)域設(shè)備。一般解決的方法是在監(jiān)控主機(jī)上增加網(wǎng)卡,完成兩個(gè)網(wǎng)段的監(jiān)控。(減少監(jiān)控過程中的黑洞,避免影響監(jiān)控?cái)?shù)據(jù)的傳遞路徑。)
nagios 遵循UNIX哲學(xué):”只做一件事,并把它做好“、沉默是金(合適的監(jiān)控力度,不能太多,也不能太少);監(jiān)控閾值應(yīng)該跟隨環(huán)境的變化,例如CPU閾值70%,但新增了一個(gè)批量執(zhí)行腳本,再中午時(shí)段會(huì)引起75%的占用率,這種情況下應(yīng)該優(yōu)化閾值,對(duì)于羽翼未豐的監(jiān)控系統(tǒng)大量誤報(bào)會(huì)削弱可信度;設(shè)置通知時(shí)需要考慮聯(lián)系人的關(guān)系,例如DBA 不會(huì)關(guān)心主機(jī)的CPU利用率過高。
優(yōu)秀的監(jiān)控系統(tǒng)是專注的而非泛泛。他們監(jiān)控了許多服務(wù)以滿足分析需求,但是很少發(fā)出通知,而且只發(fā)送給想知道的那群人。而對(duì)于求知欲很強(qiáng)的人而已,為避免他們?nèi)礻P(guān)機(jī),只能每天定時(shí)給他們發(fā)送匯總或者摘要。端到端監(jiān)控可以看到系統(tǒng)存在問題,但是問題的原因卻無法反應(yīng)出來。例如:不出郵件,是因?yàn)镈NS故障造成的。
監(jiān)控系統(tǒng)需要一條用于監(jiān)控自己本身的規(guī)則,只需要知道監(jiān)控系統(tǒng)不宕機(jī)即可。監(jiān)控服務(wù)器的作用是通過不同協(xié)議與其他系統(tǒng)的交互,以便獲得監(jiān)控結(jié)果。
nagios是一個(gè)優(yōu)雅的程序,簡(jiǎn)單易懂。它能夠以用戶期望的方式完成用戶期望的工作,而且還能擴(kuò)展出一些驚人的事件。Nagios 能夠發(fā)揮個(gè)人的技術(shù)能力,你為了更好的集中化他們的監(jiān)控工具二花了五個(gè)月,通過一個(gè)免費(fèi)的監(jiān)控平臺(tái)而實(shí)現(xiàn),這會(huì)體現(xiàn)個(gè)人價(jià)值,并讓組織看到并重視你。(注:系統(tǒng)的人性****!管理員的價(jià)值!)
nagios主要監(jiān)控的對(duì)象是主機(jī)和服務(wù),主機(jī)是一切可以進(jìn)行TCP通信的東西,包括傳感器、冰箱等。服務(wù)這是由主機(jī)提供的邏輯實(shí)體,例如守護(hù)進(jìn)程。一個(gè)主機(jī)會(huì)有多個(gè)應(yīng)用被監(jiān)視,但是主機(jī)本身只有啟動(dòng)或者宕機(jī)兩個(gè)狀態(tài)。Nagios對(duì)于每臺(tái)主機(jī)設(shè)定唯一的監(jiān)測(cè)機(jī)制以及多個(gè)服務(wù)監(jiān)測(cè),例如定義check_ping 定義為主機(jī)檢測(cè),如果檢測(cè)失敗則主機(jī)down,對(duì)應(yīng)的所有主機(jī)檢測(cè)服務(wù)也不可用。
依賴關(guān)系
對(duì)于不同主機(jī)之間的相互依賴關(guān)系有兩種,父子關(guān)系、,如果父節(jié)點(diǎn)down后則子節(jié)點(diǎn)的主機(jī)不再進(jìn)行監(jiān)測(cè)。例如防火墻宕機(jī)后,防火墻后的服務(wù)器1則認(rèn)為不可達(dá)。nagios則不會(huì)再去監(jiān)測(cè)主機(jī)1和主機(jī)1上的服務(wù)。依賴關(guān)系的定義監(jiān)測(cè)的依賴關(guān)系,例如 某臺(tái)設(shè)備的web服務(wù)依賴與代理服務(wù)器的WEB服務(wù),如果nagios監(jiān)測(cè)到代理服務(wù)器的nagios服務(wù)失敗,則不會(huì)監(jiān)測(cè)所以web服務(wù)。(個(gè)人理解,例如tomcat down 就不會(huì)監(jiān)測(cè)web服務(wù))。 nagios對(duì)于服務(wù)和主機(jī)的定義在集群環(huán)境下的使用略顯不足,主要依靠其他插件完成。
插件:nagios 是一個(gè)調(diào)度和通知的框架,通過調(diào)用成為插件的小型監(jiān)控程序工作。
退出代碼機(jī)制(感覺應(yīng)該翻譯為返回碼),nagios 對(duì)于一切可以提供退出代碼的語(yǔ)言都進(jìn)行支持,共計(jì)支持 0 1 2 3 ,分別代表 正常、警告、嚴(yán)重、未知 4種監(jiān)控結(jié)果。nagios根據(jù)這些狀態(tài)碼進(jìn)行反應(yīng),決定是否通知誰(shuí)。(注,從這個(gè)機(jī)制看IFTTT? 這個(gè)服務(wù)和nagios很像, If this then that-如果這樣就怎樣。根據(jù)不同狀態(tài)做判斷)。 nagios 的的所有調(diào)度包括主機(jī)和服務(wù)的檢測(cè),他們都位于一個(gè)全局事件隊(duì)列中,但是并不嚴(yán)格控制絕對(duì)的時(shí)間,而是通過兩個(gè)選線組合定義出了了時(shí)間間隔,間隔長(zhǎng)度、重試間隔。nagios 通過交錯(cuò)因子完成檢測(cè)的分散負(fù)載,部門所有業(yè)務(wù)檢測(cè)都集中再一臺(tái)服務(wù)器上。
數(shù)據(jù)采集包括兩種類型,可以并發(fā)執(zhí)行和不能并發(fā)執(zhí)行的。nagios中的服務(wù)檢測(cè)都是可以并發(fā)執(zhí)行的。信息采集事件相當(dāng)于nagios的心跳,無理論插件執(zhí)行多快,只要沒有出現(xiàn)采集事件,nagios就不會(huì)處理這個(gè)插件。
通知,如果沒有配置過,則每次狀態(tài)改變nagios都會(huì)發(fā)出通知,或者是donw足夠長(zhǎng)后再發(fā)送出一次通知。全局通知的啟用后,nagios就會(huì)進(jìn)入程序持久化的狀態(tài),確保nagios能夠保留當(dāng)期各檢測(cè)服務(wù)的狀態(tài)。通知選項(xiàng),主機(jī)主要包括:不可達(dá)、宕機(jī)、恢復(fù)、震蕩,服務(wù)則包括:未知、嚴(yán)重、警告、恢復(fù)、震蕩。聯(lián)系人用于設(shè)定通知的對(duì)象。
模板,可以讓定義進(jìn)行復(fù)制,減少文字輸入時(shí)間。時(shí)間段,包括通知發(fā)送時(shí)間區(qū)間和服務(wù)檢測(cè)時(shí)間區(qū)間。nagios不僅僅是監(jiān)控系統(tǒng),更是一套信息收集程序。計(jì)劃宕機(jī)事件、狀態(tài)確認(rèn)及升級(jí)規(guī)則。
作為一本工具書文中也詳細(xì)描述了nagios的部署以及各種插件集成過程,切實(shí)網(wǎng)上也有不少入門教程,相對(duì)作者的更易懂,但作者的更為系統(tǒng)和全面。
nagios與商業(yè)產(chǎn)品相交互落伍(語(yǔ)法難用),界面太復(fù)古,沒有時(shí)序數(shù)據(jù),缺少數(shù)據(jù)庫(kù)等等,對(duì)于商業(yè)用戶,他們不愿意百鳥在林(在選擇開源插件),更愿意一鳥在手(可靠的解決問的服務(wù))。
