2012年12月17日 星期一

Ganglia on Ubuntu server 12.04 LTS (update)

  Ganglia Monitoring System 是一套用來監視 grids 或 clusters 的可擴充性分散式系統監視工具軟體,結合了web-frontend網頁介面,使主機管理員可以在遠端,以閱覽網頁、觀察圖形的方式,監視每個 grids 或 clusters 的系統資訊,包括CPU、MEM、網路流量、process數......等等。
  這是一套 BSD-licensed 的 open source software,由 Berkeley 大學所開發的。許多 Linux 發行版的套件庫皆有提供 ganglia 的套件,Ubuntu 也不例外。


Ganglia 架構

Ganglia monitoring system 主要可以分成三部分:

ganglia monitoring daemon (gmond)

  受監控端的 monitoring daemon,執行在每個要監視的 host 節點上。此 daemon 會以XML格式,發送該 host 系統資訊。

ganglia meta daemon (gmetad)

  監控各節點的 meta daemon,收集 monitoring daemon 所送來的 host 資訊,並利用 rrdtool 儲存系統資訊。通常執行在 grid 中的其中一台 host 即可。

ganglia web-frontend

  web-frontend 提供動態的介面,讓主機管理員能即時得到各個 host 的資訊。通常會和 meta daemon 運行在同一台主機上。


利用apt-get建置ganglia

Environment:Ubuntu server 12.04 LTS 64-bit
Ganglia meta daemon version 3.1.7
Ganglia monitoring daemon version 3.1.7
RRDtool version 1.4.7

開始建置前記得先 apt-get update!

ganglia meta daemon (gmetad)

1.  meata daemen 需要 RRDtool 紀錄資訊,因此先安裝 rrdtool。
$ apt-get install rrdtool

2.  安裝 ganglia meta daemon。
$ apt-get install gmetad

3.  依需求修改 gmetad.conf 檔。
$ vi /etc/ganglia/gmetad.conf

At line 39:設定group名稱,並接著欲加入此group的host address。
(可設多個群組,詳細參考 config 說明)


4.  修改完 gmetad.conf 後,重新啟動 ganglia meta daemon。
$ /etc/init.d/gmetad restart


ganglia monitoring daemon (gmond)

1.  安裝 ganglia monitoring daemon。
$ apt-get install ganglia-monitor
2.  修改 gmond.conf 檔。
$ vi /etc/gangila/gmond.conf
Line 21、29:cluster name 和 hostname 設定相同 name,指定此 host 顯示在 monitoring daemon 的名稱。



3.  修改完 gmond.conf 後,重新啟動 ganglia monitoring daemon。
$ /etc/init.d/ganglia-monitor restart
4.  測試 gmond 是否運作。如輸入下列指令後有取得XML訊息,表示正確執行。
$ telnet localhost 8649

附註:
  在Ubuntu上,不清楚 ganglia monitor 的 script 問題出在哪,用 chkconfig --list 確定他確定有設定好隨著 system startup 自動執行,但是重新開機後, ganglia monitor daemon 卻不會自動啟動,一定要另外執行指令才能讓 ganglia monitor daemon 執行起來。後來學長提出一個解決方法,也確認了這個方法確實能讓 ganglia monitoring daemon 隨著系統啟動自動執行。
  我們在 /etc/rc.local 中,在 exit 0 之前加入以下指令:
sudo /etc/init.d/ganglia-monitor start
  問題解決!不過這問題我僅在用 apt-get 安裝才有遇到,自己測試時安裝的最新版本,修改好 script 後皆能自動啟動,不必修改 rc.local。

ganglia web-frontend

1.  安裝 ganglia web-frontend。
$ sudo apt-get install ganglia-webfrontend
2.  產生放置 ganglia web-frontend 檔案的資料夾。
(此以 /var/www/ganglia 為例,/var/www 是 apache 放置網頁的資料夾)
$ mkdir -p /var/www/ganglia
3.  複製檔案至 /var/www/ganglia 中。
$ cp /usr/share/ganglia-webfrontend/* /var/www/ganglia
4.  開啟瀏覽器連至 http://localhost/ganglia,若有顯示 ganglia 頁面,恭喜你成功建置 ganglia。
4-1.  如果圖形跑了很久都沒有數據,請回頭檢視 gmond.conf 和 gmetad.conf 是否設定好;每個 host 節點的 gmond 是否有執行。


結語

我曾經試過從 sourceforge 上下載最新的版本下來自己編譯、安裝,但是過程相當繁瑣,需要花費大量時間設定 configure 檔,編譯安裝,編譯,安裝;發現錯誤或 ganglia 找不到需要的程式或 library時又得在 reinstall。
  雖然辛苦,但是每當突破一個阻礙時,心情大好!最後看到整套系統成功運作起來時,欣喜若狂!(附註:其實還是有一些問題,像是heartbeat map、time ragne為job的圖形顯現不出來,不過真的找不到解決方法,所以暫時先擱著,之後有需要用新版架設時,再來找出問題點,說不定到時候官方也有了解決方案!)


手動建置 gmod 3.4.0

  由於 Ganglia monitoring daemon Version 3.1.7 版會和 NFS(Network File System)有衝突(mount point 名稱太長造成字串溢位),這個問題在 3.2.0 版已經獲得修正,但卻產生了另一個問題:無法找到 libganglia 函式庫,從官方討論區得知這是 3.2.0 版的問題。為了避免其他的問題,因此決定選用在個人測試階段時,沒有發生錯誤的最新版本 3.4.0 作為建置在每台 server 上的 monitoring daemon。
  從 http://ganglia.sourceforge.net/ 下載 ganglia monitor core 3.4.0 後,進行手動編譯、安裝,並修改 conf 檔讓程式依照需求傳送訊息。以下是個人在幫 server 安裝 monitoring daemon 的 bash script。

# !/bin/bash
apt-get update
apt-get install libapr1-dev libconfuse-dev libexpat1-dev
apt-get install libpcre3-dev daemon chkconfig pkg-config

mkdir -p /etc/ganglia
cp /home/master/mchsiao/ganglia-3.4.0.tar.gz /etc/ganglia
cd /etc/ganglia
tar -xzvf ganglia-3.4.0.tar.gz
cd ganglia-3.4.0
/etc/ganglia/ganglia-3.4.0/configure --prefix=/usr --sysconfdir=/etc/ganglia
make
make install

cp /etc/ganglia/ganglia-3.4.0/gmond/gmond.init /etc/init.d/gmond
vi /etc/init.d/gmond
# Line 23: . /etc/init.d/init-functions
# Line 30: pkill gmond

ln -s /usr/lib/insserv/insserv /sbin/insserv
chkconfig --add gmond
mkdir -p /var/lock/subsys

touch /etc/ganglia/gmond.conf
gmond -t > /etc/ganglia/gmond.conf
vi /etc/ganglia/gmond.conf
#修改名稱等,若要使用spoof功能,可在global區加入參數:
#override_hostname = your.host.name
#override_ip = 127.0.0.1

/etc/init.d/gmond start
exit 0

利用不同Multicast劃分區域


  由於我面對的狀況,主機根據 domain name 可以分成兩個 Group,因此我利用不同的 Multicast IP 區分兩邊機器,同一個 domain name 的 host,gmond 的 multicast IP 就設置同一個(左 239.10.10.1,右 239.10.10.2)。而監控端的電腦,則安裝 gmetad 和 web-frontend,gmetad 設置接收兩個 Group 中各一台主機(數量自己決定,可設置第二台當備援,gmetad 在聯絡不到第一台 host 後,會自動向第二台 host 要求資訊)。

Problem

以下是在手動編譯過程中所會遇到的問題以及解決方式,提供參考。

1.  configure: error: apr-1-config binary not found in path.
apt-get install libapr1-dev

2.  libconfuse not found
apt-get install libconfuse-dev

3.  /sbin/insserv: No such file or directory
ln -s /usr/lib/insserv/insserv /sbin/insserv

4.  pkg-config binary not found in path
apt-get install pkg-config

2012/12/17 更新

自從 Ganglia 建置起來後,已經發生過好幾次機器並未關機、gmond 也正常執行,但是 gmetad 卻失去該 host 的資訊;每次都得重新登入每一台 host 重新啟動 gmond 才會恢復。
試著在每台 host 的 gmond.conf 中,調整 metadata 傳送的時間間距,預設是 0 (除了 gmond 啟動以外不再傳送 metadata),現在調整成每 5 分鐘傳送一次 metadata。調整完後觀察了 3 天,目前所有機器都保持資訊流通,希望這樣可以解決機器失聯的問題!

2 則留言:

  1. 謝謝你的筆記喔!解決了我們家ganglia gmond 常失聯的問題。XD

    回覆刪除
    回覆
    1. 不用客氣,這個問題也困擾我很久^^"
      目前我所有Server的gmond這樣設定後,
      已經三個月沒有消失了XD

      刪除