由於linux下的office和win下有所區別,我只能把linux下的.dot檔案打包成pdf,貼上傳送標出來,但有些圖片還是沒辦法發表,要是有朋友感興趣的話,可加我qq 215687833具體的文件可供參考,皆來自本人整理,扯犢子的請繞行。
ganglia 是分散式的監控系統,有兩個 Daemon, 分別是:客戶端 Ganglia Monitoring
Daemon (gmond)和服務端 Ganglia Meta Daemon (gmetad),還有 Ganglia PHP Web
Frontend(基於 web 的動態訪問方式)組成
是一個 Linux 下圖形化監控系統執行效能的軟體,介面美觀、豐富,功能強大
http://ganglia.sourceforge.net/ 軟體下載
環境:RHEL6 x8664 disable selinux and iptables
2 臺主機的解析分別為
192.168.2.79 node2.example.com
192.168.2.81 node3.example.com
ganglia 多播的配置。
配置在 192.168.2.79 node2.example.com
下載軟體包:
ganglia3.6.0.tar.gz
gangliaweb3.5.10.tar.gz
libconfuse2.63.el6.x86_64.rpm
libconfusedevel2.63.el6.x86_64.rpm
rrdtooldevel1.3.86.el6.x86_64.rpm
yum install y rpmbuild 將 tar 包打壓成 rpm 包。
[root@node2 ~]# rpmbuild tb ganglia3.6.0.tar.gz 打壓的過程中所需要的依賴包。
error: Failed build dependencies:
libart_lgpldevel is needed by ganglia3.6.01.x86_64
gccc++ is needed by ganglia3.6.01.x86_64
pythondevel is needed by ganglia3.6.01.x86_64
libconfusedevel is needed by ganglia3.6.01.x86_64
pcredevel is needed by ganglia3.6.01.x86_64
expatdevel is needed by ganglia3.6.01.x86_64
rrdtooldevel is needed by ganglia3.6.01.x86_64
aprdevel > 1 is needed by ganglia3.6.01.x86_64
安裝依賴關係。
# yum install y libart_lgpldevel gccc++ pythondevel pcredevel expatdevel rrdtooldevel aprdevel
安裝完成後再次打壓。
[root@node2 ~]# rpmbuild tb ganglia3.6.0.tar.gz
error: Failed build dependencies:
libconfusedevel is needed by ganglia3.6.01.x86_64
rrdtooldevel is needed by ganglia3.6.01.x86_64
發現還需要依賴關係,安裝以下依賴包。
[root@node2 ~]# yum localinstall libconfusedevel2.63.el6.x86_64.rpm rrdtooldevel1.3.8
6.el6.x86_64.rpm
發現安裝 上面 2 個包,又產生一個依賴包,還需要安裝依賴 包。
[root@node2 ~]# yum localinstall libconfusedevel2.63.el6.x86_64.rpm rrdtooldevel1.3.8
6.el6.x86_64.rpm libconfuse2.63.el6.x86_64.rpm
再次將 tar 包打壓成 rpm 包,ok
[root@node2 ~]# rpmbuild tb ganglia3.6.0.tar.gz
將 tarweb tar 包也打壓成 rpm 包。
[root@node2 ~]# rpmbuild tb gangliaweb3.5.10.tar.gz
切換到下面的目錄,ganglia 打壓的 包放在這下面。
/root/rpmbuild/RPMS/x86_64
[root@node2 x86_64]# ls
gangliadevel3.6.01.x86_64.rpm
gangliagmetad3.6.01.x86_64.rpm
gangliagmond3.6.01.x86_64.rpm
gangliagmondmodulespython3.6.01.x86_64.rpm
libganglia3.6.01.x86_64.rpm
[root@node2 x86_64]# rpm ivh *
Preparing... ########################################### [100%]
1:libganglia ########################################### [ 20%]
2:gangliagmond ########################################### [ 40%]
3:gangliagmondmodulesp########################################### [ 60%]
4:gangliadevel ########################################### [ 80%]
5:gangliagmetad ########################################### [100%]
/root/rpmbuild/RPMS/noarch gangliaweb 打壓的包放在這下面。
[root@node2 noarch]# yum localinstall gangliaweb3.5.101.noarch.rpm y
ganglia 的主配置檔案都放在/etc/ganglia 目錄下。
[root@node2 ganglia]# vim gmetad.conf 修改服務的配置檔案。
data_source "my cluster" localhost 改個組名為 my cluster
[root@node2 ganglia]# vim gmond.conf
cluster {
name = "my cluster"
owner = "unspecified"
latlong = "unspecified"
url = "unspecified"
啟動 ganglia 的服務端/客戶端:
/etc/init.d/gmond start
/etc/init.d/gmetad start
在瀏覽器中輸入: http://192.168.2.79/ganglia/
這下面放的是通過廣播監控到的 ganglia 服務的資訊。
/var/lib/ganglia/rrds/my cluster
[root@node2 my cluster]# ls
192.168.2.125 192.168.2.138 192.168.2.56 node2.example.com
192.168.2.133 192.168.2.207 192.168.2.71 __SummaryInfo__
192.168.2.134 192.168.2.220 192.168.2.85
下面配置另一臺主機的 ganglia 客戶端服務。
首先切換到當下目錄,將 ganglia 包拷貝到遠端主機。
/root/rpmbuild/RPMS/x86_64
scp gangliagmond* libganglia3.6.01.x86_64.rpm 192.168.2.81:/root/ 順便也把 libconfuse2.6
3.el6.x86_64.rpm 也拷貝過去,會用到依賴關係。
安裝客戶端的軟體包。
配置在 192.168.2.81 node3.example.com
[root@node3 ~]# yum localinstall gangliagmond* libganglia3.6.01.x86_64.rpm libconfuse2.6
3.el6.x86_64.rpm
一樣 ganglia 的主配置檔案也放在/etc/ganglia 目錄下。
[root@node3 ganglia]# vim gmond.conf 編輯客戶端的配置檔案。
cluster {
name = "my cluster"
owner = "unspecified"
latlong = "unspecified"
url = "unspecified"
}
要是有多臺客戶端的主機,組一樣都使用
cluster {
name = "my cluster"
owner = "unspecified"
latlong = "unspecified"
url = "unspecified"
}
重啟服務:
# /etc/init.d/gmond start
在主配置的/var/lib/ganglia/rrds 目錄下可以看到 ganglia 所監控到的主機資訊。
單播 ganglia 的配置:
配置在 192.168.2.79 這臺主機上。
單播的原理就是各自監控各自的,大家的組/埠都不一樣,每個人起得組名字,埠都不一樣。
首先把上面的 ganglia 服務給停了。
[root@node2 ganglia]# vim gmetad.conf 編輯服務端的配置
組名我改為 linux007 監控的主機為 192.168.2.79 和 192.168.2.81 埠為 8007
data_source "linux007" 192.168.2.79:8007 192.168.2.81:8007
[root@node2 ganglia]# vim gmond.conf 客戶端主要修改以下幾行
send_metadata_interval = 30 /*secs */ 傳送的更新為 30 秒
cluster {
name = "linux007" 客戶端的組名也為 linux007
owner = "unspecified"
latlong = "unspecified"
url = "unspecified"
}
mcast_join = 239.2.11.71
port = 8007
ttl = 1
udp_recv_channel {
mcast_join = 239.2.11.71
port = 8007 埠也為 8007
bind = 239.2.11.71
retry_bind = true
tcp_accept_channel {
port = 8007 tcp 的埠為 8007
# If you want to gzip XML output
gzip_output = no
}
重啟服務:
/etc/init.d/gmond restart
/etc/init.d/gmetad restart
另一臺客戶端的配置;
192.168.2.81 node3 這臺主機:
[root@node3 ganglia]# vim gmond.conf 客戶端的配置檔案修改以下幾行。
send_metadata_interval = 30 /*secs */
cluster {
name = "linux007"
owner = "unspecified"
latlong = "unspecified"
url = "unspecified"
}
mcast_join = 239.2.11.71
port = 8007
ttl = 1
udp_recv_channel {
mcast_join = 239.2.11.71
port = 8007
bind = 239.2.11.71
retry_bind = true
tcp_accept_channel {
port = 8007
# If you want to gzip XML output
gzip_output = no
}
重啟服務:
# /etc/init.d/gmond restart
在服務端的/var/lib/ganglia/rrds/linux007 目錄下,會看到一下檔案或目錄。
node2.example.com node3.example.com __SummaryInfo__
在瀏覽器中會看到:linux007 的資訊
[root@node2 contrib]# cp check_ganglia.py /usr/local/nagios/libexec/
[root@node2 contrib]# cd /usr/local/nagios/libexec/
[root@node2 libexec]# ./check_ganglia.py
Usage: check_ganglia h|host= m|metric= w|warning= c|critical= [s|server=] [p|port=]
h 可以寫主機名,也可以寫 ip,這怎麼寫,你在/var/lib/ganglia/rrds/linux007/看到的資訊是一樣
的。
[root@node2 libexec]# vim check_ganglia.py
ganglia_port = 8007
這下面的明顯是不對的,我們寫的是 20%警告,10%危險,先面的輸出是危險,磁碟剩餘空間
83.04,很明顯是不對的。
[root@node2 libexec]# ./check_ganglia.py h node3.example.com m disk_free_percent_rootfs w 20
c 10
CHECKGANGLIA CRITICAL: disk_free_percent_rootfs is 83.04
修改指令碼 check_ganglia.py,使其符合我們的要求輸出。
[root@node2 libexec]# vim check_ganglia.py
if critical > warning:
if value >= critical:
print "CHECKGANGLIA CRITICAL: %s is %.2f" % (metric, value)
sys.exit(2)
elif value >= warning:
print "CHECKGANGLIA WARNING: %s is %.2f" % (metric, value)
sys.exit(1)
else:
print "CHECKGANGLIA OK: %s is %.2f" % (metric, value)
sys.exit(0)
else:
if critical >= value:
print "CHECKGANGLIA CRITICAL: %s is %.2f" % (metric, value)
sys.exit(2)
elif warning >= value:
print "CHECKGANGLIA WARNING: %s is %.2f" % (metric, value)
sys.exit(1)
else:
print "CHECKGANGLIA OK: %s is %.2f" % (metric, value)
sys.exit(0)
再次輸出發現完全符合要求:
[root@node2 libexec]# ./check_ganglia.py h node3.example.com m disk_free_percent_rootfs w 20
c 10
CHECKGANGLIA OK: disk_free_percent_rootfs is 83.04
ganglia 擅長監控多臺服務,nagios 擅長警告,現在把他們結合起來。
首先 nagios 沒有 ganglia 的命令,我們新增 nagios 命令。
# cd /usr/local/nagios/etc/objects/
[root@node2 objects]# vim commands.cfg 要是上面的驗證是 ip 則 HOSTADDRESS,我是域
名則
define command{
command_name check_ganglia
command_line $USER1$/check_ganglia.py h $HOSTNAME$ m $ARG1$ w $ARG2$ c
$ARG3$
}
[root@node2 objects]# vim templates.cfg
define service {
use genericservice
name gangliaservice
hostgroup_name gangliaservers
service_groups gangliametrics
register 0
}
[root@node2 objects]# vim hosts.cfg
define hostgroup {
hostgroup_name gangliaservers
alias gangliaservers
members node3.example.com
}
[root@node2 objects]# vim services.cfg
define servicegroup {
servicegroup_name gangliametrics
alias Ganglia Metrics
}
define service {
use gangliaservice
service_description 根分割槽
check_command check_ganglia!disk_free_percent_rootfs!20!10
}
define service {
use gangliaservice
service_description 系統負載
check_command check_ganglia!load_one!4!5
}
重啟服務後校驗語發是否錯誤:
[root@node2 etc]# /usr/local/nagios/bin/nagios v /usr/local/nagios/etc/nagios.cfg
校驗成後重啟服務:
# /etc/init.d/nagios restart
在瀏覽器輸入 http://192.168.2.79/nagios/ 點選 servers 會看到下面:
下面額外的新增一臺客戶端 node4 192.168.2.82,為其新增服務主機,使用 ganglia+nagios 監控:
scp gangliagmond* libconfuse2.63.el6.x86_64.rpm libganglia3.6.01.x86_64.rpm
192.168.2.82:/root/
安裝這些軟體包:
rpm ivh *
把客戶端的配置檔案也給 node4 拷貝一份。
# scp gmond.conf 192.168.2.82:/etc/ganglia/
# /etc/init.d/gmond restart
在 node2 也就是服務端的/var/lib/ganglia/rrds/linux007 的目錄下回收到 node4 這臺主機的資訊.
192.168.2.82 node2.example.com node3.example.com __SummaryInfo__
切換到 node2 這臺主機,也就是 ganglia 和 nagios 這臺主機的目錄下。
/usr/local/nagios/etc/objects
[root@node2 objects]# vim hosts.cfg 額外新增的主機只需以,隔開;新增主機名
define host{
use linuxserver
host_name node4.example.com
alias node4
address 192.168.2.82
}
define hostgroup {
hostgroup_name gangliaservers
alias gangliaservers
members node3.example.com,node4.example.com
}
[root@node2 objects]# vim services.cfg 額外新增的服務,所有的主機都可以收到。
define service {
use gangliaservice
service_description 記憶體空間
check_command check_ganglia!mem_free!100!50
}
重啟服務:
# /etc/init.d/gmond restart
# /etc/init.d/gmetad restart
# /etc/init.d/nagios restart
在瀏覽器中輸入:http://192.168.2.79/nagios/ 得到下圖: