mon是壹個通用目的地資源監視系統,可以備用於監視網絡服務的可用性,服務器問題,諸如溫度等影響系統運行的環境條件。
資源監視可以被視為兩部分獨立的任務:測試條件,當出現問題時觸發動作。mon被設計用於檢測獨立的stand-alone服務並能作出相應的響應動作。mon以調度器的形式實現監視任務的執行,當監視器失效時可以調用響應的告警程序。
我們壹般把mon作為集群環境中的資源監控平臺。通過它,我們能夠監控幾乎所有的已知服務,像服務、郵件服務等等,甚至能夠監視文件的變化,實時了解被控主機是否在重啟等等。mon為監視遠程主機的系統資源提供了壹個良好的平臺。除此之外,mon提供強大的告警機制,也就是在監視到具體的服務失效或者生效時,mon會作出什麽放映。可喜的是,不論是mon的監視工具monitor還是告警程序,都是通過便捷的腳本語言來書寫的。妳可以使用shell也可以使用perl或者別的什麽。需要傳遞的參數借助mon守護進程的變量、系統環境變量以命令行的方式傳遞給相應的具體腳本程序。
下面是壹些mon軟件包附帶的客戶端工具,可以在cgi-bin/ 和clients/ 子目錄下找到:
-moncmd, 用於客戶端的操作工具,實現了完整的客戶/服務接口。
-monshow,用於報告監視服務的運行狀態,既有命令行工具也提供了cgi教本。它可以以友好的、圖形化的樣式顯示服務當前的狀態、組信息和錯誤日誌。
-skymon, SKYTEL的雙路頁面調度接口,允許妳查詢服務狀態,同時提供了和moncmd壹致的維護服務的方法。訪問通過簡單的用戶/密碼認證機制和壹個訪問控制文件進行。
-mon.cgi, mon的web接口,不僅允許妳通過web頁面查看服務的運行狀態,還可以實時的改變服務的相應參數。
監視器和告警程序並不是mon的壹部分,盡管附帶的發行包中有壹些這樣的工具。這就意味著,如果有壹個新的服務需要監視或者有修改動作需要響應,mon也無須改動。這可以保證mon的可擴展性。
mon的特性
mon是針對linux開發的工具,但眾所周知在sorlaris下他也可以工作。因為客戶和服務端都是由perl語言書寫,因此在輕便性上不會有問題。
監控
“監控”這個詞是用於檢查特定的環境條件,以任何形式隨時報告服務成功還是失敗的消息。mon的設計非常獨立,妳可以使用自己喜愛的任何語言書寫監控程序,只要按照要求放在mon指定的地方,妳的監控程序就可以工作。
異步事件通信機制
mon服務支持異步事件的通信機制。這是壹個開放式的協議,就像monitor和alert腳本壹樣,妳可以觸發任何事件。壹個典型的應用就是作為SNMP的陷阱。遠程結點產生的陷阱事件可以采用和監視器池通知失效事件壹樣的處理方法。因此很容易就能建立壹個分布式的監控體系。例如,在壹個WAN範圍內,不同域的主機可以收集自身的運行信息,適時地將重大的事件通知位於中心位置的服務器,比如NOC等。
告警
“告警”教本用於在mon檢測到問題時,發送消息或者進行失效處理工作。這些告警腳本和監視腳本壹樣,也不是mon本身的壹部分,而是作為擴展的模塊可以隨意加入的。這裏也支持"Upalerts",是壹種用於當服務失效壹段時間隨即又恢復正常後所觸發的專用腳本程序。
告警管理和失效控制
任何受監控服務的失效都會引起告警行為,甚至同壹個事件會觸發多個告警消息分別到不同的用戶。妳可以使用這壹特性建立"on call"調度。例如,妳可以設定系統使之壹旦發現任何資源不可用的情況,經判斷是在早上8點以前,就發送告警消息給所有的系統管理員,如果在早上8點以後,只發送給管理員小王。
並行性
能夠將不同主機或者同組主機上的檢測服務工作並行化。例如,
限制重復報警
mon系統可以限制重復報警的行為。例如,妳可以設定壹個持續的失效服務僅沒1小時發送壹次告警郵件,而不是不停地發送。妳也可以選擇,忽略那些微小的、短暫的失效事件。
依賴關系
mon支持內部服務依賴特性。例如,當監視服務器和受監視的WWW服務器之間的路由失效時,雖然無法訪問HTTP服務,但正確的告警消息內容要指出是路由問題而非HTTP問題。當重要的資源不可訪問是,依賴關系也可以防止大量的告警消息發出。妳可以把依賴性理解成為層次結構或者是樹結構,當發生壹個失效事件時,這種依賴關系可以使失效事件按照樹結構的方向將處理任務傳遞到葉子結點上,也就是說,依賴關系能使告警盡可能的反映失效的真實情況。然而,復雜的依賴關系應該使用生成圖來表示,因為實際中妳是不會用樹結構或者層次結構來描述依賴關系的。
可擴展的配置
mon提供了壹個伸縮性、擴展性非常強的配置文件機制。主機可以被規劃成組,每個主機或者主機組可以有自己的多個服務(service)。具體可以參考壹下附帶的範例文件。
真正的客戶/服務模式
妳可以使用交互命令、WWW界面和SkyTel客戶端工具查詢服務的狀態和歷史紀錄。協議很簡單,使得妳可以很容易添加自己的客戶端工具。Mon支持多種認證方法,包括PAM,可以實現每個用戶的訪問控制。查詢服務狀態可以使用壹個Perl的API模塊進行編程,所以編寫妳自己的通信接口也很簡單,比如妳可以用WAP協議來訪問服務狀態。這裏要提的是,現在有幾個社區在發展自己的WWW接口工具。
基於視圖的狀態報告
通過復雜的配置文件,用戶可以通過服務狀態視圖查看信息,而不需要了解每壹個受監視服務的具體狀態。例如,壹個"network"視圖顯示了整個網絡拓撲的情況,而"servers"視圖則包括所有有關服務的信息。如故需要,妳可以為每個用戶配置視圖,用戶也可以控制他們自己的視圖。
允許或禁止實時告警
mon可以禁止壹個服務失效事件的正常告警行為,直到失效問題被解決才使之有效。這種狀態又叫"ack",可以在客戶接口獲得(恢復),這樣的話用戶就能知道支持人員正在解決特殊問題而不必多慮。它也可以將特定的主機、組或者服務設定為暫時禁止客戶端重新使能的狀態,而不需要停止或重啟服務。假如妳正在升級壹個特殊的服務,妳可以禁止告警功能,當升級完成後妳就可以重新使告警有效。
歷史記錄
mon可以保持失效事件、告警觸發等行為的歷史紀錄,以提供用戶將來查詢。
輕便
Mon是非常輕便的工具,擴展它的服務不需要編寫復雜的代碼,也無需經歷痛苦的編譯、鏈接過程。因為所有的擴展功能都是模塊化的,而且采用純腳本語言perl編寫。這壹點充分保證了Mon體系的輕便簡單。