<ganglia+nagios>rhel6.5

Linux.應用發表於2014-07-21

由於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 x86­64 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
下載軟體包:
ganglia­3.6.0.tar.gz
ganglia­web­3.5.10.tar.gz
libconfuse­2.6­3.el6.x86_64.rpm
libconfuse­devel­2.6­3.el6.x86_64.rpm
rrdtool­devel­1.3.8­6.el6.x86_64.rpm
yum install ­y rpm­build 將 tar 包打壓成 rpm 包。
[root@node2 ~]# rpmbuild ­tb ganglia­3.6.0.tar.gz  打壓的過程中所需要的依賴包。
error: Failed build dependencies:
libart_lgpl­devel is needed by ganglia­3.6.0­1.x86_64
gcc­c++ is needed by ganglia­3.6.0­1.x86_64
python­devel is needed by ganglia­3.6.0­1.x86_64
libconfuse­devel is needed by ganglia­3.6.0­1.x86_64
pcre­devel is needed by ganglia­3.6.0­1.x86_64
expat­devel is needed by ganglia­3.6.0­1.x86_64
rrdtool­devel is needed by ganglia­3.6.0­1.x86_64
apr­devel > 1 is needed by ganglia­3.6.0­1.x86_64
安裝依賴關係。
# yum install ­y libart_lgpl­devel gcc­c++ python­devel pcre­devel expat­devel rrdtool­devel apr­devel
安裝完成後再次打壓。
[root@node2 ~]# rpmbuild ­tb ganglia­3.6.0.tar.gz
 error: Failed build dependencies:
libconfuse­devel is needed by ganglia­3.6.0­1.x86_64
rrdtool­devel is needed by ganglia­3.6.0­1.x86_64
發現還需要依賴關係,安裝以下依賴包。
[root@node2 ~]# yum localinstall libconfuse­devel­2.6­3.el6.x86_64.rpm rrdtool­devel­1.3.8­
6.el6.x86_64.rpm
發現安裝 上面 2 個包,又產生一個依賴包,還需要安裝依賴 包。
[root@node2 ~]# yum localinstall libconfuse­devel­2.6­3.el6.x86_64.rpm rrdtool­devel­1.3.8­
6.el6.x86_64.rpm libconfuse­2.6­3.el6.x86_64.rpm
再次將 tar 包打壓成 rpm 包,ok
[root@node2 ~]# rpmbuild ­tb ganglia­3.6.0.tar.gz
將 tar­web tar 包也打壓成 rpm 包。
[root@node2 ~]# rpmbuild ­tb ganglia­web­3.5.10.tar.gz
切換到下面的目錄,ganglia 打壓的 包放在這下面。
/root/rpmbuild/RPMS/x86_64
[root@node2 x86_64]# ls
ganglia­devel­3.6.0­1.x86_64.rpm
ganglia­gmetad­3.6.0­1.x86_64.rpm
ganglia­gmond­3.6.0­1.x86_64.rpm
ganglia­gmond­modules­python­3.6.0­1.x86_64.rpm
libganglia­3.6.0­1.x86_64.rpm
[root@node2 x86_64]# rpm ­ivh *
Preparing...                ########################################### [100%]
   1:libganglia             ########################################### [ 20%]
   2:ganglia­gmond          ########################################### [ 40%]
   3:ganglia­gmond­modules­p########################################### [ 60%]
   4:ganglia­devel          ########################################### [ 80%]
   5:ganglia­gmetad         ########################################### [100%]
/root/rpmbuild/RPMS/noarch  ganglia­web 打壓的包放在這下面。
[root@node2 noarch]# yum localinstall ganglia­web­3.5.10­1.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 ganglia­gmond­* libganglia­3.6.0­1.x86_64.rpm 192.168.2.81:/root/ 順便也把 libconfuse­2.6­
3.el6.x86_64.rpm 也拷貝過去,會用到依賴關係。
安裝客戶端的軟體包。
配置在 192.168.2.81    node3.example.com
[root@node3 ~]# yum localinstall ganglia­gmond­* libganglia­3.6.0­1.x86_64.rpm libconfuse­2.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 generic­service
name ganglia­service
hostgroup_name ganglia­servers
service_groups ganglia­metrics
register        0
}
[root@node2 objects]# vim hosts.cfg
define hostgroup {
hostgroup_name ganglia­servers
alias ganglia­servers
members node3.example.com
}
[root@node2 objects]# vim services.cfg
define servicegroup {
servicegroup_name       ganglia­metrics
alias   Ganglia Metrics
}
define service {
use     ganglia­service
service_description     根分割槽
check_command   check_ganglia!disk_free_percent_rootfs!20!10
}
define service {
use     ganglia­service
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 ganglia­gmond­* libconfuse­2.6­3.el6.x86_64.rpm libganglia­3.6.0­1.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                     linux­server
        host_name               node4.example.com
        alias                   node4
        address                 192.168.2.82
        }
define hostgroup {
hostgroup_name ganglia­servers
alias ganglia­servers
members node3.example.com,node4.example.com
}
[root@node2 objects]# vim services.cfg 額外新增的服務,所有的主機都可以收到。
define service {
use     ganglia­service
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/    得到下圖: