天天看點

nagios+ganglia分布式監控Ganglia規劃:

nagios+ganglia監控批量主機

   之前我們學習用nagios+cacti實作網絡監控報警,如果是傳統的運維工作,有這個工具就足夠強大了。但是對于分布式系統的開發+運維人員(DevOps?),更關心的是掌握分布式系統的性能和可用性,根據資料做出性能調整、更新、擴容等的決策,進而保證基礎設施服務能夠滿足不斷增長的業務需求。與Cacti、Nagios、Zabbix等工具相比,Ganglia更關注整個叢集的性能和可用性。可以用于叢集的性能監控、分析和優化。

    就是這樣一種工具。Ganglia 是 UC Berkeley 發起的一個開源監視項目,設計用于測量數以千計的節點。Ganglia主要監控叢集的性能名額,如cpu 、mem、硬碟使用率, I/O負載、網絡流量情況等, 也可以監控自定義的性能名額。通過Ganglia繪制的曲線很容易見到每個節點的工作狀态,對合理調整、配置設定系統資源,提高系統整體性能起到重要作用。gmond 帶來的系統負載非常少,這使得它成為在叢集中各台計算機上運作的一段代碼,而不會影響使用者性能。

nagios+ganglia分布式監控Ganglia規劃:

每個被檢測的節點或叢集運作一個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 &gt; 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-&gt;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 &gt; warning:

 if value &gt;= critical:

   print "CHECKGANGLIA CRITICAL: %s is %.2f" % (metric, value)

   sys.exit(2)

 elif value &gt;= 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 &gt;= value:

 elif warning &gt;= 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,您可以監視任何内容。您可以控制整個雲!

本文出自 “” 部落格,請務必保留此出處

繼續閱讀