ganglia簡介以及工作原理和配置

此文章用於學習和交流轉載請註明

也可加入羣316297243交流學習

1 Ganglia簡介

GangliaUC Berkeley發起的一個開源集羣監視項目,設計用於測量數以千計的節點。Ganglia的核心包含gmondgmetad以及一個Web前端。主要是用來監控系統性能,如:cpu mem、硬盤利用率,I/O負載、網絡流量情況等,通過曲線很容易見到每個節點的工作狀態,對合理調整、分配系統資源,提高系統整體性能起到重要作用。

看下ganglia監控的一個圖:

 

可以很只直觀的觀察系統的各個指標,特別是對於分佈式系統來說,無疑非常重要,而且Hadoop,Hbase提供了集成了ganglia的配置文件。


2 ganglia組成以及工作流程

2.1 組成

在了ganglia的組成之前,先來看下一張圖


從上圖可以很直觀的看到,一個監控系統大概包括:

Gmond,gmetad,rrdtool,Apache,PHP以及一個展示的web

組件:

1)gmond用於節點信息的收集和存儲

收集:一般用於收集本節點,用gmond.confudp_rev_channel來配置

存儲:並不是所有的gmond的都用來存儲,可以找出其中的一臺或者幾臺來存儲即可,用gmond.confudp_send_channel來配置。

各個gmond節點之間的信息發送接收主要用udp協議

2)gmetad 用於輪詢gmond節點存儲的信息

Gmetad可以配置輪詢的gmond節點,通過source 參數配置。

這裏的個gmond節點就是上面udp_send_channel所配置的節點,可以是hostname或者ip

3)rrdtool 用於存儲數據,畫圖

rrdtoolgmetad輪詢收集到的數據持久化磁盤文件中,並且還可以利用這些數據畫圖,更好的展示這些數據

4)gweb用於展示收集到的數據

 2.2 工作流程


監控的集羣節點的步驟如下:

第一步:在要收集的數據的每個節點安裝gmond,主要用來收集節點的信息以及存儲信息(這裏的存儲信息在後面會講解)

第二步:只要部署在一臺機器就可以了(部署在我們需要通過web訪問的機器上),主要用來輪詢收集gmond的信息,並以某種形式存儲到磁盤上。

第三步:安裝apache web服務器,以及php(由於gwebphp開發的),構建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時,gmonduser屬性指定的特定用戶的UID作爲有效UID;當值爲false時,gmond將不會改變其有效用戶。

debug_level(整數值)

當值爲0時,gmond將正常運行。當debug_level大於0時,gmond將在前臺運行並輸出調試信息。debug_level值越大,輸出越詳細。

max_udp_msg_len(整數值)

該值是gmond發送包所能包含的最大長度。一般情況下該值默認不變。

mute(布爾類型):

當值爲true時,不管其他配置指令如何,gmond將不能發送數據。“單收”(mutegmond節點只不向其他gmond守護進程發送數據,但仍然會響應諸如gmetad的外部輪詢器。

deaf(布爾類型):

當值爲true時,不管其他配置指令如何,gmond將不能接收數據。在每個集羣內擁有成千上萬節點的大型網格中,或者在細緻優化的HPC網格中(例如充分利用CPU的空閒週期),爲減少匯聚集羣狀態的相關開銷,經常將普通的計算節點設置爲單發。在這些情形下,某些特點的節點被預置爲單收,此時這些節點的性能指標將不會被測量,因爲這些節點將不會用作網格的運算。因爲這些節點的任務是匯聚,所以它們的性能數據會“污染”集羣內其他的功能部分。

allow_extra_data(布爾類型)

當值爲false時,gmond將不會發送XMLEXTRA_ELEMENTEXTRA_DATA部分。該值主要應用於用戶使用自己的前端並希望節省帶寬時。

host_dmax(以秒爲單位的整數值)

dmaxdelete max的縮寫。當值爲0時,即使遠程主機停止報告,gmond也不會從列表裏刪除該主機。如果host_dmax設置爲正值,當gmond在“host_dmax”秒內接收不到某臺主機的數據,gmond將刪除該主機。

host_tmax(以秒爲單位的整數值)

tmaxtimeout 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_joinIP;可選;僅多播)

當指定該選項時,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 ChannelTCP接收通道(TCP Accept Channel)是gmond節點創建向gmetad或其他外部輪詢器彙報集羣狀態的通道。用戶可以配置任意多選項。

默認TCP接收通道爲:
tcp_accept_channel {
   port = 8649
}

bindIP;可選)

當指定該選項時,gmond將捆綁到指定的本地地址。

port(數字)

gmong接收連接的端口號。


3.2  Gmetad

Gmetad 這個程序負責週期性的到各個datasource收集各個cluster的數據,並更新到rrd數據庫中。可以把它理解爲服務端。Gmond 收集本機的監控數據,發送到其他機器上,收集其他機器的監控數據,gmond之間通過udp通信,傳遞文件格式爲xdl。收集的數據供Gmetad讀取,默認監聽端口8649 ,監聽到gmetad請求後發送xml格式的文件。可以把它理解爲客戶端。

gmetad默認將指標數據直接寫入文件系統上的RRD文件,在有I/O限制的大型裝置中,rrdcached充當gmetadRRD文件之間的緩存,如下圖

 

常用配置

gridname(文本格式)

能唯一標識網格的字符串。該字符串應該與gmond中所設置的標識符不同。在gmond.conf的 (at cluster { name = XXX” }CLUSTER標識符中,用來表示gmond實例能收集到所有主機,而gridname屬性則表示由GRID標識符指定的所有數據源,可以理解爲在data_source中定義的一個集羣集合

data_source

每個data_source3個字段組成。第一個字段爲唯一標識data_source的字符串;第二個字段爲指定輪詢間隔(單位:秒)的數字;第三個字段爲以空格分開的所要輪詢數據的主機列表,這些地址以IP地址或DNS主機名的形式指定,並可能添加“:端口號”形式的後綴,該端口號指明gmondtcp_accept_channel所在位置。如果未指明端口號,gmetad將嘗試連接tcp/8649

setuid_usernameUID

gmetad設置UID的用戶名。默認爲nobody

rrd_rootdir(路徑)

指定RRD文件在本地文件系統存儲的基本目錄。

3.3 gweb

  gweb是最容易配置,也是需要配置最少就能工作的守護進程。實際上,無需改變gweb的任何默認配置,gweb就可以啓動並運行功能齊全的Web客戶端。

一個基於web的監控界面,通常和Gmetad安裝在同一個節點上(還需確認是否可以不在一個節點上,因爲php的配置文件中ms可配置gmetad的地址及端口),它從Gmetad取數據,並且讀取rrd數據庫,生成圖片,顯示出來。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章