nagios+ganglia監控批量主機
之前我們學習用nagios+cacti實作網絡監控報警,如果是傳統的運維工作,有這個工具就足夠強大了。但是對于分布式系統的開發+運維人員(DevOps?),更關心的是掌握分布式系統的性能和可用性,根據資料做出性能調整、更新、擴容等的決策,進而保證基礎設施服務能夠滿足不斷增長的業務需求。與Cacti、Nagios、Zabbix等工具相比,Ganglia更關注整個叢集的性能和可用性。可以用于叢集的性能監控、分析和優化。
就是這樣一種工具。Ganglia 是 UC Berkeley 發起的一個開源監視項目,設計用于測量數以千計的節點。Ganglia主要監控叢集的性能名額,如cpu 、mem、硬碟使用率, I/O負載、網絡流量情況等, 也可以監控自定義的性能名額。通過Ganglia繪制的曲線很容易見到每個節點的工作狀态,對合理調整、配置設定系統資源,提高系統整體性能起到重要作用。gmond 帶來的系統負載非常少,這使得它成為在叢集中各台計算機上運作的一段代碼,而不會影響使用者性能。
每個被檢測的節點或叢集運作一個gmond程序,進行監控資料的收集、彙總和發送。gmond即可以作為發送者(收集本機資料),也可以作為接收者(彙總多個節點的資料)。
通常在整個監控體系中隻有一個gmetad程序。該程序定期檢查所有的gmonds,主動收集資料,并存儲在RRD存儲引擎中。
ganglia-web是使用php編寫的web界面,以圖表的方式展現存儲在RRD中的資料。通常與gmetad程序運作在一起。
其中,(Round Robin Database tool,環狀資料庫工具)是一組操作RRD資料的API,支援資料圖形化。RRD是一種環狀資料庫技術,隻存儲固定數量的資料,新的資料會覆寫最舊的資料。
在動手部署Ganglia之前,首先要對監控體系進行初步的規劃。主要考慮兩方面的問題:
單叢集 or 多叢集
如果節點較少,使用單叢集配置起來更容易; 如果節點很多,使用多叢集可以避免廣播風暴。但是需要為每個叢集配置不同的多點傳播通道(通過端口區分),同時要配置gmetad同時監聽這多個通道。
多點傳播模式 or 單點傳播模式
多點傳播模式是ganglia的預設模式,同一叢集的多個gmond之間互相交換資料,gmetad中可以指定叢集中的任意一個或多個節點作為"data_source";
多點傳播模式可能會帶來網絡的 “抖動(Jitter)”。據說設定節點的時鐘同步可以避免抖動的問題; 但如果網絡環境不支援多點傳播(比如Amazon’s AWS EC2),就需要使用單點傳播模式。單點傳播模式時,将大部分節點的gmond.conf中,global的deaf設定改為"yes",則這些節點隻發生資料,不接收其他節點的資料,同樣也不能作為gmetad中的"data_source"。
單點傳播模式中還需要設定“send_metadata_interval”,比如30秒。以強制發送中繼資料。
ganglia将一個gmetad覆寫的所有叢集/節點稱為一個grid。可以在/etc/ganglia/gmetad.conf中通過<code>gridname</code>指定其名稱。多個grid的資料也可以聚合到一個上級gmetad中。
安裝配置:
ganglia 是分布式的監控系統,有兩個Daemon, 分别是:用戶端Ganglia Monitoring Daemon
(gmond)和服務端Ganglia Meta Daemon (gmetad),還有Ganglia PHP Web Frontend(基于
web的動态通路方式)組成是一個Linux下圖形化監控系統運作性能的軟體,界面美觀、豐富,功能強大
軟體下載下傳:http://ganglia.sourceforce.net/
環境:rhel6.3 X86_64 selinux禁止或許可,關閉iptables
######################################################
安裝軟體可通過yum,rpm,源碼安裝,在lanmp架構中,我們用源碼安裝了nginx,mysql,php。此次的ganglia我們通過rpm來安裝,下載下傳的軟體包不是rpm包,故需将這些軟體包制作為rpm包
下載下傳包:
get ganglia-3.6.0.tar.gz ganglia-web-3.5.2.tar.gz libconfuse-devel-2.6-3.el6.x86_64.rpm libconfuse-2.6-3.el6.x86_64.rpm
安裝制作rpm包的工具
[root@server34 ~]# yum install rpm-build -y
制作ganglia服務端的rpm包,制作過程中需要一些依賴性,根據提示安裝依賴性
[root@server34 ~]# 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
解決,安裝依賴性:
[root@server34 ~]# yum install libart_lgpl-devel gcc-c++ python-devel libconfuse-devel expat-devel apr-devel pcre-devel -y
[root@server34 ~]# rpm -ivh libconfuse-*
warning: libconfuse-2.6-3.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY
Preparing... ########################################### [100%]
1:libconfuse ########################################### [ 50%]
2:libconfuse-devel ########################################### [100%]
解決:
下載下傳軟體包 :rrdtool-perl-1.3.8-6.el6.x86_64.rpm
安裝rrdtool-perl軟體
[root@server34 ~]# rpm -ivh rrdtool-devel-1.3.8-6.el6.x86_64.rpm
warning: rrdtool-devel-1.3.8-6.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID c105b9de: NOKEY
1:rrdtool-devel ########################################### [100%]
制作ganglia用戶端的rpm包
[root@server34 ~]# rpmbuild -tb ganglia-web-3.5.2.tar.gz
[root@server34 x86_64]# ls
ganglia-devel-3.6.0-1.x86_64.rpm ganglia-gmond-modules-python-3.6.0-1.x86_64.rpm
ganglia-gmetad-3.6.0-1.x86_64.rpm libganglia-3.6.0-1.x86_64.rpm
ganglia-gmond-3.6.0-1.x86_64.rpm
制作好的rpm包
安裝
[root@server34 x86_64]# rpm -ivh *
1:libganglia ########################################### [ 20%]
2:ganglia-gmond ########################################### [ 40%]
3:ganglia-gmond-modules-p########################################### [ 60%]
4:ganglia-devel ########################################### [ 80%]
5:ganglia-gmetad ########################################### [100%]
[root@server34 noarch]# pwd
/root/rpmbuild/RPMS/noarch
[root@server34 noarch]# rpm -ivh ganglia-web-3.5.2-1.noarch.rpm
1:ganglia-web ########################################### [100%]
##########以上為rpm軟體包的制作過程#######################
ganglia實作監控功能,需更改其配置檔案:
[root@server34 rpmbuild]# vim /etc/ganglia/gmond.conf
cluster {
name = "my cluster" ####叢集名
owner = "unspecified"
latlong = "unspecified"
url = "unspecified"
}
更改端口
mcast_join = 239.2.11.71
port = 8756 ######監聽端口
ttl = 1
/* You can specify as many udp_recv_channels as you like as well. */
udp_recv_channel {
mcast_join = 239.2.11.71
port = 8756
bind = 239.2.11.71
retry_bind = true
# Size of the UDP buffer. If you are handling lots of metrics you really
# should bump it up to e.g. 10MB or even higher.
# buffer = 10485760
/* You can specify as many tcp_accept_channels as you like to share
an xml description of the state of the cluster */
tcp_accept_channel {
####為避免更多的主機進入,可改變預設的端口:如本實驗将gmond配置檔案的端口8649->8679
[root@server34 rpmbuild]# vim /etc/ganglia/gmetad.conf
data_source "my cluster" 192.168.0.34:8756
[root@server34 rpmbuild]# /etc/init.d/gmond start
Starting GANGLIA gmond: [ OK ]
[root@server34 rpmbuild]# /etc/init.d/gmetad start
Starting GANGLIA gmetad: [ OK ]
[root@server34 rrds]# cd /var/lib/ganglia/rrd/my\ cluster/
[root@server34 my cluster]# ls
server34.example.com __SummaryInfo__
[root@server34 my cluster]# cd server34.example.com/
[root@server34 server34.example.com]# ls
boottime.rrd mem_writeback.rrd
bytes_in.rrd part_max_used.rrd
bytes_out.rrd pkts_in.rrd
cpu_aidle.rrd pkts_out.rrd
cpu_idle.rrd proc_run.rrd
cpu_intr.rrd procstat_gmond_cpu.rrd
cpu_nice.rrd procstat_gmond_mem.rrd
cpu_num.rrd proc_total.rrd
cpu_sintr.rrd rx_bytes_eth0.rrd
cpu_speed.rrd rx_bytes_lo.rrd
cpu_steal.rrd rx_drops_eth0.rrd
cpu_system.rrd rx_drops_lo.rrd
cpu_user.rrd rx_errs_eth0.rrd
cpu_wio.rrd rx_errs_lo.rrd
disk_free_absolute_rootfs.rrd rx_pkts_eth0.rrd
disk_free_percent_rootfs.rrd rx_pkts_lo.rrd
disk_free.rrd swap_free.rrd
diskstat_sda_io_time.rrd swap_total.rrd
diskstat_sda_percent_io_time.rrd tcp_attemptfails.rrd
diskstat_sda_read_bytes_per_sec.rrd tcpext_listendrops.rrd
diskstat_sda_reads_merged.rrd tcpext_tcploss_percentage.rrd
diskstat_sda_reads.rrd tcp_insegs.rrd
diskstat_sda_read_time.rrd tcp_outsegs.rrd
diskstat_sda_weighted_io_time.rrd tcp_retrans_percentage.rrd
diskstat_sda_write_bytes_per_sec.rrd tx_bytes_eth0.rrd
diskstat_sda_writes_merged.rrd tx_bytes_lo.rrd
diskstat_sda_writes.rrd tx_drops_eth0.rrd
diskstat_sda_write_time.rrd tx_drops_lo.rrd
disk_total.rrd tx_errs_eth0.rrd
entropy_avail.rrd tx_errs_lo.rrd
load_fifteen.rrd tx_pkts_eth0.rrd
load_five.rrd tx_pkts_lo.rrd
load_one.rrd udp_indatagrams.rrd
mem_buffers.rrd udp_inerrors.rrd
mem_cached.rrd udp_outdatagrams.rrd
mem_dirty.rrd udp_rcvbuferrors.rrd
mem_free.rrd vm_pgmajfault.rrd
mem_hardware_corrupted.rrd vm_pgpgin.rrd
mem_mapped.rrd vm_pgpgout.rrd
mem_shared.rrd vm_vmeff.rrd
mem_total.rrd
為實作叢集,将此用戶端所需的rpm包拷貝至另一台需要被監控的客戶主機
[root@server34 x86_64]# scp ganglia-gmond-modules-python-3.6.0-1.x86_64.rpm ganglia-gmond-3.6.0-1.x86_64.rpm libganglia-3.6.0-1.x86_64.rpm 192.168.0.17:
用戶端配置:
libconfuse-2.7-4.el6.x86_64.rpm
libconfuse-devel-2.7-4.el6.x86_64.rpm
[root@server17 ~]# yum localinstall ganglia-gmond-3.6.0-1.x86_64.rpm ganglia-gmond-modules-python-3.6.0-1.x86_64.rpm libconfuse-2.7-4.el6.x86_64.rpm libconfuse-devel-2.7-4.el6.x86_64.rpm libganglia-3.6.0-1.x86_64.rpm -y
[root@server17 ~]# vim /etc/ganglia/gmond.conf
name = "my cluster"
[root@server17 ~]# /etc/init.d/gmond start
檢測
浏覽器:
http://192.168.0.34/ganglia
ganglia與nagios報警整合
[root@server34 ~]# cp ganglia-3.6.0/contrib/check_ganglia.py /usr/local/nagios/libexec/
check_ganglia.py 需以nagios的身份運作
[root@server34 libexec]# chown nagios.nagios check_ganglia.py
[root@server34 libexec]# vim check_ganglia.py
ganglia_port = 8756
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:
elif warning >= value:
檢測:
[root@server34 libexec]# /usr/local/nagios/libexec/check_ganglia.py -h server34.example.com -m disk_free_percent_rootfs -w 30 -c 10
CHECKGANGLIA OK: disk_free_percent_rootfs is 86.33
增加檢測ganglia的指令
[root@server34 objects]# vim commands.cfg
# ‘check_ganglia‘ command definition
define command{
command_name check_ganglia
command_line $USER1$/check_ganglia.py -h $HOSTADDRESS$ -m $ARG1$ -w $ARG2$ -c $ARG2$
}
增加ganglia的模闆
[root@server34 objects]# vim templates.cfg
define service {
use generic-service
name ganglia-service
hostgroup_name ganglia-servers
service_groups ganglia-metrics
[root@server34 objects]# vim hosts.cfg
define hostgroup{
hostgroup_name linux-servers ; The name of the hostgroup
alias Linux Servers ; Long name of the group
members * ; Comma separated list of hosts that belong to this group
define hostgroup {
alias ganglia-servers
members *
[root@server34 objects]# vim services.cfg
##################################check_ganglia###################
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
use ganglia-service ;
service_description 系統負載
check_command check_ganglia!load_one!4!5
檢查配置是否正确
[root@server34 objects]# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
[root@server34 objects]# /etc/init.d/nagios reload
檢查:
http://192.168.0.34/nagios
如果一切正常,您應該看到 Ganglia 資料現在已經在 Nagios 的監視之下
結合使用 Ganglia 和 Nagios,您可以監視任何内容。您可以控制整個雲!
本文出自 “” 部落格,請務必保留此出處