采集間隔
定義了采集的頻率,gmond按照這個頻率對某項數據進行采集和處理。對某些常量數據,如機器CPU的核數,只采集一次。
值閾值
定義采集值和上次報告的值之間的絕對值差(absolute difference),只有值的顯著變化才會引發一條消息。
時間閾值
該閾值定義了兩次報告測量值之間的最大時間間隔,而不管測量數據的值具體是多少。這個閾值是解決UDP的不可靠性的一種變通方案,提供了一種計算值的年齡的手段,如果自從我們上次收到報告以來,已經過去了一次或幾次該國值的時間,則認為我們的當前測量值是過時的。
從高層來看,gmond對其監測的測量數據遵從下列步驟:
1.采集當前的測量數據值。
2.如果當前值和上次報告的值的絕對值差大于指定的值閾值,轉步驟5。3.如果當前時間超過了發送測量數據的硬限制(hard limit),轉步驟5。
4.轉步驟7。
5.發送測量數據的值,并保存用于下次比較(在步驟2中)。
6.把時間閾值加到當前時間上,作為下次發送測量數據的硬限制。
7.進人睡眠,時長為采集間隔。
8.轉步驟1。
這種方式使得gmond只在測量數據發生顯著變化時才發送消息,而且,前述的計算也加上了一個隨機值,以減少網絡爭用。最后,對于數千臺機器,測量數據的采集與發送要協調進行。
對降低測量數據采集的成本同樣重要的是,將成本固定下來。最壞情況下,每次采集間隔的每次采集都發送一條消息,最好情況下,消息僅在指定的時間閾值過去之后發送。這個范圍使你能夠對測量數據采集建立一個固定的成本預算,當然,除非閾值有問題。
對于網絡測量數據,要小心選擇值國值。我在第一次把網絡測量數據采集加到Ganglia上時,把默認的采集間隔設置得太短,值閾值也設置得太小,在我的筆記本電腦上沒有注意到這種配置錯誤,在將Ganglia部署到大量的集群上的時候,這種錯誤就非常明顯了。每個節點都開始發送網絡測量數據更新,以響應其他節點的發送,Ganglia導致了一場巨大的網絡風暴。希望你不會發生這種尷尬的事情。
Ganglial應有而沒有的一個功能是測量數據的批量處理。你要是自己寫測量數據采集系統,記住要支持這個功能。將測測量數據收集起來批量發送,既減少了發送的網絡包數,也減少了帶寬占用。例如,你發送的每個IPv4UDP包都包含一個14字節的以太網頭部、一個20字節的P頭部、一個8字節的UDP頭部和一個4字節的以太網尾部。實際上這些數字還沒考慮如填充、VLAN、IP選項、IPv6的差異等因素,但我們可以用這些數字做一個大概的計算。假設你發送的數據是32字節,發送10次更新,則需要10個78字節的包,總計780字節。批量發送的話,則只需要1個366字節的包,其中320字節用于測量數據。這個例子中,批量發送減少了90%的包,帶寬減少了一半以上。批量發送的缺點是,一旦包丟失匯集與組織測量數據將會丟失多個數據,而不是一個。
如果一項測量數據對于一臺機器是有價值的,則可能對所有機器都有價值,這一點對系統測量數據而言是對的,但對于應用而言則不一定對。如,采集 MYSQL的測量數據,只對運行數據庫的機器才有意義。但是,每分鐘的負荷,則對于不論運行什么應用的機器而言,都是有意義的。
Ganglia元數據進程(gmetad)采集、匯集、存儲一組機器的測量數據,這種匯總數據將通過數據采集的層次結構,傳遞給上游的gmetad。這種層次結構的代理模式能夠創建很大的非中心化的測量數據采集重疊,這些重疊可以跨越一座校園或整個地球。
作為一個極端的例子,設想將美國的每臺機器都連到一個大的測量數據采集重疊上,我們將有一個國家級的gmetad,這個gmetad從運行在每個州的50個授權gmetad中獲取數據,每個州的gmetad從每個縣級的gmetad中收集數據,而每個縣級的gmetad從每個市級的gmetad中收集數據,等等。
這個例子中的根節點不會被美國的每臺機器中的所有測量數據壓垮,它只從每個州州獲取匯總數據,然后生成全美國的匯總數據。所以,對于將50個數加在一起這樣的運算,是不需要很強大的計算能力的。
Ganglia的Web前端通常安裝在運行gretai的機器上上,Web前端將gmetad的數據進行可視化,你可以直觀地測覽,并在測量數據采集重疊中進行導航。例如,你可以通過根節點的gmetad查看全美國的匯總信息,以及每個州的數據源,然后在圖上點擊伊利諾伊州,進入感興趣的數據。這種樹狀的測量數據值屬于空間組件,除此之外,還有時間組件。伊利諾伊州的Web前端,查看詳細信息。 Ganglia:還讓你可對圖片進行放大和縮小,以找到Gmetad:將測量數據存儲于RD數據庫中,RRD數據庫用于存儲數值數據并生成歷史報表。RD一個非常有用的特點是體積并不隨著時間的增長而增長。RRD的每個內部檔案庫( archive)都有固定數量的“桶”,新數據到來后,更新所有相關的檔案庫,并丟棄陳舊的數據。對于一個簡化的例子,你可以用24個桶對應于一天的24小時,另外的7個桶對應于一周的7天。要在不同時期中發現數據的趨勢,RRD是一個理想的工具。將日時序數據和前述的層次代理模式結合起來,可以用于回答這樣的問題:“對于全美國來說,過去一年CPU的利用率是一個什么樣的趨勢?”
盡管我希望如此, Ganglia卻從來沒有這樣大范圍地部署過。一個更為實際的例子是像Grid3群組這樣的,2003年使用 Ganglia,從數千臺機器中采集測量數據,這些機器分布在美國和韓國的幾十個站點,用于高等物理研究。這些為Grid3采集的測量數據嵌人其他系統,如 Globus,讓人們分享計算資源進行物理實驗。
從大量機器中匯集不同時期的數據,對于容量規劃也很有用。了解單臺機器的CPU利用率為80%是有用的,但知道整個網站建設集群上個月的利用率為80%卻更有價值。能夠看到這種種“宏觀圖景”,對于計劃硬件采購、發現處理流水線中的瓶頸、洞察Web運維的動態,都是非常有幫助的。
本文地址:http://123beaconmarketing.com//article/3314.html