nagios+ganglia分布式监控

nagios+ganglia监控批量主机

之前我们学习用nagios+cacti实现网络监控报警,如果是传统的运维工作,有这个工具就足够强大了。但是对于分布式系统的开发+运维人员(DevOps?),更关心的是掌握分布式系统的性能和可用性,根据数据做出性能调整、升级、扩容等的决策,从而保证基础设施服务能够满足不断增长的业务需求。与Cacti、Nagios、Zabbix等工具相比,Ganglia更关注整个集群的性能和可用性。可以用于集群的性能监控、分析和优化。

Ganglia就是这样一种工具。Ganglia 是 UC Berkeley 发起的一个开源监视项目,设计用于测量数以千计的节点。Ganglia主要监控集群的性能指标,如cpu 、mem、硬盘利用率, I/O负载、网络流量情况等, 也可以监控自定义的性能指标。通过Ganglia绘制的曲线很容易见到每个节点的工作状态,对合理调整、分配系统资源,提高系统整体性能起到重要作用。gmond 带来的系统负载非常少,这使得它成为在集群中各台计算机上运行的一段代码,而不会影响用户性能。

  1. 每个被检测的节点或集群运行一个gmond进程,进行监控数据的收集、汇总和发送。gmond即可以作为发送者(收集本机数据),也可以作为接收者(汇总多个节点的数据)。
  2. 通常在整个监控体系中只有一个gmetad进程。该进程定期检查所有的gmonds,主动收集数据,并存储在RRD存储引擎中。
  3. ganglia-web是使用php编写的web界面,以图表的方式展现存储在RRD中的数据。通常与gmetad进程运行在一起。

其中,RRDtool(Round Robin Database tool,环状数据库工具)是一组操作RRD数据的API,支持数据图形化。RRD是一种环状数据库技术,只存储固定数量的数据,新的数据会覆盖最旧的数据。

Ganglia规划:

在动手部署Ganglia之前,首先要对监控体系进行初步的规划。主要考虑两方面的问题:

  1. 单集群 or 多集群

    如果节点较少,使用单集群配置起来更容易; 如果节点很多,使用多集群可以避免广播风暴。但是需要为每个集群配置不同的组播通道(通过端口区分),同时要配置gmetad同时监听这多个通道。

  2. 组播模式 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中通过gridname指定其名称。多个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包的工具

[[email protected] ~]# yum install rpm-build -y

制作ganglia服务端的rpm包,制作过程中需要一些依赖性,根据提示安装依赖性

[[email protected] ~]# 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

解决,安装依赖性:

[[email protected] ~]# yum install libart_lgpl-devel gcc-c++ python-devel libconfuse-devel expat-devel apr-devel pcre-devel -y

[[email protected] ~]# 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

解决,安装依赖性:

[[email protected] ~]# 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%]

[[email protected] ~]# rpmbuild -tb ganglia-3.6.0.tar.gz

错误:error: Failed build dependencies:

rrdtool-devel is needed by ganglia-3.6.0-1.x86_64

解决:

下载软件包 :rrdtool-perl-1.3.8-6.el6.x86_64.rpm

安装rrdtool-perl软件

[[email protected] ~]# 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

Preparing...                ########################################### [100%]

1:rrdtool-devel          ########################################### [100%]

[[email protected] ~]# rpmbuild -tb ganglia-3.6.0.tar.gz

制作ganglia客户端的rpm包

[[email protected] ~]# rpmbuild -tb ganglia-web-3.5.2.tar.gz

[[email protected] 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包

安装

[[email protected] 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%]

[[email protected] noarch]# pwd

/root/rpmbuild/RPMS/noarch

[[email protected] noarch]# rpm -ivh ganglia-web-3.5.2-1.noarch.rpm

Preparing...                ########################################### [100%]

1:ganglia-web            ########################################### [100%]

##########以上为rpm软件包的制作过程#######################

ganglia实现监控功能,需更改其配置文件:

[[email protected] 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 {

port = 8756

####为避免更多的主机进入,可改变默认的端口:如本实验将gmond配置文件的端口8649->8679

[[email protected] rpmbuild]# vim /etc/ganglia/gmetad.conf

data_source "my cluster" 192.168.0.34:8756

[[email protected] rpmbuild]# /etc/init.d/gmond start

Starting GANGLIA gmond:                                    [  OK  ]

[[email protected] rpmbuild]# /etc/init.d/gmetad start

Starting GANGLIA gmetad:                                   [  OK  ]

[[email protected] rrds]# cd /var/lib/ganglia/rrd/my\ cluster/

[[email protected] my cluster]# ls

server34.example.com  __SummaryInfo__

[[email protected] my cluster]# cd server34.example.com/

[[email protected] 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包拷贝至另一台需要被监控的客户主机

[[email protected] 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

[[email protected] ~]# 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

[[email protected] ~]# 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 {

port = 8756

[[email protected] ~]# /etc/init.d/gmond start

检测

浏览器:

http://192.168.0.34/ganglia

ganglia与nagios报警整合

[[email protected] ~]# cp ganglia-3.6.0/contrib/check_ganglia.py  /usr/local/nagios/libexec/

check_ganglia.py 需以nagios的身份运行

[[email protected] libexec]# chown nagios.nagios check_ganglia.py

[[email protected] libexec]# vim check_ganglia.py

ganglia_port = 8756

[[email protected] 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)

检测:

[[email protected] 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的命令

[[email protected] 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的模板

[[email protected] objects]# vim templates.cfg

define service {

use generic-service

name ganglia-service

hostgroup_name ganglia-servers

service_groups ganglia-metrics

}

[[email protected] 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 {

hostgroup_name ganglia-servers

alias ganglia-servers

members *

}

[[email protected] 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

}

define service{

use                             ganglia-service         ;

service_description             系统负载

check_command                   check_ganglia!load_one!4!5

}

检查配置是否正确

[[email protected] objects]# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

[[email protected] objects]# /etc/init.d/nagios reload

检查:

http://192.168.0.34/nagios

如果一切正常,您应该看到 Ganglia 数据现在已经在 Nagios 的监视之下

结合使用 Ganglia 和 Nagios,您可以监视任何内容。您可以控制整个云!

nagios+ganglia分布式监控,布布扣,bubuko.com

时间: 2024-08-05 10:50:10

nagios+ganglia分布式监控的相关文章

ganglia分布式监控系统

一.介绍Ganglia是由UC Berkeley发起的一个开源监控项目,设计用于监控数以千几的节点.每台服务器都运行一个收集和发送监控数据名为gmond的守护进程.它将从操作系统和指定主机中收集.接收所有监控数据的主机可以显示这些数据并且可以将这些数据的精简表单传递到层次结构中.正因为有这种层次架构模式,使ganglia可以实现良好的扩展.Gmond带来的系统负载非常小,这使得它成为集群中各个服务器上运行一段代码而不会影响用户性能. Ganglia主要用来监控系统性能的软件,通过曲线很容易见到每

ganglia分布式监控部署

一.介绍        Ganglia是由UC Berkeley发起的一个开源监控项目,设计用于监控数以千几的节点.每台服务器都运行一个收集和发送监控数据名为gmond的守护进程.它将从操作系统和指定主机中收集.接收所有监控数据的主机可以显示这些数据并且可以将这些数据的精简表单传递到层次结构中.正因为有这种层次架构模式,使ganglia可以实现良好的扩展.Gmond带来的系统负载非常小,这使得它成为集群中各个服务器上运行一段代码而不会影响用户性能. Ganglia主要用来监控系统性能的软件,通过

分布式监控系统Ganglia简介及安装

一.Ganglia简介 Ganglia是一款为HPC(高性能计算) 集群设计的可扩展性 的分布式监控系统,它可以监视和显示集群中节点的各种状态信息,他由运行在各个节点上的gmond守护进程来采集 CPU.内存.磁盘利用率.I/O负载.网络流量情况等方面的数据.然后汇总到gmetad守护进程下,使用rrdtool存储数据,然后将历史数据以曲线方式通过PHP页面呈现. Ganglia监控系统由三部分组成,分别是gmond.gmetad.webfrontend gmond  一个守护进程运行在每个需要

Ganglia:分布式监控系统

Ganglia的核心包含gmond.gmetad以及一个Web前端.主要是用来监控系统性能,如:cpu .mem.硬盘利用率, I/O负载.网络流量情况等,通过曲线很容易见到每个节点的工作状态,对合理调整.分配系统资源,提高系统整体性能起到重要作用 Ganglia监控端安装 1.安装依赖的软件包 yum install ntp vim-enhanced gcc gcc-c++ flex bison autoconf automake bzip2-devel ncurses-devel zlib-

《Zabbix企业级分布式监控系统》预售

<Zabbix企业级分布式监控系统>预售 一.预售网站链接如下 网站名称 链接 亚马逊 http://www.amazon.cn/3/dp/B00MN6QEYK 当当 京东 二.书籍封面如下 三.该书相关信息如下 本书的读者QQ群: Zabbix企业级分布式监控 271659981 (可申请加入,验证码:Zabbix监控) 四.随书资料 随书所带的附件托管在github上面,完全开源. https://github.com/itnihao/zabbix-book 五.书籍目录如下 第一部分Za

nagios网卡流量监控 trffic.sh

近两天 在整合公司的监控  要不zabbix上 逐步迁移到 nagios+ganglia平台上 在网络监控这块发现ganglia获取的信息不能自定义为Mb(也可能我没有找对配置位置) 从网上 搜索发现 有网友编写了 traffic.sh的脚本,我就拿来用了 traffic.sh 下载地址 http://pan.baidu.com/s/1o8PoDBG 进入正题 客户端 1.安装snmp组件 [[email protected] ~]# yum install -y  net-snmp   net

Python之路,Day20 - 分布式监控系统开发

Python之路,Day20 - 分布式监控系统开发 本节内容 为什么要做监控? 常用监控系统设计讨论 监控系统架构设计 监控表结构设计 为什么要做监控? –熟悉IT监控系统的设计原理 –开发一个简版的类Zabbix监控系统 –掌握自动化开发项目的程序设计思路及架构解藕原则 常用监控系统设计讨论 Zabbix Nagios 监控系统需求讨论 1.可监控常用系统服务.应用.网络设备等 2.一台主机上可监控多个不同服务.不同服务的监控间隔可不同 3.同一个服务在不同主机上的监控间隔.报警阈值可不同

自动化运帷之分布式监控-zabbix 安装

zabbix 关于zabbix介绍可能就不用再说了,到处都是文章,这里之前使用的时Nagios,这里开始尝试接触zabbix,因为几个重要原则选择作为未来可能替换掉线上的监控系统,所以这边理由如下网友的itnihao的文字中摘抄了如下: 1.分布式监控,天生具有的功能,适合于构建分布式监控系统,具有node,proxy2种分布式模式 2.自动化功能,自动发现,自动注册主机,自动添加模板,自动添加分组,自动化运维工具搭配,puppet+zabbix,或者saltstack+zabbix,那是如鱼得

Zabbix分布式监控微信报警实战

作为运维工程师,最重要的事情就是保证该网站正常稳定的运行,需要实时监控网站.服务器的运行状态,并且有故障及时去处理. 监控网站无需人工时刻去访问WEB网站或者登陆服务器去检查, 可以借助开源监控软件例如Zabbix.Cacti.Nagios.Ganglia等监控来实现对网站的7x24小时的监控,并且可以做到有故障及时报警通知SA解决. Zabbix除了可以使用邮件报警之外,还可以通过多种方式把告警信息发送到指定人,例如短信报警方式,越来越多的企业开始使用Zabbix结合微信作为主要的告警方式,因