Nagios監(jiān)控實(shí)戰(zhàn):性能評(píng)測(cè)分析
譯文【2013年2月22日 51CTO外電頭條】自從加入37Signals公司以來(lái),我一直在努力改善企業(yè)的監(jiān)控基礎(chǔ)設(shè)施。
我們的主要監(jiān)控方案采用的是Nagios,它與老款沃爾沃倒有幾分神似——也許外觀不夠漂亮、也許速度不夠驚人,但它易于使用、而且絕不會(huì)讓人束手無(wú)策。
下面聊幾句背景信息。2009年1月時(shí),我們擁有350項(xiàng)Nagios服務(wù)。而到了2010年9月,我們所使用的服務(wù)數(shù)量上升至797項(xiàng),目前則已經(jīng)達(dá)到7566項(xiàng)之巨。
在數(shù)字迅猛增長(zhǎng)的同時(shí),我們還大幅降低了故障警報(bào)的出現(xiàn)頻率,現(xiàn)在幾乎很少會(huì)有管理員會(huì)被大半夜拉起來(lái)處理緊急情況。
當(dāng)然,整個(gè)過(guò)程也出現(xiàn)過(guò)一些波折,但這一切都是為了實(shí)現(xiàn)更好的監(jiān)控效果。在本文中,我希望與大家分享一些在使用Nagios過(guò)程中總結(jié)出的實(shí)用提示,進(jìn)而幫助各位在擴(kuò)展及改進(jìn)監(jiān)控系統(tǒng)時(shí)獲得一些引導(dǎo)。
與37signals公司中的大多數(shù)方案一樣,我們的Nagios環(huán)境也由Chef平臺(tái)牢牢掌控。當(dāng)新的主機(jī)配置完成后,它們會(huì)被自動(dòng)添加到監(jiān)控系統(tǒng)當(dāng)中。一年多之前,我們只能以自動(dòng)化方式監(jiān)控主機(jī)上的少數(shù)事務(wù):磁盤使用率、負(fù)載以及內(nèi)存等。
擴(kuò)大監(jiān)控范圍
為了扭轉(zhuǎn)局面,我們做的第一件事就是安裝Check_MK。Check_MK是一款Nagios插件,能夠自動(dòng)清查主機(jī)、收集性能數(shù)據(jù),并且提供了一套更友善的UI。在Check_MK的幫助下,我們現(xiàn)在能夠以自動(dòng)化方式在每臺(tái)主機(jī)上監(jiān)控20項(xiàng)指標(biāo);由Postfix隊(duì)列發(fā)往開(kāi)放TCP連接的所有信息都能受到監(jiān)控。Check_MK還提供了一套非常實(shí)用的后端,即mk_livestatus,允許我們向Nagios查詢實(shí)時(shí)主機(jī)、服務(wù)信息以及即將發(fā)送的處理指令。舉例來(lái)說(shuō),我們利用Livestatus來(lái)訓(xùn)練Campfire機(jī)器人接收警報(bào)并設(shè)定停機(jī)時(shí)間。通過(guò)Tally,現(xiàn)在我們幾乎可以通過(guò)Campfire完成全部Nagios交互工作。
我們還逐步在Nagios中添加了大量針對(duì)特定應(yīng)用程序的監(jiān)控方案——我們利用statsd追蹤響應(yīng)時(shí)間、錯(cuò)誤代碼及其它各種有助于衡量應(yīng)用程序性能的指標(biāo),此外MySQL、Redis以及Memcached統(tǒng)計(jì)數(shù)字也被納入了進(jìn)來(lái)。要想在客戶發(fā)現(xiàn)問(wèn)題前將其消滅在萌芽階段,這些監(jiān)控手段是必不可少的。額外檢查項(xiàng)目的加入使我們對(duì)系統(tǒng)運(yùn)行狀態(tài)有了更為直觀的了解,但凡事有利就有弊:由于監(jiān)控方案的大幅加強(qiáng),我們安裝并運(yùn)行Nagios的主機(jī)在性能方面承受著很大壓力。
存在的問(wèn)題
對(duì)于中小型使用環(huán)境而言,Nagios的開(kāi)箱即用效果非常突出;但我們很快發(fā)現(xiàn)了一些局限性,而這給我們帶來(lái)不小的麻煩。首先,由于Nagios常常拿不出足夠的資源執(zhí)行檢查工作,因此在設(shè)定檢查與執(zhí)行檢查之間往往存在45秒的延遲。為了降低這種延遲,我們對(duì)安裝配置做出了大量調(diào)整,其中一項(xiàng)效果明顯,直接將平均延遲時(shí)間壓縮至0.3秒以內(nèi)。遺憾的是由此帶來(lái)的主機(jī)負(fù)載也同樣明顯——Nagios在給定時(shí)段中的檢查活動(dòng)數(shù)量受到影響,延遲檢查出于資源節(jié)約考慮而被自動(dòng)忽略掉了。在放開(kāi)這一性能瓶頸后,我們的負(fù)載強(qiáng)度由5%上升到30%左右(我們的主監(jiān)控服務(wù)器采用兩塊至強(qiáng)E5530處理器)。
最后,我決定在負(fù)載失控之前進(jìn)行檢查數(shù)量縮減。經(jīng)過(guò)實(shí)踐,我們發(fā)現(xiàn)縮減使用頻率最高的check_mk代理檢查對(duì)于負(fù)載的影響微乎其微,但將其它幾項(xiàng)活動(dòng)檢查的執(zhí)行頻繁降低一半則大大減輕了主機(jī)負(fù)載——由30%下降至10%以下。由此我們可以看出,主動(dòng)服務(wù)才是節(jié)約性能的最大敵人,必須不惜一切代價(jià)予以消除。
Nagios服務(wù)上手指南
- 主動(dòng)服務(wù)是指那些由可執(zhí)行shell腳本所定義、能夠由Nagios直接執(zhí)行的檢查項(xiàng)目。這項(xiàng)服務(wù)需要進(jìn)行時(shí)間間隔設(shè)定,進(jìn)入調(diào)度程序后會(huì)根據(jù)進(jìn)程啟用情況自動(dòng)執(zhí)行。Nagios必須進(jìn)行shell釋放、執(zhí)行檢查腳本、等待結(jié)果、分析結(jié)果、將結(jié)果添加到命令緩沖區(qū)然后處理結(jié)果等一系列工作,且在整個(gè)檢查過(guò)程中該線程會(huì)保持運(yùn)行并不能用于任何其它工作。
- 被動(dòng)服務(wù)是指那些由Nagios(例如check_mk代理檢查)或其它機(jī)制所觸發(fā)、但不會(huì)被Nagios服務(wù)器主動(dòng)啟用的檢查項(xiàng)目。在存在被動(dòng)檢查結(jié)果時(shí),外部進(jìn)程會(huì)直接將結(jié)果添加至命令緩沖區(qū)中,并由Nagios將其作為主動(dòng)檢查結(jié)果進(jìn)行處理。Nagios并不會(huì)對(duì)此類檢查進(jìn)行調(diào)度或者利用資源加以執(zhí)行,因此這些檢查所占用的資源也少得多。
我們的大多數(shù)主動(dòng)服務(wù)都會(huì)向內(nèi)部?jī)x表板應(yīng)用發(fā)送HTTP請(qǐng)求,旨在獲取前文提到過(guò)的應(yīng)用及數(shù)據(jù)庫(kù)指標(biāo)。由于Nagios主動(dòng)檢查指標(biāo)的方案會(huì)占用過(guò)多硬件資源,我們決定定期通過(guò)網(wǎng)頁(yè)接口推送來(lái)自Statsd的更新信息(這一機(jī)制由Slanger庫(kù)實(shí)現(xiàn))。要做到這一點(diǎn),我們?cè)贑hef上創(chuàng)建一個(gè)配置文件,其中包含我們所需要的指標(biāo)、相關(guān)閾值以及簡(jiǎn)潔的后臺(tái)訂閱描述。這樣檢查結(jié)果數(shù)據(jù)就會(huì)定期被發(fā)送至Livestatus處,并被添加到命令緩沖區(qū)中進(jìn)行處理。我們還將這些來(lái)自儀表板的推送檢查與其它腳本檢查加以整合。
結(jié)果匯總
與我們的預(yù)期一致,將服務(wù)轉(zhuǎn)為被動(dòng)屬性大大降低了Nagios的CPU使用率,具體情況如下圖所示:
總而言之,我們將主動(dòng)服務(wù)的數(shù)量由1900降低到745。幸存下來(lái)的檢查項(xiàng)目大多必須采取主動(dòng)狀態(tài)——例如ping檢查、Check_MK代理以及應(yīng)用程序HTTP檢查等。因?yàn)橹挥羞@樣我們才能在項(xiàng)目出現(xiàn)問(wèn)題時(shí)及時(shí)得到警告。
從某種程度來(lái)說(shuō),這只是種負(fù)載轉(zhuǎn)移過(guò)程——某些負(fù)載被轉(zhuǎn)嫁到其它主機(jī)當(dāng)中,并通過(guò)檢查腳本或者后臺(tái)推送程序?qū)⒔Y(jié)果傳遞給Nagios。不過(guò)這種收益還是相當(dāng)顯著且順理成章的(將負(fù)載分?jǐn)偟椒?wù)器閑置資源中),我們還通過(guò)對(duì)檢查腳本的重新編寫改裝最系統(tǒng)全局執(zhí)行效率、消除了成千上萬(wàn)HTTP請(qǐng)求所帶來(lái)的資源占用。更重要的是,我們?cè)诨謴?fù)原有檢查間隔的同時(shí)還添加了一些新的監(jiān)控項(xiàng)目,并且始終將負(fù)載控制在3%、延遲控制在0.5秒以下。
希望我在打理監(jiān)控基礎(chǔ)設(shè)施方面的經(jīng)驗(yàn)?zāi)軒椭蠹艺业綄?shí)際問(wèn)題的解決辦法。過(guò)去那種“添加其它可執(zhí)行腳本”的方式實(shí)在太過(guò)狹隘,其實(shí)我們完全能以其它方式更好地搞定難題。從某種意義上說(shuō),即使各位的監(jiān)控系統(tǒng)并沒(méi)有出問(wèn)題,這篇文章也能在進(jìn)一步提升性能表現(xiàn)方面有所借鑒。
原文鏈接:http://37signals.com/svn/posts/3178-nagios-monitoring-performance