此文章用於學習和交流轉載請註明
也可加入羣316297243交流學習
1 Ganglia簡介
Ganglia是UC Berkeley發起的一個開源集羣監視項目,設計用於測量數以千計的節點。Ganglia的核心包含gmond、gmetad以及一個Web前端。主要是用來監控系統性能,如:cpu 、mem、硬盤利用率,I/O負載、網絡流量情況等,通過曲線很容易見到每個節點的工作狀態,對合理調整、分配系統資源,提高系統整體性能起到重要作用。
看下ganglia監控的一個圖:
可以很只直觀的觀察系統的各個指標,特別是對於分佈式系統來說,無疑非常重要,而且Hadoop,Hbase提供了集成了ganglia的配置文件。
2 ganglia組成以及工作流程
2.1 組成
在了ganglia的組成之前,先來看下一張圖
從上圖可以很直觀的看到,一個監控系統大概包括:
Gmond,gmetad,rrdtool,Apache,PHP以及一個展示的web
組件:
1)gmond用於節點信息的收集和存儲
收集:一般用於收集本節點,用gmond.conf的udp_rev_channel來配置
存儲:並不是所有的gmond的都用來存儲,可以找出其中的一臺或者幾臺來存儲即可,用gmond.conf的udp_send_channel來配置。
各個gmond節點之間的信息發送接收主要用udp協議
2)gmetad 用於輪詢gmond節點存儲的信息
Gmetad可以配置輪詢的gmond節點,通過source 參數配置。
這裏的個gmond節點就是上面udp_send_channel所配置的節點,可以是hostname或者ip
3)rrdtool 用於存儲數據,和畫圖
rrdtool把gmetad輪詢收集到的數據持久化磁盤文件中,並且還可以利用這些數據畫圖,更好的展示這些數據
4)gweb用於展示收集到的數據
2.2 工作流程
監控的集羣節點的步驟如下:
第一步:在要收集的數據的每個節點安裝gmond,主要用來收集節點的信息以及存儲信息(這裏的存儲信息在後面會講解)
第二步:只要部署在一臺機器就可以了(部署在我們需要通過web訪問的機器上),主要用來輪詢收集gmond的信息,並以某種形式存儲到磁盤上。
第三步:安裝apache web服務器,以及php(由於gweb是php開發的),構建gweb的執行環境
第四步:安裝gweb,以web的形式更清晰的展示剛剛收集的歷史數據。
當然其中會用一些插件,後面會講解怎麼用以及怎麼安裝。
3 各個組件的配置說明
3.1 gmond
位置 /etc/ganglia/gmond.conf
3.1.1 Globals
globals {
daemonize = yes
setuid = yes
user = nobody
debug_level = 0
max_udp_msg_len = 1472
mute = no
deaf = no
allow_extra_data = yes
host_dmax = 86400 /*secs. Expires (removes from web interface) hosts in 1 day */
host_tmax = 20 /*secs */
cleanup_threshold = 300 /*secs */
gexec = no
send_metadata_interval = 0 /*secs */
}
daemonize(布爾類型)
當值爲true時,gmond將在後臺分散運行。當在守護進程管理器(如daemontool)下運行gmond時,將此值設置爲false。
setuid(布爾類型)
當值爲true時,gmond將user屬性指定的特定用戶的UID作爲有效UID;當值爲false時,gmond將不會改變其有效用戶。
debug_level(整數值)
當值爲0時,gmond將正常運行。當debug_level大於0時,gmond將在前臺運行並輸出調試信息。debug_level值越大,輸出越詳細。
max_udp_msg_len(整數值)
該值是gmond發送包所能包含的最大長度。一般情況下該值默認不變。
mute(布爾類型):
當值爲true時,不管其他配置指令如何,gmond將不能發送數據。“單收”(mute)gmond節點只不向其他gmond守護進程發送數據,但仍然會響應諸如gmetad的外部輪詢器。
deaf(布爾類型):
當值爲true時,不管其他配置指令如何,gmond將不能接收數據。在每個集羣內擁有成千上萬節點的大型網格中,或者在細緻優化的HPC網格中(例如充分利用CPU的空閒週期),爲減少匯聚集羣狀態的相關開銷,經常將普通的計算節點設置爲單發。在這些情形下,某些特點的節點被預置爲單收,此時這些節點的性能指標將不會被測量,因爲這些節點將不會用作網格的運算。因爲這些節點的任務是匯聚,所以它們的性能數據會“污染”集羣內其他的功能部分。
allow_extra_data(布爾類型)
當值爲false時,gmond將不會發送XML的EXTRA_ELEMENT和EXTRA_DATA部分。該值主要應用於用戶使用自己的前端並希望節省帶寬時。
host_dmax(以秒爲單位的整數值)
dmax是delete max的縮寫。當值爲0時,即使遠程主機停止報告,gmond也不會從列表裏刪除該主機。如果host_dmax設置爲正值,當gmond在“host_dmax”秒內接收不到某臺主機的數據,gmond將刪除該主機。
host_tmax(以秒爲單位的整數值)
tmax是timeout max的縮寫,代表gmond等待一臺主機更新的最長時間。因爲消息可能在網絡中丟失,所以如果在4倍的host_tmax時間內接收不到某臺主機的任何消息,gmond就認爲該主機已經崩潰。
cleanup_threshold(以秒爲單位的整數值)
gmond清除過期數據的最小時間間隔。
gexec(布爾類型)
當值爲true時,gmond將允許主機運行gexec任務。這種方式需要運行gexecd並安裝合適的驗證碼。
send_metadata_interval(以秒爲單位的整數值)
該值設置gmond兩次發送元數據包的時間間隔。元數據包是用來描述所有激活指標的數據包。該指令默認設置爲0,表示gmond只有在初始啓動和收到其他遠程運行的gmond節點請求時纔會發送元數據包。如果向集羣內添加一臺運行gmond的主機,則該主機節點需要向其他節點公佈自身信息,並告知目前支持的指標標準。在多播模式下,由於任何一個節點都可以向集羣內的其他節點請求發送元數據,因此該問題並不存在。然而,在單播模式下必須設置重發間隔。間隔值是兩次重發之間的最少秒數
3.1.2 cluster
cluster {
name = "unspecified"
owner = "unspecified"
latlong = "unspecified"
url = "unspecified"
}
每個gmond守護進程會使用在cluster section中定義的屬性來報告它所屬集羣的信息,使用默認值系統即可正常工作。
name(文本格式)
指定集羣名稱。當輪詢節點的集羣狀態的XML集合時,把該名稱插入CLUSTER元素內。輪詢該節點的gmetad會使用該值來命名存儲集羣數據的RRD文件。該指令將取代gmetad.conf配置文件中指定的集羣名稱。
owner(文本格式)
指定集羣管理員。
latlong(文本格式)
指定該集羣在地區上的GPS座標的經緯度。
url(文本格式)
指定攜帶集羣特定信息(如集羣用途和使用細節)的URL。
3.1.3 host
host section提供運行gmond主機的相關信息。目前只支持地址字符串屬性。默認host section爲:
host {
location = "unspecified"
}
location(文本格式)
3.1.4 udp_send_channel
UDP通道是通過udp_(send|receive)_channel section創建的。下面給出默認的UDP發送通道:
udp_send_channel {
#bind_hostname = yes
mcast_join = 239.2.11.71
port = 8649
ttl = 1
}
bind_hostname(布爾類型;可選;多播或單播)
通知gmond使用源地址解析主機名。
mcast_join(IP;可選;僅多播)
當指定該選項時,gmond將創建UDP套接字並加入由IP地址指定的多播組。該選項創建一個多播通道,並與host相互排斥。
mcast_if(文本格式;可選;僅多播)
當指定該選項時,gmond將發送來自指定接口(例如eth0)的數據。
host(文本格式或IP;可選;僅單播)
當指定該選項時,gmond將向已命名主機發送數據。該選項創建一個單播通道,並與mcast_join相互排斥。
port(數字;可選;多播或單播)
該選項指定gmond發送數據的端口號。如果未指定,則默認爲端口8649。
3.1.5 udp_recv_channel
udp_recv_channel {
mcast_join = 239.2.11.71
port = 8649
bind = 239.2.11.71
}
3.1.6 TCP Accept Channel
TCP Accept Channel。TCP接收通道(TCP Accept Channel)是gmond節點創建向gmetad或其他外部輪詢器彙報集羣狀態的通道。用戶可以配置任意多選項。
默認TCP接收通道爲:
tcp_accept_channel {
port = 8649
}
bind(IP;可選)
當指定該選項時,gmond將捆綁到指定的本地地址。
port(數字)
gmong接收連接的端口號。
3.2 Gmetad
Gmetad 這個程序負責週期性的到各個datasource收集各個cluster的數據,並更新到rrd數據庫中。可以把它理解爲服務端。Gmond 收集本機的監控數據,發送到其他機器上,收集其他機器的監控數據,gmond之間通過udp通信,傳遞文件格式爲xdl。收集的數據供Gmetad讀取,默認監聽端口8649 ,監聽到gmetad請求後發送xml格式的文件。可以把它理解爲客戶端。
gmetad默認將指標數據直接寫入文件系統上的RRD文件,在有I/O限制的大型裝置中,rrdcached充當gmetad和RRD文件之間的緩存,如下圖
常用配置
gridname(文本格式)
能唯一標識網格的字符串。該字符串應該與gmond中所設置的標識符不同。在gmond.conf的 (at cluster { name = “XXX” })CLUSTER標識符中,用來表示gmond實例能收集到所有主機,而gridname屬性則表示由GRID標識符指定的所有數據源,可以理解爲在data_source中定義的一個集羣集合
data_source
每個data_source由3個字段組成。第一個字段爲唯一標識data_source的字符串;第二個字段爲指定輪詢間隔(單位:秒)的數字;第三個字段爲以空格分開的所要輪詢數據的主機列表,這些地址以IP地址或DNS主機名的形式指定,並可能添加“:端口號”形式的後綴,該端口號指明gmond的tcp_accept_channel所在位置。如果未指明端口號,gmetad將嘗試連接tcp/8649
setuid_username(UID)
gmetad設置UID的用戶名。默認爲nobody
rrd_rootdir(路徑)
指定RRD文件在本地文件系統存儲的基本目錄。
3.3 gweb
gweb是最容易配置,也是需要配置最少就能工作的守護進程。實際上,無需改變gweb的任何默認配置,gweb就可以啓動並運行功能齊全的Web客戶端。
一個基於web的監控界面,通常和Gmetad安裝在同一個節點上(還需確認是否可以不在一個節點上,因爲php的配置文件中ms可配置gmetad的地址及端口),它從Gmetad取數據,並且讀取rrd數據庫,生成圖片,顯示出來。