手把手实现企业级开源监控软件cacti+nagios+ntop整合
我在操作的过程中遇到的一些问题,在转载的过程将的一些理解添加进了文章,全部用红底字标出,以示区分。??做一名运维工程师,监控恐怕是日常生活中必不可少的活了,在企业中的监控,大多是用开源软件来实现的,(为什么要用开源?省钱呗..呵呵) 而且开源软件也有着非常优秀的表现,其中著名的有cacti,nagios,ntop,Ganglia,等等..而cacti+nagios+ntop的结合应用,能为企业做到更细微的保证。下面笔者先逐一介绍下:?一、cacti的简介?网络管理(如主机负载、网络流量等的监控)是系统管理岗工作人员日常工作的一个重要组成部分,许多厂商为此提供了各自的解决方案。早期开源网管软件中比较著名的其中之一的MRTG,是一款使用perl开发的,通过SNMP协议实现管理工作站与设备代理进程间的通讯,以完成对设备的管理和运行状态的监视。MRTG安装配置简单、图形界面直观,因为广受当时网络管理人员的喜爱,也为笔者早期的网络管理工作立下了汗马功劳。?但MRTG也有许多固有的缺点,如:使用文本式的数据库,数据不能重复使用;只能按日、周、月、年来查看数据;每图只能画两个DS(一条线、一个块);每取一次数据即需要绘图一次,浪费系统资源;同时,它也没有提供管理功能。?有鉴于此,MRTG的作者后来另外又开发了一个工具,即rrdtool。rrdtool是一个性能优良的数据记录器,同时也是一个功能强大的绘图引擎。它使用rrd的数据存储格式,使用得数据可以重复使用;在绘图方面,它可以定义任意时间段进行绘图,能绘出多个DS。但它也有自己的缺点:虽然提供了强大的数据存储及绘图功能,但rrdtool却没有提供类似于MRTG中集成的数据采集功能;同时,它提供了过多的参数,以至于在命令行界面使用起来极为不便;此外,rrdtool也没有提供管理功能。于是cacti应运而生。??简单来说,Cacti就是rrdtool的一个forefront,它内置了快速的获数据取工具、优秀的绘图模板以及许多设计精良的数据获取脚本,从而可以通过结合rrdtool强大的数据抓取、数据存储和绘图功能,轻松实现主机负载、网络流量等信息的走势图的绘制。目前其最新的软件版本是0.8.7g。??cacti是用php语言实现的一个软件,它的运行需要网站服务器(如apache)及PHP环境的支持。同时,cacti还需要Mysql配合PHP程序存储一些变量数据并对变量数据进行调用,如:主机名、主机ip、snmp团体名、端口号、模板信息等变量。?rrdtool的对主机负载、网络流量等信息的统计需要通过SNMP协议实现。经过SNMP抓取到的数据存储于由rrdtool生成的rrd文件中,这些文件通常位于cacti的rra目录中。rrdtool对数据的更新和存储就是对rrd文件的处理,rrd文件是大小固定的归档文件(Round Robin Archive),它能够存储的数据笔数在创建时就已经定义。这副图片简述了cacti的工作原理.?
?Cacti的实例应用1)网络设置
2)主机系统
(1)网络接口流量(进与出的带宽)
(2)监控CPU的负载、内存等等
(3)监控磁盘的空间、进程数等等
…………………………………..等等
3)cacti常见的监测对象
(1)服务器资源:CPU、内存、磁盘、进程、连接数等
(2)服务器类型:WEB、Mail、FTP、数据库、中间件
(3)网络接口:流量、转发速度、丢包率
(4)网络设备性能、配置文件(对比与备份)、路由数
(5)安全设备性能、连接数、攻击数
(6)设备运行状态:风扇、电源、温度
(7)机房运行环境:电流、电压、温湿度
?
?
???其中主要用到的是rrdtool-1.2.27-3.el5.i386.rpm 和rrdtool-devel-1.2.27-3.el5.i386.rpm和rrdtool-php-1.2.27-3.el5.i386.rpm这三个包,其余的包是其他扩展功能和其他脚本语言结合的.笔者就不过多演示了.
安装以上三个包cd /root/rrdtool/???????????????? #笔者rpm包所在的地方,可以做修改yum -y localinstall –nogpgcheck rrdtool-1.2.27-3.el5.i386.rpmyum -y localinstall –nogpgcheck rrdtool-devel-1.2.27-3.el5.i386.rpmyum -y localinstall –nogpgcheck rrdtool-php-1.2.27-3.el5.i386.rpm??1.配置mysql?接着登录mysql,创建cacti的数据库,并为其指定cactier用户和密码(123456)。数据库名字可根据需要指定,这里指定为cactidb,创建并授权:?登录数据库
mysql -uroot -p##会提示你输入密码,笔者在前面设置的密码为 123456?mysql> create database cactidb;mysql> GRANT all privileges ON cactidb.* TO?cactier@localhost?IDENTIFIED BY ’123456′;mysql> GRANT all privileges ON cactidb.* TO?cactier@127.0.0.1?IDENTIFIED BY ’123456′;mysql> GRANT all privileges ON cactidb.* TO?cactier@192.168.0.0?IDENTIFIED BY ’123456′;?##说明 笔者指定了一个网段的授权,是将来做监控时数据库和监控工具不在同一台主机上,网段可根据自己需要进行授权。mysql> flush privileges;????????????????????????????????2.配置SNMP??(4)配置SNMP?在net-snmp的主配置文件/etc/snmp/snmpd.conf中,默认的community为public,建议将public修改为您需的密码项,笔者在此就不做修改了,使用默认密码public?接着,启动snmp进程service snmpd restart?? #如果修改过snmpd.conf 则需要重启服务
呵呵,是不是等不及了,终于该到cacti的编译安装了,准备工作已经全部做好,下面就开始对cacti的安装配置
首先要去cacti官网下载cacti的gz源码包,目前最新的版本是0.8.7.g?从官方网站的说明and a webserver that supports PHP such as?Apache?or IIS.就知道以上的准备工作是必须要做的.重要说明:如果用0.8.7g版本的cacti,在后面整合nagios时可能出现bug,笔者推荐用0,8.7e版本的,笔者演示用的是0.8.7g原理一样.下载完成后就可以解压缩了,笔者放在了/root/目录下cd /roottar zxvf cacti-0.8.7g.tar.gzmv cacti-0.8.7g? /var/www/html/cacti????##因为cacti的配置是在web页面下进行的,所以笔者直接把cacti-0.8.7g 移至/var/www/html/cacti?cd? /var/www/html/cactimysql -uroot -p cactidb < cacti.sql??????????##将cacti.sql数据库文件导入,会提示输入密码输入前面设置的root 的密码即可??编辑cacti的主配置文件,为其指定对应的数据库参数:vim /var/www/html/cacti/include/config.php?将下列各参数的值修改为您前面所设定的:$database_type = "mysql";$database_default = "cactidb";$database_hostname = "localhost";$database_username = "cactier";$database_password = "123456";$database_port = "3306";修改完成后保存退出。添加cactier用户 并给其设置密码?useradd cactier
?passwd cactiercd?? /var/www/html/cacti/chown -R cactier rra/ log/???? #指定rra/ log/的属组属主为cactier用户vim /etc/crontab##编辑crontab文件 在空白行添加以下内容*/5 * * * * cactier php /var/www/html/cacti/poller.php? > /dev/null &#每5分钟以cactier去抓取数据绘图,这个时间5分钟应该是最小间隔了,笔者不建议修改为更小值。?记的要把selinux 关闭,不然不能从web页面访问的,关闭方法如下setenforce 0????????????????????????????? #只是临时关闭好了,下面就可以用web浏览器访问cacti进行配置管理了。笔者所用虚拟机ip为192.168.0.39????????????????????????????## IP根据自己实际情况可做相应修改从浏览器直接访问以下地址 即可看到cacti配置画面http://192.168.0.39/cacti/install/???????????????????如果看到以下画面,则可以进行之后的配置?????? 点击下一步。?
?如果上面全是[FOUND],则可以点击Finish 完成,中间的路径可能与图片不同。Finish后就会出现登陆画面?
?用户名admin 密码admin 即可登陆 (第一次登陆后会强行让修改密码)进入后点击graphs 会显示流量图??
如果不出现图片执行以下命令让其手动绘图即可.??su?-??cactierphp? /var/www/html/cacti/poller.php > /dev/null 2>&1exit数据部分启动较慢,请耐心等待,如显示如上图片数据,则成功安装配置。##cacti的具体使用笔者不做过多介绍,有意者可去官方网站阅读官方文档。?
?下面是源码安装配置nagios
Nagios通常由一个主程序(Nagios)、一个插件程序(Nagios-plugins)和四个可选的ADDON(NRPE、NSCA、 NSClient++和NDOUtils)组成。Nagios的监控工作都是通过插件实现的,因此,Nagios和Nagios-plugins是服务器端工作所必须的组件
下面在服务端安装Nagios和Nagios-plugins.
?先下载源码包,目前官方的最新版本如下图
?
插件版本
?
下载之.笔者放在了 /root/nagios目录下?
nagios??需要一些基础支持套件才能运行,如apache,gcc,glibc,gd库等。
useradd -m nagios??????? #添加一个名为nagios的用户来运行nagios???????????
groupadd nagios????????????????????????????? #添加nagios用户组,用以通过web页面提交外部控制命令
usermod -a -G nagios daemon???????????? #将运行apache用户daemon加入nagios组cd /root/nagios???????????????????????????????? #该目录是你下载的nagios源码包所在位置
tar zxvf nagios-3.2.2.tar.gz??????????????????????????? #解压
cd nagios-3.2.2????
注意下面–with-httpd-conf 的路径,取决与你apache的,如果是yum安装的apache,则路径为:
/configure –with-command-group=nagios –with-httpd-conf=/etc/httpd/conf/extra/
##如果没有报错,就进行一下步骤
make all
make install
make install-init???
make install-config
make install-commandmode?????????????#安装完成没有报错开始以下配置vim? /usr/local/nagios/etc/objects/contacts.cfg?
##修改nagiosadmin这行其中的邮件地址为你的email地址,以将报警邮件发到你的邮箱
make install-webconf
htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
##设置登陆web界面时HTTP验证的账号密码如果apache是用源码编译安装的话,该指令改为如下所示:
#/usr/local/apache/bin/htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
下面修改httpd.conf ,笔者是yum装的apache ,配置文件的路径为如下所示:vim /etc/httpd/conf/httpd.conf
在空白地方添加一下两行
# nagios??default settings
Include conf/extra/nagios.conf?
以上过程配置结束以后需要重新启动httpd:# service httpd restart?
?如果可以正常启动,下面就可以开始编译、安装nagios-plugins
nagios的所有监控工作都是通过插件完成的,因此,在启动nagios之前还需要为其安装官方提供的插件。
tar zxvf nagios-plugins-1.4.15.tar.gzcd nagios-plugins-1.4.15./configure –with-nagios-user=nagios –with-nagios-group=nagios?make?make install?##下面是一些配置
(1)把nagios添加为系统服务并将之加入到自动启动服务队列:chkconfig –add nagios?chkconfig nagios on
(2)检查其主配置文件的语法是否正确:?/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
(3)如果上面的语法检查没有问题,接下来就可以正式启动nagios服务了:service nagios start
(4)配置selinux如果您的系统开启了selinux服务,则默认为拒绝nagios web cgi程序的运行。您可以通过下面的命令来检查您的系统是否开启了selinux:getenforce
如果上面命令的结果显示开启了selinux服务,您可以通过下面的命令暂时性的将其关闭:setenforce 0
如果您想在以后完全关闭selinux,可以通过编辑/etc/sysconfig/selinux文件,将其中的selinux后面的值“force”修改为“disable”即可。
##当然,您也可以通过以下方式将nagios的CGI程序运行于SELinux/targeted模式而不用关闭selinux:chcon -R -t httpd_sys_content_t /usr/local/nagios/sbinchcon -R -t httpd_sys_content_t /usr/local/nagios/share(5)通过web界面查看nagios:http://your_nagios_IP/nagios
登录时需要指定前面设定的web认证帐号和密码。
注意:为了nagios系统的安全,建议您使用信息摘要强认证模式(如MD5),强制使用web的TSL/SSL安全通讯模式,并且通过访问控制列表设定能访问nagios的web界面的客户端地址。登录后看到以下画面则表示成功安装。??##说明##3.2.2版本的nagios有个bug .安装完在/usr/local/nagios/sbin目录下没有原来的statusmap.cgi执行脚本点击左边的current status 中的Map会显示找不到页面,解决方法只能从老版本中拷贝一个statusmap.cgi到/usr/local/nagios/sbin目录下了,并赋予执行权限。?下面编译安装NDOUtils,NDOUtils则用来将Nagios的配置信息和各event产生的数据存入数据库,以实现这些数据的快速检索和处理。一、解压、编译、安装、?tar zxf ndoutils-1.4b9.tar.gz?cd ndoutils-1.4b9./configure –enable-mysql –with-mysql-lib=/usr/lib/mysql –with-mysql-inc=/usr/include/mysql? –disable-pgsqlmakecp -v src/{ndomod-3x.o,ndo2db-3x,file2sock,log2ndo} ?/usr/local/nagios/bin
##以上复制的文件中前两项是版本相关的,即如果您的nagios主版本号是2系列,则需要拷贝名为ndomod-2x.o和ndo2db-2x的两个文件。后两项是通用文件,无论哪个版本都需要复制。二、为NDOUtils创建数据库
?mysql -uroot -pmysql> create database ndodb;mysql> GRANT ALL PRIVILEGES ON ndodb.* TO ndouser@localhost IDENTIFIED BY ’123456′;mysql> flush privileges;下面两条命令用来生成ndoutils所需要的数据库表等,这些表默认以“nagios_”为前缀;install脚本命令必须在db子目录内执行:?cd db./installdb -u ndouser -p 123456 -h localhost -d ndodb其中各选项的意义如下:-u用来指定导入时所用的mysql用户帐号-p表示前面mysql用户的密码-h表示mysql服务器地址,如果是localhost,则可以省略-d表示目标数据库?说明:如果与cacti整合的话,npc插件会在cacti的数据库自动生成ndoutils所需要表,这些表均以“npc_”为前缀。后面讲到整合的文章中会继续对些做出说明。三、复制、编辑配置文件??cd ..cp -v config/{ndo2db.cfg-sample’,ndomod.cfg-sample’} /usr/local/nagios/etcmv /usr/local/nagios/etc/ndo2db.cfg-sample?/usr/local/nagios/etc/ndo2db.cfgmv /usr/local/nagios/etc/ndomod.cfg-sample?/usr/local/nagios/etc/ndomod.cfgchmod 644 /usr/local/nagios/etc/ndo*chown nagios:nagios /usr/local/nagios/etc/*chown nagios:nagios /usr/local/nagios/bin/*
注:以上config目录中的ndo2db.cfg和ndomod.cfg在ndoutils-1.4b9中是以ndo2db.cfg-sample和ndomod.cfg-sample命名的,如果您使用的是这个版本的ndoutils,请在复制时做出如上相应的修改;?vim /usr/local/nagios/etc/nagios.cfg在文件中添加:broker_module=/usr/local/nagios/bin/ndomod-3x.o config_file=/usr/local/nagios/etc/ndomod.cfg?此外,请确保您的/usr/local/nagios/etc/nagios.cfg中有如下行出现,否则,请自行添加:event_broker_options=-1 ? ? ? ? ? ? ? ?//为Nagios开启event broker?四、编辑ndo2db守护进程和ndomod的配置文件??vim /usr/local/nagios/etc/ndo2db.cfgsocket_type=tcpdb_servertype=mysqldb_host=localhostdb_port=3306
db_name=ndodb
db_prefix=nagios_db_user=ndouserdb_pass=123456?说明:i) 以上"db_"开头的选项用来指定连接数据库的属性;ii)其默认用来接收数据的方式为Unix域套接字,这里修改成了TCP套接字;同时,ndomod.cfg配置文件中指定的输出方式也应该做相应的修改;?接下来我们去编辑ndomod的配置文件,为其指定数据的输出方式和输出目标主机:?vim /usr/local/nagios/etc/ndomod.cfgoutput_type=tcpsocketoutput=127.0.0.1?五、启动ndo2db守护进程??/usr/local/nagios/bin/ndo2db-3x -c /usr/local/nagios/etc/ndo2db.cfg?建议此时查看系统日志(/var/log/messages)中是否有错误出现。?如果此时Nagios进程已启动,则需要停止并重新启动nagios:# killall -SIGHUP nagios# rm -f /usr/local/nagios/var/nagios.lock# /usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg可进入nagios的web管理页面查看log,如果出现以下字样,则表示正常运行。??说明:i)此处停止Nagios必须通过向Nagios发送SIGHUP信号的方式进行;ii)建议此时查看nagios日志文件中是否表明ndomod的模块加载是否正常,以及其是否能正常连接到data sink;查看日志,可以使用如下命令实现:# tail -30 /usr/local/nagios/var/nagios.log?排错信息:i) ?如果ndomod模块没能正常加载的话,建议重新检查nagios的配置文件中是否添加了所需的broker module条目;ii) 同时,如果ndomod没有正常连接到data sin,建议查看ndo2db.cfg文件中关于mysql连接项目的指定是否正确;iii)确认一下在编译NDOUtils时是否指定了关于mysql库文件位置的选项;
?
好了 nagios已经成功安装,下面编译、安装ntop
?
在官网找了副图片,简单的介绍了ntop的工作流程。?
图片右边显示的是目前官方最新的ntop版本 为4.0.1下载之
1、下载安装所需要的环境:
需要事先下载并安装GeoIP和GetIP-devel两个rpm包;
yum -y –nogpgcheck localinstall GeoIP-*.el5.i386.rpm
接着是ettercap相关的rpm包(ettercap,ettercap-common,需要下载,这里没指定具体的版本号,你可以根据自己的实际情况进行安装):
yum -y –nogpgcheck localinstall ettercap-*.rpm
而后安装开发环境,尤其是以下几个rpm包:
yum install libpcap libpcap-devel gdbm gdbm-devel zlib zlib-devel
2、安装ntop
?useradd -M -s /sbin/nologin -r ntop
?tar zxvf ntop-4.0.1.tar.gz
?cd ntop-4.0.1
?./autogen.shmake
make install
chown -R ntop:ntop /usr/local/share/ntop
chown -R ntop:root /usr/local/var/ntop3、配置并启动ntop
首先为ntop的admin用户设置密码:
ntop -A
接下来启动ntop:
ntop -i eth0 -d -L -u ntop
使之开机自动启动:
echo ‘ntop -i eth0 -d -L -u ntop &> /dev/null’ >> /etc/rc.d/rc.local用web页面访问http://yourIP:3000?如果出现以下换面 则表示运行正常
?
?
★★下面是对这三者的整合.把nagios和ntop 整合到cacti中
先让cacti支持插件功能
?笔者在上文所安装的cacti版本为0.8.7g,支持插件的补丁就选用cacti-plugin-0.8.7g-PA-v2.8.tar.gz
下载后进行解压缩
tar zxvf cacti-plugin-0.8.7g-PA-v2.8.tar.gz
cd cacti-plugin-arch
cp -R * /var/www/html/cacti/
mysql -uroot -p cactidb <pa.sql
此处修改原作者一个错误:这个补丁应在cacti目录下打才管用,所以应该先切换目录:
cd ?/var/www/html/cacti/
patch -p1 -N? < cacti-plugin-0.8.7g-PA-v2.8.diff
打完补丁后图片有时不会显示,这是需要修改下/var/www/html/cacti/include目录下的config.php文件
修改$url_path后面的值:
$url_path = "/cacti/";
修改完成直接web页面登陆,http://yourIP/cacti
选择左下的User Managenment 之后点击admin
在其中最后一项打钩,并保存
?
好了,现在cacti就支持其他插件功能了,下面把ntop和nagios加进去就可以了
先整合ntop.
?下面是对nagios与cacti的整合
安装Nagios Plugin for Cacti(NPC)插件(http://trac2.assembla.com/npc)
作用:将nagios的数据通过ndo2db导入到mysql数据库,然后cacti读取数据库信息将nagios的结果通过NPC展示出来。?先下载npc源码包 ,官网不知为何不让下载了,直接google搜索npc-2.0.4.tar.gz,有个论坛有下载的。
下载完成后来到所npc-2.0.4.tar.gz 所在的目录tar zxvf npc-2.0.4.tar.gz
mv npc /var/www/html/cacti/plugins/
vi /var/www/html/cacti/include/config.php??? ? ##??在该文件中的"$plugins = array()"后增加如下一行内容
$plugins[] = ‘npc’;tar zxvf json-1.2.1.tgz &&? cd json-1.2.1?????????????? #npc需要json来支持某些功能
/usr/bin/phpize ? ?如果此处没有phpize命令,则用yum安装php-devel即可
./configure
make?
make install
之后用web测试 ,index.php(前文有测试方法)如果有图片所示的这一项,则表示正常json正常安装
## 如果phpize 没有此指令,请yum安装php-devel包
说明:如果您是使用RPM方式安装php,那么一些动态的扩展是自动被加入的,这些动态扩展 在:/etc/php.d/*.ini这些文件,这里确认一下json.ini文件有这一行内容:extension=json.so;同时还要确认一下 /usr/lib/php/modules目录下有没有json.so文件,如果没有的话,要手动复制一份到这个目录,这样才能确保json.ini起作用。
全部装完在cacti中设置如图所示
?
这里Nagios Command File Path 一空应该填:/usr/local/nagios/var/rw/nagios.cmd
npc的安装:先将相应插件文件放到plugin,然后需要:
vi /var/www/html/cacti/include/config.php ? ? ## 在该文件中的"$plugins = array()"后增加如下一行内容
//$plugins[] = ‘npc’;?
这样先注释掉,才可以安装上npc的.否则,不能在web页面的插件管理页面看到npc插件.
应当将ndo2db.cfg里面的
db_name=cacti;
db_prefix=npc_;?
?转载请注明出处:http://freeze.blog.51cto.com/