所謂兵馬未動(dòng),糧草先行,準(zhǔn)備將
storm用在某個(gè)項(xiàng)目中做實(shí)時(shí)數(shù)據(jù)分析。無論任何系統(tǒng),一定要有監(jiān)控系統(tǒng)并存,當(dāng)故障發(fā)生的時(shí)候你能第一個(gè)知道,而不是讓別人告訴你,那處理故障就很被動(dòng)了。
因此我寫了這么個(gè)項(xiàng)目,取名叫storm-monitor,放在了github上
https://github.com/killme2008/storm-monitor 主要功能如下:
1.監(jiān)控supervisor數(shù)目是否正確,當(dāng)supervisor掛掉的時(shí)候會(huì)發(fā)送警告。
2.監(jiān)控nimbus是否正常運(yùn)行,monitor會(huì)嘗試連接nimbus,如果連接失敗就認(rèn)為nimbus掛掉。
3.監(jiān)控topology是否正常運(yùn)行,包括它是否正常部署,是否有運(yùn)行中的任務(wù)。
當(dāng)故障發(fā)生的時(shí)候通過alarm方法警告用戶,開放出去的只是簡(jiǎn)單地打日志。因?yàn)槊總€(gè)公司的告警接口不一樣,所以你需要自己擴(kuò)展,修改alarm.clj即可。我們這兒就支持旺旺告警和手機(jī)短信告警。
基本的原理很簡(jiǎn)單,對(duì)supervisor和topology的監(jiān)控是通過zookeeper來間接地監(jiān)控,通過定期查看path是否存在。對(duì)nimbus的監(jiān)控是每次起一個(gè)短連接連上去,連不上去即認(rèn)為掛掉。
整個(gè)項(xiàng)目也是用clojure寫。你的機(jī)器需要安裝
lein和
exec插件,然后將你的storm.yaml拷貝到conf目錄下,編輯monitor.yaml設(shè)定監(jiān)控參數(shù)如檢查間隔等,最后啟動(dòng)start.sh腳本即可。默認(rèn)日志輸出在logs/monitor.log。