企業運維監控平臺架構設計與實現(ganglia篇)

一、Cacti/Nagios/Zabbix/centreon/Ganglia之抉擇

1、cacti

Cacti是一套基於PHP,MySQL,SNMP及RRDTool開發的網絡流量監測圖形分析工具。

簡單的說Cacti 就是一個PHP 程序。它通過使用SNMP 協議獲取遠端網絡設備和相關信息,(其實就是使用Net-SNMP 軟件包的snmpget 和snmpwalk 命令獲取)並通過RRDTOOL 工具繪圖,通過PHP 程序展現出來。我們使用它可以展現出監控對象一段時間內的狀態或者性能趨勢圖。

2、nagios

Nagios是一款開源的免費網絡監視工具,能有效監控Windows、Linux和Unix的主機狀態,交換機路由器等網絡設置,打印機等。在系統或服務狀態異常時發出郵件或短信報警第一時間通知網站運維人員,在狀態恢復後發出正常的郵件或短信通知。

3、zabbix

zabbix是一個基於WEB界面的提供分佈式系統監視以及網絡監視功能的企業級的開源解決方案。zabbix能監視各種網絡參數,保證服務器系統的安全運營;並提供柔軟的通知機制以讓系統管理員快速定位/解決存在的各種問題。

zabbix由2部分構成,zabbixserver與可選組件zabbix agent。zabbix server可以通過SNMP,zabbix agent,ping,端口監視等方法提供對遠程服務器/網絡狀態的監視,數據收集等功能,它可以運行在Linux, Solaris, HP-UX, AIX, Free BSD, Open BSD, OS X等平臺上。

4、ganglia

Ganglia是一款為HPC(高性能計算)集群而設計的可擴展的分佈式監控系統,它可以監視和顯示集群中的節點的各種狀態信息,它由運行在各個節點上的gmond守護進程來採集CPU 、內存、硬盤利用率、I/O負載、網絡流量情況等方面的數據,然後彙總到gmetad守護進程下,使用rrdtool存儲數據,最後將歷史數據以曲線方式通過PHP頁面呈現。

Ganglia監控系統有三部分組成,分別是gmond、gmetad、webfrontend。

5、centreon

Centreon是一款功能強大的分佈式IT監控系統,它通過第三方組件可以實現對網絡、操作系統和應用程序的監控:首先,它是開源的,我們可以免費使用它;其次,它的底層採用nagios作為監控軟件,同時nagios通過ndoutil模塊將監控到的數據定時寫入數據庫中,而Centreon實時從數據庫讀取該數據並通過Web界面展現監控數據;,最後,我們可以通過Centreon管理和配置nagios,或者說Centreon就是nagios的一個管理配置工具,通過Centreon提供的Web配置界面,可以輕鬆完成nagios的各種繁瑣配置。

6、對比圖

企業運維監控平臺架構設計與實現(ganglia篇)

二、 統一運維監控平臺設計思路

構建一個智能的運維監控平臺,必須以運行監控和故障報警這兩個方面為重點,將所有業務系統中所涉及的網絡資源、硬件資源、軟件資源、數據庫資源等納入統一的運維監控平臺中,並通過消除管理軟件的差別,數據採集手段的差別,對各種不同的數據來源實現統一管理、統一規範、統一處理、統一展現、統一用戶登錄、統一權限控制,最終實現運維規範化、自動化、智能化的大運維管理。

智能的運維監控平臺,設計架構從低到高可以分為6層,三大模塊,如下圖:


企業運維監控平臺架構設計與實現(ganglia篇)


運維監控平臺實現拓撲圖,請看下圖:

企業運維監控平臺架構設計與實現(ganglia篇)


三、Ganglia的安裝

1、ganglia的常用架構

Ganglia監控系統有三部分組成,分別是gmond、gmetad、webfrontend,如下圖所示:

企業運維監控平臺架構設計與實現(ganglia篇)


同時,Ganglia支持多種監控架構,這是由gmetad的特性決定的,gmetad可以週期性地去多個gmond節點收集數據,這就是ganglia的兩層架構。同時,gmetad不但可以從gmond收集數據,也可以從其他的gmetad得到數據,這就形成了Gnaglia的三層架構。多種架構方式也體現了Ganglia作為分佈式監控系統的靈活性和擴展性。

企業運維監控平臺架構設計與實現(ganglia篇)


2、yum方式安裝ganglia

CentOS系統中默認的yum源並沒有包含Ganglia,所以我們必須安裝擴展的yum源。從下面這個地址下載Linux附加軟件包(EPEL),然後安裝擴展yum源:

[root@node1 ~]#wgethttp://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
[root@node1 ~]# rpm -ivhepel-release-5-4.noarch.rpm
完成yum源安裝,就可以直接通過yum方式安裝Ganglia了。
Ganglia的安裝分為兩個部分,分別是gmetad和gmond,gmetad安裝在監控管理端,gmond安裝在需要監控的客戶端主機,對應的yum包名稱分別為ganglia-gmetad和ganglia-gmond。

下面介紹通過yum方式安裝Ganglia的過程。
以下操作是在監控管理端進行的,首先通過yum命令查看下可用的Ganglia安裝信息:
[root@monitor ~]#yum list ganglia*
安裝gmetad需要rrdtool的支持,而通過yum方式,會自動查找gmetad依賴的安裝包,自動完成安裝,這也是yum方式安裝的優勢。
最後在需要監控的所有客戶端主機上安裝gmond服務:
[root@node1 ~]# yum -y install ganglia-gmond.x86_64
這樣,Ganglia監控系統就安裝完成了。通過yum方式安裝的Ganglia默認配置文件位於/etc/ganglia中。

3、Ganglia監控管理端配置

監控管理端的配置文件是gmetad.conf,這個配置文件內容比較多,但是需要修改的配置僅有如下幾個:

data_source "Cluster1" cloud0cloud2
gridname "IIVEYGrid"
xml_port 8651
interactive_port 8652
rrd_rootdir"/var/lib/ganglia/rrds"
data_source:此參數定義了集群名字,以及集群中的節點。Cluster1就是這個集群的名稱,cloud0和cloud2指明瞭從這兩個節點收集數據,Cluster1後面指定的節點名可以是IP地址,也可以是主機名,由於採用了multicast模式,每個gmond節點都有本Cluster1集群節點所有監控數據,因此不需要把所有節點都寫入data_source中。但是建議寫入不低於2個,這樣,在cloud0節點出現故障的時候,gmetad會自動到cloud2節點採集數據,這樣就保證了Ganglia監控系統的高可用性。

上面通過data_source參數定義了一個服務器集群Cluster1,對於要監控多個應用系統的情況,還可以對不同用途的主機進行分組,定義多個服務器集群,分組方式可以通過下面的方法定義:
data_source "my cluster" 10localhost my.machine.edu:8649 1.2.3.5:8655
data_source "my grid" 501.3.4.7:8655 grid.org:8651 grid-backup.org:8651
data_source "another source"1.3.4.7:8655 1.3.4.8
可以通過定義多個data_source來實現監控多個服務器集群,而每個服務器集群在定義集群節點的時候,可以採用主機名或IP地址等形式,也可以加端口,如果不加端口,默認端口是8649,同時可以設定採集數據的頻率,如上面的“10 localhost、50 1.3.4.7:8655”等,分別表示每隔10秒鐘、50秒鐘採集一次數據。
gridname:此參數是定義一個網格名稱。一個網格有多個服務器集群組成,每個服務器集群由“data_source”選項來定義。
xml_port:此參數定義了一個收集數據彙總的交互端口,如果不指定,默認是8651,可以通過telnet這個端口得到監控管理端收集到的客戶端的所有數據。
interactive_port:此參數定義了Web端獲取數據的端口,這個端口在配置Ganglia的Web監控界面時需要指定。
rrd_rootdir:此參數定義了rrd數據庫的存放路徑,gmetad在收集到監控數據後會將其更新到該目錄下的對應的rrd數據庫中。

4、Ganglia的客戶端配置

Ganglia監控客戶端gmond安裝完成後,配置文件位於Ganglia安裝路徑的etc目錄下,名稱為gmond.conf,這個配置文件稍微複雜,如下所示:

globals {
daemonize = yes #是否後臺運行,這裡表示以後臺的方式運行
setuid = yes #是否設置運行用戶,在Windows中需要設置為false
user = nobody #設置運行的用戶名稱,必須是操作系統已經存在的用戶,默認是nobody
debug_level = 0 #調試級別,默認是0,表示不輸出任何日誌,數字越大表示輸出的日誌越多
max_udp_msg_len = 1472
mute = no #是否發送監控數據到其他節點,設置為no表示本節點將不再廣播任何自己收集到的數據到網絡上
deaf = no #是否接受其他節點發送過來的監控數據,設置為no表示本節點將不再接收任何其他節點廣播的數據包
allow_extra_data = yes#是否發送擴展數據
host_dmax = 0 /*secs */#是否刪除一個節點,0代表永遠不刪除,0之外的整數代表節點的不響應時間,超過這個時間後,Ganglia就會刷新集群節點信息進而刪除此節點
cleanup_threshold = 300 /*secs */ #gmond清理過期數據的時間
gexec = no #是否使用gexec來告知主機是否可用,這裡不啟用
send_metadata_interval = 0#在單播協議中,新添加的節點在多長時間內響應一下以表示自己的存在,0代表僅在gmond啟動時通知一次,單位秒

}
cluster {
name = "Cluster1" #集群的名稱,是區分此節點屬於某個集群的標誌,必須和監控服務端data_source中的某一項名稱匹配
owner = "junfeng" #節點的擁有者,也就是節點的管理員
latlong = "unspecified" #節點的座標,經度、緯度等,一般無需指定
url = "unspecified" #節點的URL地址,一般無需指定
}

host {
location = "unspecified" #節點的物理位置,一般無需指定
}
udp_send_channel { #udp包的發送通道
mcast_join = 239.2.11.71 #指定發送的多播地址,其中239.2.11.71是一個D類地址。如果使用單播模式,則要寫host = host1,在單播模式下也可以配置多個udp_send_channel
port = 8649 #監聽端口
ttl = 1
}
udp_recv_channel { #接收udp包配置
mcast_join = 239.2.11.71 #指定接收的多播地址,同樣也是239.2.11.71這個D類地址
port = 8649 #監聽端口
bind = 239.2.11.71 #綁定地址
}
tcp_accept_channel {
port = 8649 #通過tcp協議監聽的端口,在遠端可以通過連接到8649端口得到監控數據
}
在一個集群內,所有客戶端的配置是一樣的。完成一個客戶端配置後,將配置文件複製到此集群內的所有客戶端主機上即可完成客戶端主機的配置。

5、Ganglia web端配置

Ganglia的web監控界面是基於PHP的,因此需要安裝PHP環境。

有兩種方式安裝Ganglia的web監控界面,一種是yum直接安裝,另一種是通過源碼安裝。PHP環境的安裝這裡不做介紹,大家可以在http://sourceforge.net/projects/ganglia/files/下載ganglia-web的最新版本,然後將ganglia-web程序放到Apche Web的根目錄即可,這裡我們下載的版本是ganglia-web-3.7.1。

配置Ganglia的Web界面比較簡單,只需要修改幾個php文件即可。首先是conf_default.php,可以將conf_default.php重命名為conf.php,也可以保持不變,Ganglia的Web默認先找conf.php,找不到會繼續找conf_default.php,需要修改的內容如下:

$conf['gweb_confdir'] = "/var/www/html/ganglia"; #ganglia web的根目錄
$conf['gmetad_root'] = "/opt/app/ganglia"; # ganglia程序安裝目錄
$conf['rrds'] = "${conf['gmetad_root']}/rrds"; #gangliaweb讀取rrd數據庫的路徑,這裡是/opt/app/ganglia/rrds
$conf['dwoo_compiled_dir'] ="${conf['gweb_confdir']}/dwoo/compiled"; #需要“777”權限
$conf['dwoo_cache_dir'] ="${conf['gweb_confdir']}/dwoo/cache"; #需要“777”權限
$conf['rrdtool'] ="/opt/rrdtool/bin/rrdtool"; #指定rrdtool的路徑
$conf['graphdir']= $conf['gweb_root'] .'/graph.d'; #生成圖形模板目錄
$conf['ganglia_ip'] ="127.0.0.1"; #gmetad服務所在服務器的地址
$conf['ganglia_port'] = 8652; #gmetad服務器的交互式提供監控數據端口發佈
這裡需要說明的是:“$conf['dwoo_compiled_dir']”和“$conf['dwoo_cache_dir']”指定的路徑在默認情況下可能不存在,因此需要手動建立compiled和cache目錄,並授予Linux下“777”的權限。另外,rrd數據庫的存儲目錄/opt/app/ganglia/rrds一定要保證rrdtool可寫,因此需要執行授權命令:

Chown–R nobody:nobody /opt/app/ganglia/rrds
這樣rrdtool才能正常讀取rrd數據庫,進而將數據通過Web界面展示出來。其實ganglia-web的配置還是比較簡單的,一旦配置出錯會給出提示,根據錯誤提示進行問題排查,一般都能找到解決方法。

四、擴展Ganglia監控功能

1、通過gmetric接口擴展Ganglia監控

gmetric是Ganglia的一個命令行工具它可以將數據直接發送到負責收集數據的gmond節點,或者廣播給所有gmond節點。

在Ganglia安裝完成後,會在bin目錄下生成gmetric命令。下面通過一個實例介紹一下gmetric的使用方法:

[root@cloud1 ~]#/opt/app/ganglia/bin/gmetric\
>-n disk_used -v 40 -t int32 -u '% test'-d 50 -S '8.8.8.8:cloud1'
其中:
-n,表示要監控的指標名。
-v,表示寫入的監控指標值。
-t,表示寫入監控數據的類型。
-u,表示監控數據的單位。
-d,表示監控指標的存活時間。
-c,用於指定ganglia配置文件的位置。
-S,表示偽裝客戶端信息,8.8.8.8代表偽裝的客戶端地址,cloud1代表被監控主機的主機名。


分享到:


相關文章: