Ganglia簡介
Ganglia是UC Berkeley發(fā)起的一個開源集群監(jiān)視項(xiàng)目,設(shè)計(jì)用于測量數(shù)以千計(jì)的節(jié)點(diǎn)终畅。Ganglia的核心包含gmond籍胯、gmetad以及一個Web前端。主要是用來監(jiān)控系統(tǒng)性能离福,如:cpu 杖狼、mem、硬盤利用率术徊, I/O負(fù)載、網(wǎng)絡(luò)流量情況等鲸湃,通過曲線很容易見到每個節(jié)點(diǎn)的工作狀態(tài)赠涮,對合理調(diào)整、分配系統(tǒng)資源暗挑,提高系統(tǒng)整體性能起到重要作用笋除。
Ganlia結(jié)構(gòu)
Ganglia在結(jié)構(gòu)上由三種守護(hù)進(jìn)程組成gmond 、gmetad和gweb炸裆。在操作上垃它,每種守護(hù)進(jìn)程都是獨(dú)立的,運(yùn)行時只需要自己的配置文件來操作即可烹看,任意守護(hù)進(jìn)程在缺少其他兩種守護(hù)進(jìn)程的情況下也可以正常啟動和運(yùn)行国拇。然而,三者在結(jié)構(gòu)上又是相互協(xié)作的惯殊,需要同時使用才能發(fā)揮功效酱吝。
gmond
gmond和普通代理一樣,安裝在每一臺需要監(jiān)控的主機(jī)上土思,負(fù)責(zé)與操作系統(tǒng)交互以獲得需要關(guān)注的指標(biāo)數(shù)據(jù)务热,例如CPU負(fù)載和硬盤容量。
gmond在內(nèi)部采用模塊化設(shè)計(jì)己儒,采用基于C語言編寫的崎岂、根據(jù)操作系統(tǒng)定制的插件進(jìn)行監(jiān)控。和其他監(jiān)控系統(tǒng)采用的客戶端代理軟件不同闪湾,gmond不需要等待外部輪詢引擎的數(shù)據(jù)監(jiān)測請求冲甘,也不將監(jiān)控數(shù)據(jù)直接上傳至集中式輪詢器,而是根據(jù)自己本地配置文件定義的調(diào)度方案進(jìn)行輪詢途样。監(jiān)測數(shù)據(jù)時使用簡單的監(jiān)聽/通告協(xié)議损合,通過 XDR (External Data Representation)在集群內(nèi)的主機(jī)之間共享。因此娘纷,Ganglia集群內(nèi)的每個節(jié)點(diǎn)都知道同一集群內(nèi)所有主機(jī)的當(dāng)前指標(biāo)數(shù)據(jù)嫁审。遠(yuǎn)程輪詢器可以通過端口8649向集群內(nèi)任意節(jié)點(diǎn)請求獲得該集群XML格式的所有數(shù)據(jù)。
gmond并不是消極等待被監(jiān)控系統(tǒng)服務(wù)器喚醒赖晶,而總是處于激活態(tài)律适,以便進(jìn)行測量辐烂、傳輸和共享。輪詢器不再需要知道從哪些主機(jī)獲取哪些服務(wù)捂贿,而只需要一個包含每個集群內(nèi)至少一臺主機(jī)名稱的列表即可纠修。
gmetad
gmetad的作用是整合所有信息。
gmeted是一個簡單的輪詢器厂僧,對網(wǎng)絡(luò)中每個集群進(jìn)行輪詢扣草,并將每臺主機(jī)上返回的所有指標(biāo)數(shù)據(jù)寫入各個集群對應(yīng)的輪詢數(shù)據(jù)庫RRD。
作為數(shù)據(jù)存儲的一種流行的解決方案颜屠,RRDtool是很好的選擇辰妙。指標(biāo)數(shù)據(jù)存儲于輪詢數(shù)據(jù)庫(Round Robin Database),這種數(shù)據(jù)庫包含了多個時間塊內(nèi)靜態(tài)分配的數(shù)值甫窟。如果每10秒進(jìn)行一次輪詢密浑,每次數(shù)據(jù)都進(jìn)行存儲,一天將需要8640次存儲粗井《疲考慮到數(shù)據(jù)保留需求, RRDtool內(nèi)部以“循環(huán)覆蓋”的方式管理數(shù)據(jù)浇衬,將新數(shù)據(jù)的值疊加到原來的數(shù)值上來覆蓋原有數(shù)據(jù)懒构。
gweb
Ganglia可視化工具——gweb無需用戶進(jìn)行任何自定義設(shè)置即可便捷、及時地訪問網(wǎng)絡(luò)中任意一臺主機(jī)的任意一種指標(biāo)數(shù)據(jù)耘擂。
主節(jié)點(diǎn)安裝配置
ganglia是一個集群監(jiān)控項(xiàng)目痴脾,要分主節(jié)點(diǎn)和從節(jié)點(diǎn)。首先梳星,我們來完成主節(jié)點(diǎn)的安裝配置赞赖。
1、更新軟件源中的軟件列表
sudo apt-get update
2冤灾、安裝gmond前域、gmetad和gweb
sudo apt-get install ganglia-monitor rrdtool gmetad ganglia-webfrontend
3、配置gmond
sudo vi /etc/ganglia/gmond.conf
分別找到:
cluster {
name = "unspecified"
owner = "unspecified"
latlong = "unspecified"
url = "unspecified"
}
udp_send_channel {
mcast_join = 239.2.11.71
port = 8649
ttl = 1
}
udp_recv_channel {
mcast_join = 239.2.11.71
port = 8649
bind = 239.2.11.71
}
修改為:
cluster {
name = "my cluster"
owner = "unspecified"
latlong = "unspecified"
url = "unspecified"
}
udp_send_channel {
# mcast_join = 239.2.11.71
host = 192.168.56.103
port = 8649
ttl = 1
}
udp_recv_channel {
# mcast_join = 239.2.11.71
port = 8649
# bind = 239.2.11.71
}
4韵吨、配置gmetad
sudo vi /etc/ganglia/gmetad.conf
查找cluster
匿垄,注釋掉該行,修改為:
# data_source "my cluster" localhost
data_source "my cluster" 10 192.168.56.103:8649
data_source后面有三個參數(shù)归粉,第一個參數(shù)"my cluster"是集群名稱椿疗;第二個參數(shù)10是輪詢時間(單位:秒);第三個參數(shù)192.168.56.103:8649是要監(jiān)聽的機(jī)器的IP和端口(可寫多個糠悼,用空格隔開)届榄。
5、配置gweb
sudo cp /etc/ganglia-webfrontend/apache.conf /etc/apache2/sites-enabled/ganglia.conf
6倔喂、重啟服務(wù)
sudo /etc/init.d/ganglia-monitor restart
sudo /etc/init.d/gmetad restart
sudo /etc/init.d/apache2 restart
7铝条、測試訪問
ubuntu測試:curl http://192.168.56.103/ganglia/
瀏覽器訪問測試:http://192.168.56.103/ganglia/
從節(jié)點(diǎn)安裝配置
以上靖苇,已經(jīng)完成了ganglia主節(jié)點(diǎn)的安裝配置,但是往往我們要監(jiān)控的是一個集群班缰。接下里贤壁,我們就來研究一下從節(jié)點(diǎn)的配置。
Ganglia結(jié)構(gòu)一節(jié)中埠忘,我們了解到脾拆,gmond要安裝在每一個節(jié)點(diǎn),負(fù)責(zé)監(jiān)控主機(jī)情況莹妒;gmetad(包括rrdtool)只要安裝在主節(jié)點(diǎn)就可以名船,負(fù)責(zé)收集各個節(jié)點(diǎn)的數(shù)據(jù);gweb只要安裝在主節(jié)點(diǎn)包帚,負(fù)責(zé)顯示gmetad收集的數(shù)據(jù)运吓。
綜上拘哨,從節(jié)點(diǎn)只要安裝gmond就可以了倦青。
從節(jié)點(diǎn)
假設(shè)我們有一個從節(jié)點(diǎn)产镐,IP為192.168.56.104癣亚,那么它的安裝配置步驟如下:
1述雾、更新軟件源中的軟件列表
sudo apt-get update
2玻孟、安裝gmond
sudo apt-get install ganglia-monitor
3、配置gmond
sudo vi /etc/ganglia/gmond.conf
分別找到:
cluster {
name = "unspecified"
owner = "unspecified"
latlong = "unspecified"
url = "unspecified"
}
udp_send_channel {
mcast_join = 239.2.11.71
port = 8649
ttl = 1
}
udp_recv_channel {
mcast_join = 239.2.11.71
port = 8649
bind = 239.2.11.71
}
修改為:
cluster {
name = "my cluster"
owner = "unspecified"
latlong = "unspecified"
url = "unspecified"
}
udp_send_channel {
# mcast_join = 239.2.11.71
host = 192.168.56.103
port = 8649
ttl = 1
}
udp_recv_channel {
# mcast_join = 239.2.11.71
port = 8649
# bind = 239.2.11.71
}
沒錯,從節(jié)點(diǎn)的gmond配置和主節(jié)點(diǎn)完全相同艳丛。
4、重啟服務(wù)
sudo /etc/init.d/ganglia-monitor restart
主節(jié)點(diǎn)
配置完從節(jié)點(diǎn)就好了嗎织阳?并沒有唧躲,主節(jié)點(diǎn)也要做相應(yīng)修改碱璃,主要是修改下gmetad配置嵌器。
1爽航、sudo vi /etc/ganglia/gmetad.conf
查找cluster
,修改為:
# data_source "my cluster" localhost
data_source "my cluster" 10 192.168.56.103:8649 192.168.56.104:8649
這樣,就添加好了192.168.56.104這個從節(jié)點(diǎn)衷佃。
注意:gmetad會依次檢測指定主機(jī)氏义,并從第一臺響應(yīng)主機(jī)開始收集狀態(tài)數(shù)據(jù)邻邮,而每一臺主機(jī)上的gmond都知道所在集群的所有狀態(tài)數(shù)據(jù)吮螺,所以無需在data_source定義里指定集群內(nèi)的所有主機(jī)萝风。假若有節(jié)點(diǎn)失效规惰,通常指定兩三個主機(jī)也就足夠保證數(shù)據(jù)的收集揩晴。
2硫兰、重啟gmetad
sudo /etc/init.d/gmetad restart
3劫映、測試訪問
等待10秒泳赋,再次訪問 http://192.168.56.103/ganglia/ ,就能看到新加入的從節(jié)點(diǎn)祖今。
刪除數(shù)據(jù)
由于重設(shè)了管理機(jī)的系統(tǒng)時間,發(fā)現(xiàn)所有的機(jī)器狀態(tài)都變成了Hosts down大渤,這時我們需要刪除數(shù)據(jù)重新開始統(tǒng)計(jì)。
1耕捞、管理機(jī)刪除rrds目錄下所有文件
cd /var/lib/ganglia/rrds && sudo rm -rf ./*
2、管理機(jī)重啟gmond和gmetad
sudo /etc/init.d/ganglia-monitor restart
sudo /etc/init.d/gmetad restart
3、客戶機(jī)重啟gmond
sudo /etc/init.d/ganglia-monitor restart
刪除機(jī)器
ganglia默認(rèn)服務(wù)器down機(jī)也不會在web前端清除該設(shè)備磷斧,官方文檔介紹的辦法如下:
1、登錄管理機(jī)
2档桃、編輯gmond.conf憔晒,sudo vim /etc/ganglia/gmond.conf
在globals中找到host_dmax藻肄,它的默認(rèn)值為0蔑舞,意思是不清除節(jié)點(diǎn)。host_dmax的單位為秒嘹屯,我們把host_dmax的值修改為7天攻询,就是60x60x24x7=604800,即超過7天未匯報數(shù)據(jù)的節(jié)點(diǎn)會從前端清除州弟。