Ganglia是一個分佈式的監控工具,用來對Grid和Cluster上面的節點進行監控,利用它提供的web界面能夠看到每一個節點狀態,而且能夠輸出 圖形化的表示。 Ganglia 是 UC Berkeley 發起的一個開源監視項目,設計用於測量數以千計的節點。每臺計算機都運行一個收集和發送度量數據(如處理器速度、內存使用量等)的名爲 gmond 的守護進程。它將從操做系統和指定主機中收集。接收全部度量數據的主機能夠顯示這些數據而且能夠將這些數據的精簡表單傳遞到層次結構中。正由於有這種層次 結構模式,才使得 Ganglia 能夠實現良好的擴展。gmond 帶來的系統負載很是少,這使得它成爲在集羣中各臺計算機上運行的一段代碼,而不會影響用戶性能。php
名詞說明前端
Metrics : 監控電腦的運行數據,這個詞中文比較難翻譯,英語中有度量的意思,下文我就不翻譯,直接用原詞。web
Node : 一臺電腦,或許擁有多個CPU,中文稱之爲節點。數據庫
Cluster : 一組節點,中文稱之爲簇。一般節點之間擁有達到G比特的高帶寬,簇內經過組播協議,每一個節點組播本身的數據,因此每一個節點擁有整個簇的狀態,這種冗餘設計能夠提升簇的魯棒性。通常簇內節點爲相同的系統和體系結構,由同一個管理員管理。服務器
Grid : 一組簇,中文可稱之爲網格。網格的用處是在一個大範圍內把各異構的簇經過寬帶匯聚在一塊兒。在文獻3中,還有一個概念是Planetary-scale systems,也就是全球性的網絡,通常部署於主幹網的根節點。而且假定,網內的帶寬不充裕,並且昂貴,常常有擁塞的狀況出現。這是加州伯克利的一個 GRID網絡:http://monitor.millennium.berkeley.edu 你能夠經過選擇Grid或者Cluster來查看各種數據。網絡
Ganglia的各類組成功能app
gmond(Ganglia Monitor Daemon) :數據採集器的服務程序,配置文件是/etc/gmond.conf 位於每一個Node上分佈式
gmetad(Ganglia Metadata Daemon):數據混合收集器的服務程序,配置文件是/etc/gmetad.conf。它經過輪詢收集gmond的數據,並聚合簇的各種信息,而後保 存在本地rrdtool的數據庫中,最好每一個cluster都有一個gmetad,以便能構建多級網絡.ide
Web可視化工具:這是用PHP腳本實現的將數據可視化,並畫出表格。能夠是任何支持PHP、SSL和XML的web服務器。通常都用Apache2web服務器工具
額外的高級工具
gmetric能夠用來添加你須要監控的Node額外狀態;gstat能夠直接得到Ganglia的數據,每臺須要這些功能的Node上
ganglia功能示意圖
從圖中能夠看到,簇內經過UDP協議組播壓縮的XML(XDR)數據,每一個節點共享簇內全部節點的信息,當gmetad輪詢簇內某個節點不成功時,也能夠輪詢其餘節點。gmetad經過TCP協議發送簇內數據給上層gmetad節點。
gmond程序由多個線程組成:
collect and publish thread線程用於採集節點的metrics並組播出去;
listening thread線程用於監聽組播端口,並把這些metrics保存於內存中的一個多級hash表;一組XML export threads線程組用於相應TCP請求,把簇內的metrics發送出去。
gmond 不會保存數據,僅僅是監聽保存並相應發送數據。節點間經過 heartbeat信號檢測對方節點存活與否,若是一段時間內該節點沒有廣播metrics,咱們視其宕機,並且每次啓動時,會廣播一個gmond啓動時 間,這時鄰居節點收到之後就視其機器重啓,會刪除該節點已存的全部metrics。
gmetad週期性的向data source發送輪詢包,併爲每一個源分配一個線程。採集的metrics,經由SAX XML進行解析,內置一個gperf的hash表,便於數據的處理,最後將處理好的數據存於RRDTools中。
metrics的組成
Metrics 數據由gmond內置的程序或gmetric程序得到,通常以XDR(外部數據表示法(External Data Representation,縮寫爲XDR))形式壓縮保存,保存格式爲:(key,value),key爲4 字節,value爲4-8字節。metrics的採集次數、頻率和發送時間間隔均在Gmond.conf中定義,gmond維持一個採集表,每一個 metric都有其屬性。
一個多簇異構Ganglia網絡的數據流
圖中有四種簇:
黃色Cluster - 既有本地的Node,也提供前端顯示的接口。它提供web服務器查看Ganglia的數據,其中不只包含本地的Node(可選),也包括藍色和綠色簇中的數據。
淡綠色Cluster - 前端web服務顯示,通常沒有本地節點。
藍色Cluster - 這個簇中沒有本地的數據收集器。因此這些節點將會共享全部數據(因爲gmond是用多播來發送數據,因此實現共享比較容易),而後其中一個節點將數據發送給上層的數據收集器。黃色簇的gmetad服務收集並儲存,若是沒有保存,這些數據將會丟失。
深綠色Cluster - 這個簇中擁有本地數據收集器和倉庫。綠色節點中也是共享數據,可是由一個簇頭節點收集數據,並儲存,在被詢問時經過TCP發送給上層的黃色簇。
通常性的組網建議:
一、網絡由許多深綠色節點和有本地節點的黃色簇組成
二、網絡由許多藍色節點和沒有本地節點的黃色簇組成
各種簇的配置綠色簇的配置
針對gmond.conf 得到gmond默認配置
gmond -t >/etc/gmond.conf
gmond.conf修改以下:
/* This configuration is as close to 2.5.x default behavior. as possible
The values closely match ./gmond/metric.h definitions in 2.5.x */
globals {
daemonize = yes
setuid = yes
user = nobody
debug_level = 0
max_udp_msg_len = 1472
mute = no
deaf = no
host_dmax = 0 /*secs */
cleanup_threshold = 300 /*secs */
gexec = no
}
/* If a cluster attribute is specified, then all gmond hosts are wrapped inside
* of a <CLUSTER> tag. If you do not specify a cluster tag, then all <HOSTS> will
* NOT be wrapped inside of a <CLUSTER> tag. */
cluster {
name = "green"
owner = "unspecified"
latlong = "unspecified"
url = "unspecified"
}
/* The host section describes attributes of the host, like the location */
host {
location = "unspecified"
}
/* Feel free to specify as many udp_send_channels as you like. Gmond
used to only support having a single channel. */
udp_send_channel {
mcast_join = green_header
port = 8649
}
/* You can specify as many udp_recv_channels as you like as well. */
udp_recv_channel {
port = 8649
family = inet4
}
...
對於mcast_join這個參數,green_header是簇頭節點的主機名,你能夠指定ip。
而後重啓gmond服務。
簇頭節點中/etc/gmetad.conf須要添加下面一行:
data_source "green" localhost
藍色簇的配置
藍色簇的配置與綠色簇相似,你只須要把簇的名字和簇頭的名字設定好,而後重啓全部節點的gmond服務。
黃色簇的配置
大部分配置與綠色簇相似,在/etc/gmetad.conf中須要加入如下幾行:
data_source "yellow" localhost
data_source "blue" blue_header
data_source "green" green_header
這樣gmetad就會:
一、聯繫本地gmond,獲取全部黃色節點的狀態數據。
二、聯繫blue_header節點的gmond,獲取全部藍色節點的狀態數據。這些數據將會保存在本地的rrdtool數據庫中。
三、聯繫green_header節點,獲取在gmetad收集的rrdtools的整合數據。注意這些數據並不會保存在黃色簇中的rrdtools中,因此若是前端web服務器刷新時,會從新向green_header請求更新的的數據。
此外,在/etc/gmetad.conf ,也能夠加入Grid的名稱: gridname "Rainbow"
如今Ganglia的網頁會顯示一個叫Rainbow的網絡,其中有三個簇:yellow,green和blue。
一些高級話題gmetric的使用
你能夠添加固件:
gmetric --name firmware --value `lsattr -El sys0 -a modelname -F value` --type "string"
添加磁盤的數目:
gmetric --name number_of_disks --value `lspv | wc -l` --type int32
添加對某項數據的監控(其中name是現實的名字,value是由myget程序獲取的,獲取的數字類型是由type決定):
gmetric --name tpm --value `/usr/local/bin/myget` --type double
上面統計都只是一次,若是你須要長久的顯示,最好是把上面的語句每60秒執行一次。而後,過幾分鐘之後,這些數據就會在網頁上顯示出來了。
對於gmetric的更多瞭解,你能夠看http://ganglia.wiki.sourceforge.net/ganglia_readme 。
這裏有一些自定義的gmetric腳本能夠參考:http://ganglia.sourceforge.net/gmetric/
使用gstat獲取數據,gstat能夠經過命令直接顯示數據,如:
[root@rac1 ~]# gstat
CLUSTER INFORMATION
Name: my_hadoop
Hosts: 3
Gexec Hosts: 0
Dead Hosts: 0
Localtime: Tue Feb 14 20:40:05 2012
There are no hosts running gexec at this time
[root@rac1 ~]#
你也能夠經過加參數獲取更多的信息:
[root@rac1 ~]# gstat --all --single_line
CLUSTER INFORMATION
Name: my_hadoop
Hosts: 3
Gexec Hosts: 0
Dead Hosts: 0
Localtime: Tue Feb 14 20:39:43 2012
CLUSTER HOSTS
Hostname LOAD CPU Gexec
CPUs (Procs/Total) [ 1, 5, 15min] [ User, Nice, System, Idle, Wio]
rac2 1 ( 0/ 481) [ 0.04, 0.14, 0.11] [ 2.3, 0.0, 0.4, 97.3, 0.1] OFF
rac3 1 ( 0/ 406) [ 0.07, 0.04, 0.01] [ 0.2, 0.0, 0.4, 99.4, 0.0] OFF
rac1 1 ( 0/ 777) [ 0.09, 0.43, 0.42] [ 2.7, 0.0, 0.9, 96.3, 0.0] OFF