完美集群监控组合ganglia和nagios

Ganglia是伯克利开发的一个集群监控软件。可以监视和显示集群中的节点的各种状态信息,比如如:cpu 、mem、硬盘利用率, I/O负载、网络流量情况等,同时可以将历史数据以曲线方式通过php页面呈现。

而ganglia又依赖于一个web服务器用来显示集群状态,用rrdtool来存储数据和生成曲线图,需要xml解析因此需要expat,配置文件解析需要libconfuse。安装apche的httpd还需要支持php4以上,同时还有一些依赖软件。

ganglia作为一款最常用的Linux环境中的监控软件,它擅长的的是从节点中按照用户的需求以较低的代价采集数据。但是ganglia在预警以及发生事件后通知用户上并不擅长。最新的ganglia已经有了部分这方面的功能。但是更擅长做警告的还有Nagios。Nagios,就是一款精于预警、通知的软件。通过将Ganglia和Nagios组合起来,把Ganglia采集的数据作为Nagios的数据源,然后利用Nagios来发送预警通知,可以完美的实现一整套监控管理的系统。

------------------------------------------------------------------------------------------------------------------------------------------

ganglia安装指导

在redhat可以通过如下命令安装这些依赖软件:

yum -y install apr-devel apr-util check-devel cairo-devel pango-devel libxml2-devel rpmbuild glib2-devel dbus-devel freetype-devel fontconfig-devel gcc-c++ expat-devel python-devel libXrender-devel

libconfuse可以通过如下命令得到:

wget http://download.fedora.redhat.co ... .5-4.el5.x86_64.rpm
       wget http://download.fedora.redhat.co ... .5-4.el5.x86_64.rpm

1.2      安装配置步骤
1.2.1     安装
这里采用下载源码编译安装,到http://ganglia.info网站下载最新版的ganglia,下载后解压。

./configure --with-librrd=/rrd/path  --with-gmetad  --prefix=/usr/local/ganglia

make

make install

如果中间出现依赖软件问题,则需要安装缺少的那个软件包。安装完毕后,需要进行配置,其配置文件一般放在/etc/ganglia目录下,名称为gmetad.conf。当然对于路径并没有严格要求,因为gmetad可以在启动时指定所用的配置文件。

安装ganglia后,还需要安装apache服务器,同时需要有php模块支持,否则最终的显示页面无法正常显示。推荐采用yum install httpd php

否则如果没有配置正确,则有可能apache不能和php正确关联。

安装完毕后可以输入http://localhost/test.php,编一个php页面测试下是否成功安装。

1.2.2     配置
如果采用源码安装,根据前面的—prefix,ganglia会被安装到/usr/local/ganglia目录下。

首先建一个目录,该目录用来存放ganglia的web页面

mkdir -p /var/www/html/ganglia/

该目录用来存放后面用来显示数据的web页面。

由于采用源码编译的,并没有将gmetad和gmond加为服务,执行以下命令。

cp gmetad/gmetad.Init /etc/rc.d/Init.d/gmetad     //拷贝gmetad服务启动脚本
cp gmond/gmond.Init /etc/rc.d/Init.d/gmond        //拷贝gmond服务启动脚本
mkdir /etc/ganglia                                             //创建配置文件主目录
gmond -t | tee /etc/ganglia/gmond.conf              //生成gmond服务配置文件
cp gmetad/gmetad.conf /etc/ganglia/                  //拷贝gmetad服务配置文件
mkdir -p /var/lib/ganglia/rrds                                //创建rrd文件存放目录
chown nobody:nobody /var/lib/ganglia/rrds           //属主和属组都为nobody
chkconfig --add gmetad                                     //将服务交给chkconfig管理
chkconfig --add gmond                                      //同上

修改配置文件/etc/gmetad.conf通常只需要修改如下的参数:

data_source "Clustername" host1 host2

将集群名称改为你自己的,host1 host2是gmetad用来得到集群信息的xml文件的数据源,如果没有写端口,则采用默认的8649端口,gmetad默认每隔15秒通过tcp连接去该主机下载xml文件。所以他们可以是gmond的8649端口,也可以是gmetad的8651端口,它们都可以提供集群信息的xml格式的数据下载。

host1 host2是or的关系,如果host1无法下载,则才会尝试去host2下载,所以它们应该都是同一个集群的节点,保存着同样的数据。采用multicast模式时,每台gmond节点都有本cluster内节点机器的所有监控数据,因此不需要把所有节点写入data_source中。建议写入不低于2个,在host1节点死机的时候,会自动找host2节点取数据。

此外gmetad还有如下的属性设置:

RRD database storage defInition

RRAs "RRA:AVERAGE:0.5:1:244" "RRA:AVERAGE:0.5:24:244" "RRA:AVERAGE:0.5:168:244" "RRA:AVERAGE:0.5:672:244" "RRA:AVERAGE:0.5:5760:374"

RRD files location

访问控制Access control

trusted_hosts address1 address2 … DN1 DN2 …

all_trusted OFF/on

rrd保存数据的目录

rrd_rootdir "/var/lib/ganglia/rrds"

Network

xml_port 8651 #可以telnet到该端口,得到gmetad的xml文件

interactive_port 8652 #php页面数据交互使用的端口

1.2.3     php页面的配置

需要到/var/www/html/ganglia/目录下查找

php.conf

$gmetad_root = "/var/lib/ganglia";    #gmetad写入的rrd数据库的路径

$rrds = "$gmetad_root/rrds";

$ganglia_ip = "localhost";            #gmetad服务器的地址

$ganglia_port = 8652;       #gmetad服务器的交互式提供监控数据端口

默认情况下,web前端每300秒(5分钟)刷新一次,可以修改刷新间隔时间,通过修改config.php文件实现,它里面包括有所有的Ganglia Web参数。

1.2.4     ganglia客户端配置
vi /etc/ganglia/gmond.conf

主要是三个地方需要修改,cluster name,udp_send_channel,udp_recv_channel。注意单播与多播模式的区别,在多播模式下,加入该多播组的节点都会收到组内所有其他节点的数据,所以每个相当于一个备份。单播模式下,只是点到点的发送数据,数据只会发向特定的那个host,这种模式下通常具有一个中央收集节点。

cluster {

name = "Cluster1"     #本节点属于哪个cluster

owner = "chifeng"     #谁是该节点的所有者

latlong = "unspecified"   #在地球上的坐标,经度、纬度?

url = "unspecified"

}

udp_send_channel {       #udp包的发送通道

mcast_join = 239.2.11.71   #多播,工作在239.2.11.71通道下。如果使用单播模式,则要写host = host1(接受数据的目标主机),单播模式下也可以配置多个udp_send_channel

port = 8649            #监听端口

ttl = 1

}

udp_recv_channel {           #接收udp包配置

mcast_join = 239.2.11.71   #同样工作在239.2.11.71通道下,如果使用单播模式,则要写host = localip,就是必须是本机的ip

port = 8649                #监听端口

bind = 239.2.11.71         #绑定

}

tcp_accept_channel {

port = 8649   #通过tcp协议监听的端口,远端可以通过链接8649端口得到监控数据,gmetad就是通过该端口得到xml数据

}

还有其他的一些配置项,通常情况下不需要修改,其含义如下:

Collection_group section:

collect_once – Specifies that the group of static metrics

collect_every – Collection interval (only valid for non-static)

time_threshold – Max data send interval

Metric section:

Name – Metric name (see “gmond –m”)

Value_threshold – Metric variance threshold (send if exceeded)

实例如下:

collection_group {

collect_every = 80

time_threshold = 950

metric {

name = "proc_run"

value_threshold = "1.0"

}

metric {

name = "proc_total"

value_threshold = "1.0"

}

}

1.3      命令集合
说明:命令集合,是指我在安装配置时所使用的那些命令行命令,这些可以作为自动化部署脚步的一个基础。后面可以考虑编写自动化部署的脚步。

服务端:

1)安装expat-2.0.1.tar.gz

tar xvzf expat-2.0.1.tar.gz

cd expat*;./configure --prefix=/usr/local/apr;make;make install

2)安装confuse-2.6

./configure --prefix=/usr/local/confuse-2.6 CFLAGS=-fPIC --disable-nls;make;make install

3)安装apr

tar xvjf apr-1.3.2.tar.bz2

cd apr-1.3.2;./configure --prefix=/usr/local/apr;make;make install

安装apr-util-1.3.2.tar.bz2

tar xvjf apr-util-1.3.2.tar.bz2

cd apr-util-1.3.2;./configure --with-apr=/usr/local/apr --with-expat=/usr/local/expat

make;make install

cp /usr/local/apr-1.3.2/include/apr-1/* /usr/local/apr-1.3.2/include/目录,因为ganglia安装时默认会去/usr/local/apr/include下寻找apr的库文件。

4)安装rrdtool-1.2.27.tar.gz

tar xvzf rrdtool-1.2.27.tar.gz

cd rrdtool-1.2.27;./configure --prefix=/usr/local/rrdtool

make;make install

5)cp /usr/local/apr/bin/apr-1* /usr/local/bin/拷过这个后 OK否则会编译出问题

报错如下:

Checking for apr

checking for apr-1-config... no

configure: error: apr-1-config binary not found in pat

6)安装ganglia

./configure --with-librrd=/opt/rrdtool-1.4.4 --with-gmetad --prefix=/usr/local/ganglia --with-libconfuse=/usr/local/confuse-2.6

7)make;make install

8)安装apache服务器和php支持

yum -y install httpd mysqld php-mysql php

客户端:

wget http://download.fedora.redhat.co ... .5-4.el5.x86_64.rpm

wget http://download.fedora.redhat.co ... .5-4.el5.x86_64.rpm

scp apr-*.* 10.250.13.45:~/

scp libconfuse-*.* 10.250.13.45:~/

scp ganglia-*.gz 10.250.13.45:~/

scp ganglia-devel-*.rpm 10.250.13.45:~/

scp *.conf 10.250.13.45:~/

ssh 10.250.13.45

sudo su -

yum install expat

cd /home/admin

tar -xvf apr-1.4.*.gz

cd apr*

./configure --prefix=/usr/local/apr

make

make install

cd ..

tar -xvf apr-util-1.3.9.*

cd apr-util*

./configure --with-apr=/usr/local/apr

make

make install

cd ..

rpm -ivh  libconfuse-2.5-4.el5.x86_64.rpm

rpm -ivh libconfuse-devel-2.5-4.el5.x86_64.rpm

tar -xvf ganglia-3.1.*.gz

cd ganglia*

cp /usr/local/apr/bin/apr-1* /usr/local/bin/

./configure --with-apr=/usr/local/apr

find / -name "libpython2.5*"

cp /usr/local/lib/libpython2.5.so /usr/lib/libpython2.5.so

make

make install

cd ..

rpm -ivh ganglia-devel-3.1.1-1.x86_64.rpm --nodeps

cd /etc

mkdir ganglia

cp /home/admin/*.conf /etc/ganglia/

cd /etc/ganglia

vi gmond.conf ;edit udp send and recv host.

vi /usr/local/etc/gmond.conf

gmond --debug=10

ps -e|grep gmond

kill -9 id

gmond

如果必要需要重新修改gmond.conf

scp test 10.250.13.42:~/

scp test 10.250.13.43:~/

scp test 10.250.13.44:~/

scp test 10.250.13.45:~/

vi /etc/profile

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:"/usr/local/lib64/"

source /etc/profile

问题及解决

1.安装问题

◎缺少库文件,通常在make过程中出现该错误,ld找不到对应的库比如libpython2.5.so

解决方法:find命令查找这两个文件,并ln –s 创建指向这两个文件的软链接引用。find / -name libpython*

◎如果安装过程中出现依赖错误,通常在configure时出现

解决方法:首先利用find查找,如果找到可以阅读readme,查看是否有参数支持指明该路径。不行考虑拷贝到默认目录,还是不行则可以加入参数—nodeps,然后download该lib,通常包含在其devel包里,需要去网上查找包含该lib的文件,然后安装。

2.配置及运行问题

◎测试gmond和gmetad是否运行成功

Telent localhost 8649

Telent localhost 8651

如果没有反应

解决方法:很可能是因为服务没有启动,或者使用的不是默认端口,ps –e|grep gmond,查找服务是否启动。查看gmond.conf看所使用的tcp recv端口。

还找不到原因,就可以用调试模式启动查看原因

gmond –debug=10

如果出现udp之类的端口绑定错误,比如是已被bind,则查看是否有端口已被利用 lsof –i:port。

还可能是配置文件配置不正确,比如我曾经将udp_recv_channel的host修改成与udp_send_channel相同的值,就发生了端口错误,udp_recv_channel的host必须是本机的ip(一个机子可能有多个ip)。如果是权限禁止,则考虑当前用户身份,或者换成root试下。

测试php前端支持是否成功

http://localhost/ganglia

◎php页面显示为文件或者提示下载文件

解决方法:说明apache的php模块没有安装配置好。使用yum install 或者重新下载安装php模块,并在apache的conf文件里配置好。

◎显示页面无图象展示

首先检查selinux是否关闭

然后查看conf.php文件里的rrdtool路径是否正确,该文件是否存在,注意该路径是rrdtool可执行文件的路径不是其安装目录。

然后查看/var/lib/ganglia/rrds是否存在,能否被写。chown nobody:nobody /var/lib/ganglia/rrds  # make sure RRDTool can write here.

查看php.conf里的gmetad的路径地址端口是否正确。

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

下面我们来说说如何安装Nagios。

1。 下载安装包

可以在http://www.nagios.org/download下载到最新的Nagios Core, Nagios plugin安装包。

2。 建立用户

切换到root用户

/usr/sbin/useradd nagios

passwd nagios

创建一个用户组名为nagcmd 用于从Web接口执行外部命令。将nagios用户和apache用户都加到这个组中。

/usr/sbin/groupadd nagcmd
/usr/sbin/usermod -G nagcmd nagios
/usr/sbin/usermod -G nagcmd apache

3。 安装Nagios

tar xzf nagios-3.0.6.tar.gz
cd nagios-3.0.6.tar.gz
运行Nagios配置脚本并使用先前开设的用户及用户组:

./configure --with-command-group=nagcmd

编译Nagios程序包源码

make all -j8

make install
make install-init
make install-config
make install-commandmode

make install-webconf      #安装Nagios的WEB配置文件到Apache的conf.d目录下

4。 安装Nagios plugin

./configure --with-nagios-user=nagios --with-nagios-group=nagios -prefix=/usr/local/nagios

make -j8

make install

5。 基本配置

配置文件默认位置/usr/local/nagios/etc,只需要做简单修改就可以体验到Nagios啦。

修改/usr/local/nagios/etc/objects/contacts.cfg,更改email地址nagiosadmin 的联系人定义信息中的EMail信息为你的EMail信息以接收报警内容.(确认你的系统可以发送邮件到相应的接收者)
6。 配置Web接口

创建一个nagiosadmin 的用户用于Nagios的WEB接口登录。记下你所设置的登录口令,一会儿你会用到它。
htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
重启Apache服务以使设置生效。
service httpd restart

7。 启动Nagios

chkconfig --add nagios
chkconfig nagios on
service nagios start

这是你可以访问http://localhost/nagios,就可以看到Nagios啦哈哈。

Nagios安装过程中可能还需要其他的一些文件,比如apache。。。。我是在安装了Ganglia的系统上接着安装了Nagios。所以如果你的系统在安装Nagios的时候提示需要某些dependency,那么需要按照提示去做了:)

我在实际安装过程中遇到的最麻烦的问题是:
1。无法启动nagios,在系统log中发现提示无法创建/usr/local/nagios/var/rw/nagios.cmd。我发现没有rw目录。。。我创建了rw目录,并且将其owner改为nagios:nagcmd,权限改为drw-rw----。悲剧的是该错误提示仍然存在。最后我直接将其权限改为drw-rw-rw-。能够工作了,但是root cause我还没有找到。
2。类似的错误。在Nagios上察看log的时候,提示没有相应处理/usr/local/nagios/var/archives的权限。解决方法如上。

总的来说,安装过程比较顺利嘿嘿,运行后如下:
<ignore_js_op>

时间: 2024-10-06 05:08:14

完美集群监控组合ganglia和nagios的相关文章

Ganglia集群监控

简介 Ganglia是UC Berkeley发起的一个开源集群监视项目,设计用于测量数以千计的节点.Ganglia的核心包含gmond.gmetad以及一个Web前端.主要是用来监控系统性能,如:cpu .mem.硬盘利用率, I/O负载.网络流量情况等,通过曲线很容易见到每个节点的工作状态,对合理调整.分配系统资源,提高系统整体性能起到重要作用. 每台计算机都运行一个收集和发送度量数据的名为 gmond 的守护进程.接收所有度量数据的主机可以显示这些数据并且可以将这些数据的精简表单传递到层次结

断路器Hystrix与Turbine集群监控-Spring Cloud学习第三天

文章大纲 一.Hystrix基础介绍二.断路器Hystrix简单使用三.自定义Hystrix请求命令四.Hystrix的服务降级与异常处理五.Hystrix的请求缓存与请求合并六.Hystrix仪表盘与Turbine集群监控七.项目源码与参考资料下载八.参考文章 一.Hystrix基础介绍 1. Hystrix简介   一个用户管理项目,里边就三个功能:用户注册.用户登录.用户详情浏览.按照传统的软件开发方式直接创建一个Web项目,分分钟就把这三个功能开发出来了,但是我现在想使用微服务+服务治理

Spring Cloud第八篇 | Hystrix集群监控Turbine

? 本文是Spring Cloud专栏的第八篇文章,了解前七篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Cloud第二篇 | 使用并认识Eureka注册中心 Spring Cloud第三篇 | 搭建高可用Eureka注册中心 Spring Cloud第四篇 | 客户端负载均衡Ribbon Spring Cloud第五篇 | 服务熔断Hystrix Spring Cloud第六篇 | Hystrix仪表盘监控

集群监控

集群监控 大型互联网企业的背后,依靠的是成千上万台服务器日夜不停的运转,以支撑其业务的运转.宕机对于互联网企业来说,代价是沉重的,轻则影响用户体验,重则直接影响交易,导致交易下跌,并且给企业声誉造成不可挽回的损失.对于这些机器对应的开发和运维人员来说,即便是每台机器登陆一次,登陆那么多台机器也够呛,何况还需要进行系统指标的检查.因此,依靠人力是不可能完成24小时不间断监控服务器的任务的. 如今,互联网已经深入到人们生活的每个角落,可以想象一下,假如哪一天Google或者Baidu不能搜索,抑或是

Redis集群监控RedisClusterManager

RedisClusterManager监控Redis集群 环境要求:Java8+ jdk配置这里略过 RedisClusterManager 下载地址:  附件:systemMonitor-release.tar.gz 收集系统状态包  附件: RedisManager-Web-1.0.0-SNAPSHOT-beta.tar.gz redis集群管理包      1.安装systemMonitor    # tar -zxvf systemMonitor-release.tar.gz   # v

Zookeeper实现分布式集群监控

Zookeeepr实现分布式集群监控 Zookeeper中节点有两种:临时节点和永久节点 从类型上看节点又可以分为四种节点类型:PERSIST,PERSIST_SEQUENTIAL,EPHEMERAL,EPHEMERAL_SEQUENTIAL 临时节点有一个特点:当创建临时节点的程序停掉之后,这个临时节点就会消失. 监视器的特点:可以给zk中的节点注册监视器,见识这个节点的变化情况. 监视器注册一次,只能使用一次,多次使用就要多次注册. 我们利用这个Zookeeper的临时节点特性+监视器(Wa

Redis Sentinel(Redis集群监控管理软件)

Redis Sentinel(Redis集群监控管理软件) # Redis-Sentinel的官网地址:http://redis.io/topics/sentinel # 注意:Redis-Sentinel官网提供不是稳定版!个人感觉这个比keepalived+redis来切换好非常多. 配置环境: OS: CentOS6.1 x86  *  4 Software: redis-2.6.9 内存: 16G CPU: E5606  @ 2.13GHz *2 ------------------ I

Zookeeper Monitor集群监控开发

随着线上越来越多的系统依赖Zookeeper集群,以至于Zookeeper集群的运行状况越来越重要.但是目前还没有什么好用的Zookeeper集群监控系统(淘宝开源了一个Zookeeper监控系统,但是我觉得很不好用,里面主要有四个线程在跑,而且需要SSH登录到线上集群,这用起来很不方便.)于是我们开发了一套Zookeeper集群监控程序,可以监控Zookeeper集群. 从官方文档我们可以了解到,监控Zookeeper集群可以用两种方法: The ZooKeeper service can b

scrapydweb:实现 Scrapyd 服务器集群监控和交互,Scrapy 日志分析和可视化

功能特性 Scrapyd 服务器集群监控和交互 支持通过分组和过滤选中特定服务器节点 一次点击,批量执行 Scrapy 日志分析 统计信息展示 爬虫进度可视化 关键日志分类 支持所有 Scrapyd API Deploy project, Run Spider, Stop job List projects/versions/spiders/running_jobs Delete version/project GitHub scrapydweb 欢迎 Star 和提交 Issue 安装 通过