您的位置:首页 > 移动开发 > IOS开发

手把手实现企业级开源监控软件cacti+nagios+ntop整合(图解)

2010-09-03 11:05 746 查看
此文凝聚笔者不少心血请尊重笔者劳动,转载请注明出处。[b]http://freeze.blog.51cto.com/[/b]

做一名运维工程师,监控恐怕是日常生活中必不可少的活了,在企业中的监控,大多是用开源软件来实现的,(为什么要用开源?省钱呗..呵呵) 而且开源软件也有着非常优秀的表现,其中著名的有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)机房运行环境:电流、电压、温湿度

好了 简单介绍完cacti后,下面我们一起来看下nagios.
二.nagios的简介
Nagios是一款用于系统和网络监控的应用程序。它可以在你设定的条件下对主机和服务进行监控,在状态变差和变好的时候给出告警信息

Nagios最初被设计为在Linux系统之上运行,然而它同样可以在类Unix的系统之上运行

Nagios更进一步的特征包括:

1)监控网络服务(SMTP、POP3、HTTP、NNTP、PING等)

2)监控主机资源(处理器负荷、磁盘利用率等)

3)简单地插件设计使得用户可以方便地扩展自己服务的检测方法

4)并行服务检查机制

5)具备定义网络分层结构的能力,用"parent"主机定义来表达网络主机间的关系,这种关系可被用来发现和明晰主机宕机或不可达状态

6)当服务或主机问题产生与解决时将告警发送给联系人(通过EMail、短信、用户定义方式)
可以通过飞信,等方式实现时,既可传递给管理员,可高效的保证服务器的维护。

7)具备定义事件句柄功能,它可以在主机或服务的事件发生时获取更多问题定位

8)自动的日志回滚

9)可以支持并实现对主机的冗余监控

10)可选的WEB界面用于查看当前的网络状态、通知和故障历史、日志文件等

Nagios通常由一个主程序(Nagios)、一个插件程序(Nagios-plugins)和四个可选的ADDON(NRPE、NSCA、 NSClient++和NDOUtils)组成。Nagios的监控工作都是通过插件实现的,因此,Nagios和Nagios-plugins是服务器端工作所必须的组件。而四个ADDON中

(1)NRPE:用来在监控的远程Linux/Unix主机上执行脚本插件以实现对这些主机资源的监控

(2)NSCA:用来让 被监控的远程Linux/Unix主机主动将监控信息发送给Nagios服务器(这在冗余监控模式中特别要用到)

(3)NSClient++:用来监控 Windows主机时安装在Windows主机上的组件

(4)NDOUtils:则用来将Nagios的配置信息和各event产生的数据存入数据库,以实现 这些数据的快速检索和处理

这四个ADDON(附件)中,NRPE和NSClient++工作于客户端,NDOUtils工作于服务器端,而NSCA则需要同时安装在服务器端和客户端 。

用marion老师所绘制的一幅图片,可清晰展示ngagios的工作原理




在用一幅图片宏观上展示nagios在企业级应用的位置





有朋友疑问,既然cacti,和nagios都是网络监控工具,选用其一不是减少很多麻烦,在这里笔者建议两者结合使用,还要结合后文所提到的ntop,以作者的理解,简单阐述下cacti和nagios的优缺点:

cacti:在监控方面有良好的绘图,cacti在流量和图型塑造上要强于nagios,但是在故障分析上有些略逊,而且报警机制也有待完善,这时nagios就派上用场了。
nagios :适合监视大量服务器上面的大批服务是否正常, 重点并不在图形化的监控, 其集成的很多功能例如报警,都是 cacti 没有或者很弱的。但在绘图以及图型塑造方面精细度比cacti要弱。
通过两者比较,可以很清晰的了解各自的用途。
下面笔者在简单介绍下ntop
三.Ntop简介
一.  MRTG基于SNMP获取信息,对于端口的流量,MRTG能提供精确统计,但对于三层以上的信息则无从得知了。而这正是NTOP的强项。 NTOP能够更加直观地将网络使用量的情况和每个节点计算机的网络带宽使用详细情况显示出来。NTOP是一种网络嗅探器,嗅探器在协助监测网络数据传输、 排除网络故障等方面有着不可替代的作用。可以通过分析网络流量来确定网络上存在的各种问题,如瓶颈效应或性能下降;也可以用来判断是否有黑客正在攻击网络 系统。如果怀疑网络正在遭受攻击,通过嗅探器截获的数据包可以确定正在攻击系统的是什么类型的数据包,以及它们的源头,从而可以及时地做出响应,或者对网 络进行相应的调整,以保证网络运行的效率和安全。
二. 管理人员通过NTOP还可以很方便地确定出哪些通信量属于某个特定的网络协议、占主要通信量的是哪个主机、 各次通信的目标是哪个主机、数据包发送时间、各主机间数据包传递的间隔时间等。这些信息为网管员判断网络问题及优化网络性能,提供了十分宝贵的信息。

 NTOP提供以下一些功能:
  ① 自动从网络中识别有用的信息;
  ② 将截获的数据包转换成易于识别的格式;
  ③ 对网络环境中的通信失败进行分析;
  ④ 探测网络环境下的通信瓶颈;
  ⑤ 记录网络通信时间和过程;
  ⑥ 自动识别客户端正在使用的操作系统;
  ⑦ 可以在命令行和Web两种方式下运行。

简单介绍完ntop后,笔者在网上找了一张图片,很清晰的解释了ntop的工作位置,从工作位置也可以看出ntop的主要功能.




通过笔者简单介绍,也可以看出来ntop作为监控工具与前两者cacti和nagios的区别,ntop在监控方面,它的角度是从分析网络流量来确定网络上存在的各种问题,说白了就类似个抓包监控工具,只不过通过归纳绘图实现更多的功能。
笔者这样解释相信不少朋友已经明白这三款开源界的元老级监控软件的各自职责,笔者建议朋友们在总结下各自的功能,达到更深刻的理解.也算笔者给朋友们留个话题,好了,接下来开始全源码实现这三者的整合和应用。
笔者所用的系统是rhel5.4版本,内核版本号为2.6.18
首先先编译安装cacti.
在开始之前老规矩,先安装编译环境,要想实现cacti的网络监控,还要借助其他一些如mysql,httpd,php等来其原理请参照笔者上一篇博文LEMP架构,为了节省时间,笔者在这里就用yum来装这些包了。
配置好yum环境后

yum install httpd php php-mysql mysql mysql-server php-snmp net-snmp-utils -y

安装完成后让服务都启动并调整之间的连接关系.
service mysqld start # 启动mysql服务
chkconfig mysqld on #使其开机自动启动
启动完mysql后,如果出现以下画面,并能通过mysql进入,说明成功安装。




之后编辑httpd服务的配置文件,使其支持mod_status.so模块.,
只要在/etc/httpd/conf/httpd.conf的配置文件中找到
LoadModule status_module modules/mod_status.so
有这一项表示已经支持状态检测模块,所以无需额外添加,直接启动web服务即可.
service httpd start #启动http服务
chkconfig httpd on #开机自动启动httpd 服务
启动OK后,编辑
vim /var/www/html/index.php 在其中添加以下内容#
<?php

phpinfo();

?>
# 保存退出
用web浏览器访问,如果出现以下画面,则表示http支持动态php.并能与php成功连接.




接着测试与mysql的连接,先给mysql设置个管理员密码
mysqladmin -uroot password '123456' #密码设置为123456
编辑刚才的web页面
vim /var/www/html/index.php
把里面的内容改为

<?php
$link=mysql_connect("localhost","root","123456");
if(!$link) echo "FAILD!";
else echo "OK!";
?>


刷新刚才的web浏览器页面,如果出现OK!字样,则表示成功连接.


下面开始安装绘图工具 rrdtool..具体用途请参照上文,笔者在此不过多解释了。




所有的rrdtool的安装包如上,因为包太多,笔者就选用rpm包来安装了.笔者将以上包的路径放置在
/root/rrdtool/ 下

其中主要用到的是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.rpm
yum -y localinstall --nogpgcheck rrdtool-devel-1.2.27-3.el5.i386.rpm
yum -y localinstall --nogpgcheck rrdtool-php-1.2.27-3.el5.i386.rpm
因网络流量等信息的统计需要通过SNMP协议实现,经过SNMP抓取数据并存储,此过程在rhel5.4上所需要的安装包有以下几个:

因为其中有比较复杂的依赖关系,而且rhel5.4的安装包自带有实现该功能的rpm包,笔者使用yum来安装
yum install net-snmp net-snmp-libs net-snmp-utils net-snmp-devel
安装完成后启动snmpd服务
service snmpd start  #启动snmpd服务
chkconfig snmpd on #使其开机自动启动
service snmptrapd start  #启动snmptrapd服务
chkconfig snmptrapd on #使其开机自动启动
正常启动后用
netstat -unlp 查看端口
如果有以下两项,则表示正常启动



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 /root
tar zxvf cacti-0.8.7g.tar.gz
mv cacti-0.8.7g /var/www/html/cacti
##因为cacti的配置是在web页面下进行的,所以笔者直接把cacti-0.8.7g 移至/var/www/html/cacti
cd /var/www/html/cacti
mysql -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 cactier
cd /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 - cactier
php /var/www/html/cacti/poller.php > /dev/null 2>&1
exit
数据部分启动较慢,请耐心等待,如显示如上图片数据,则成功安装配置。
##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.gz
cd 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/sbin
chcon -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目录下了,并赋予执行权限。

如果此时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.sh
make

make install

chown -R ntop:ntop /usr/local/share/ntop

chown -R ntop:root /usr/local/var/ntop

3、配置并启动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
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.
首先去下载cacti的ntop插件,而后解压至cacti的插件目录:
# tar zxvf ntop-0.1.tar.gz -C /var/www/html/cacti/plugins/

接着配置cacti的主配置文件,启用此插件:
# vim  /var/www/html/cacti/include/config.php
添加如下内容:
$plugins[] = 'ntop';

接下来到cacti的控制台中"settings"中配置此插件,将其指向实际的ntop服务器所在的URL;然后再到cacti控制台的"user Management"中的admin用户中启用此插件即可。

设置完成后如图所示:
发现上面是不是多了一个标签Ntop,有些版本web浏览器不会显示里面内容,笔者建议用firefox,效果图如下。



下面是对nagios与cacti的整合

安装Nagios Plugin for Cacti(NPC)插件(http://trac2.assembla.com/npc

作用:将nagios的数据通过ndo2db导入到mysql数据库,然后cacti读取数据库信息将nagios的结果通过NPC展示出来。


一、nagios需要的包

1.下载并安装ndoutils

wget http://sourceforge.net/projects/nagios/files/ndoutils-1.x/ndoutils-1.4b9/ndoutils-1.4b9.tar.gz/download tar zxvf ndoutils-1.4b9.tar.gz
cd ndoutils-1.4b9
./configure --prefix=/var/www/html/nagios --enable-mysql --disable-pgsql --with-mysql-inc=/usr/include/mysql --with-mysql-lib=/usr/lib/mysql
make

2.准备配置文件

cp -v src/{ndomod-3x.o,ndo2db-3x,file2sock,log2ndo} /var/www/html/nagios/bin
cd db
./installdb -ucacti -pcacti -hlocalhost -d cacti
cd ..
cp -v config/{ndo2db.cfg-sample,ndomod.cfg-sample} /var/www/html/nagios/etc
mv /var/www/html/nagios/etc/ndo2db.cfg-sample /var/www/html/nagios/etc/ndo2db.cfg
mv /var/www/html/nagios/etc/ndomod.cfg-sample /var/www/html/nagios/etc/ndomod.cfg
chmod 644 /var/www/html/nagios/etc/ndo*
chown nagios:nagios /var/www/html/nagios/etc/*
chown nagios:nagios /var/www/html/nagios/bin/*

3.修改nagios.cfg配置文件以适应当前环境
vim /var/www/html/nagios/etc/nagios.cfg
# 在文件中添加:
broker_module=/var/www/html/nagios/bin/ndomod-3x.o config_file=/var/www/html/nagios/etc/ndomod.cfg
# 检查
event_broker_options=-1     ## 为Nagios开启event broker


4.修改ndo2db.cfg以适应当前环境

vim /var/www/html/nagios/etc/ndo2db.cfg
# 确保下列内容为唯一项
socket_type=tcp
db_servertype=mysql
db_host=localhost
db_port=3306

db_name=cactidb

db_prefix=nagios_
db_user=cactier
db_pass=123456

5.修改ndomod.cfg以适应当前环境

vim /var/www/html/nagios/etc/ndomod.cfg
# 确保下列项的唯一内容为
output_type=tcpsocket
output=127.0.0.1

6.为ndo2db添加启动进程

cp ./daemon-init /etc/init.d/ndo2db
vim /etc/init.d/ndo2db
# 检查里面的路径确保不会出现“//",并将Ndo2dbBin修改成下面的值:
Ndo2dbBin=/var/www/html/nagios/bin/ndo2db-3x
chmod +x /etc/init.d/ndo2db

7.启动守护进程与nagios

service ndo2db start

tail -20 /var/log/messages ## 查看其中是否有错误出现。如无报错请继续

service nagios start
二:安装ncp,以在Cacti中展现Nagios
1.先安装cacti扩展模块
wget http://www.cacti.net/downloads/pia/cacti-plugin-0.8.7h-PA-v3.0.tar.gz tar xvf cacti-plugin-0.8.7h-PA-v3.0.tar.gz
cp -R cacti-plugin-arch/* /var/www/html/cacti/
cd /var/www/html/cacti/
mysql -ucactier -p123456 cactidb < pa.sql
patch -p1 -N < cacti-plugin-0.8.7h-PA-v3.0.diff


## 为cacti配置文件打补丁的时候注意在为include/config.php打补丁的时候有可能它将 include/config.php.dist给打补丁了,我们只需要手动加入下面的内容即可。

vim include/config.php
# 修改(或新加入)为
$url_path = "/cacti/";
从web进入cacti,启用cacti plugin扩展


2.安装npc

tar zxvf npc-2.0.4.tar.gz
mv npc /var/www/html/cacti/plugins/
vim /var/www/html/cacti/include/config.php
# 加入:
$plugins[] = 'npc';

3.安装 npc支持:json

wget http://pkgs.fedoraproject.org/repo/pkgs/php-pecl-json/json-1.2.1.tgz/d8904d2f004ceec85eeacf524cd25539/json-1.2.1.tgz tar zxvf json-1.2.1.tgz
cd json-1.2.1
phpize   ## 如果发现没有Phpize文件,则是因为php-devel包没有安装导致的
./configure
make && make install


php -i | grep php.ini ## 查看是否有导入信息
4.打开php.ini文件添加对json的支持

vim /etc/php.ini

# 添加

extension=json.so
5.为apache添加php支持。

vim /etc/httpd/conf/httpd.conf
# 添加一行:
AddType application/x-httpd-php .php .phtml
# 修改原DirectoryIndex内容为:
DirectoryIndex index.html index.html.var index.php

usermod -G cactier apache
service httpd restart    ## 重启apache以让php生效
php -m   ## 查看是否有json被加载

6.修改配置文件以让npc读取到新的数据。

vim /var/www/html/nagios/etc/ndo2db.cfg
db_prefix=npc_

6.1
从Web进入Cacti,确保正确使用npc选项。

6.2 修改mysql中的表结构:

./mysql -ucactier -p cactidb
mysql> use cactidb;
mysql> alter table npc_eventhandlers add long_output TEXT NOT NULL default '' after output;
mysql> alter table npc_hostchecks add long_output TEXT NOT NULL default '' after output;
mysql> alter table npc_hoststatus add long_output TEXT NOT NULL default '' after output;
mysql> alter table npc_notifications add long_output TEXT NOT NULL default '' after output;
mysql> alter table npc_servicechecks add long_output TEXT NOT NULL default '' after output;
mysql> alter table npc_servicestatus add long_output TEXT NOT NULL default '' after output;
mysql> alter table npc_statehistory add long_output TEXT NOT NULL default '' after output;
mysql> alter table npc_systemcommands add long_output TEXT NOT NULL default '' after output;

7.重启ndo2db进程,重新加载配置文件重启nagios服务。

service ndo2db restart

service nagios restart
8.在Web上配置NPC以使之正常读取工作。
在Settings->npc中 ,勾上Remote Commands
Nagios Command File Path= /var/www/html/nagios/var/rw/nagios.cmd
Nagios URL=你的地址(http://ocalhost/nagios/)
接下来刷新npc就可以看到数据啦:

#测试:
之后用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中设置如图所示

















#排错:
如果不出npc
可尝试npc先将相应插件文件放到plugin,然后需要:
vi /var/www/html/cacti/include/config.php ## 在该文件中的"$plugins = array()"后增加如下一行内容

//$plugins[] = 'npc';

这样先注释掉,才可以安装上npc的.否则,不能在web页面的插件管理页面看到npc插件.

应当将ndo2db.cfg里面的

db_name=cactidb;

db_prefix=npc_;

#如果连接不上,注意配置文件中链接mysql的帐号密码是否一致。

这篇也忙活好多天,笔者用的大多都是最新版本,总是碰见bug ,纠结啊,如有错误的地方请指出,笔者尽快修改,多谢各位朋友多多支持,
此文凝聚笔者不少心血请尊重笔者劳动,转载请注明出处。[b]http://freeze.blog.51cto.com/[/b]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息