在RHEL5.3上配置基本的Nagios系统(使用Nagios-3.1.2)
一、安装配置Nagios 1、Nagios简介 Nagios是一款遵循GPLv2的开源网络监控软件,可用来监控指定的多种系统的主机、服务,并可在它们的工作状态发生变化时通知管理员。它的特性包括:1)监控网络服务(HTTP、POP3、SMTP、PING、MySQL等)2)监控主机资源(磁盘空间利用率、内存利用率、CPU负载等)3)简洁的插件设计接口,使得用户可以轻松开发所需的检测脚本4)并行服务模式5)轻松描述网络结构,并且能够区辨“宕机”和“主机不可达”6)通过邮件或用户自定义的方式将主机或服务的工作状态变化情况通知给管理员7)自动日志滚动8)支持以冗余方式进行主机监控9)可以通过web方式直观的查看当前网络状态、通知和问题历史、日志文件等等,此组件为可选 Nagios通常由一个主程序(Nagios)、一个插件(Nagios-plugins)和四个可选的ADDON(NRPE、NSCA、NSClient++和NDOUtils)组成。Nagios的监控工作都是通过插件实现的,因此,Nagios和Nagios-plugins是服务器端工作所必须的组件。而四个ADDON中,NRPE用来在监控的远程Linux/Unix主机上执行脚本插件以实现对这些主机资源的监控;NSCA用来让被监控的远程Linux/Unix主机主动将监控信息发送给Nagios服务器(这在冗余监控模式中特别要用到);NSClient++是用来监控Windows主机时安装在Windows主机上的组件;而NDOUtils则用来将Nagios的配置信息和各event产生的数据存入数据库,以实现这些数据的快速检索和处理。这四个ADDON(附件)中,NRPE和NSClient++工作于客户端,NDOUtils工作于服务器端,而NSCA则需要同时安装在服务器端和客户端。 下图是笔者根据自己的理解给出的Nagios各组件的关系科图,希望能帮助读者理解。如果您对此构图中的关系持有异议,欢迎通过各种方式跟笔者交流。 目前,Nagios只能安装在Linux系统主机上,其编译需要用到gcc。同时,如果打算使用web界面的管理工具的话,还需要有apache服务器和GD图形库的支持。 2、安装前的准备工作 (1)解决安装Nagios的依赖关系: Nagios基本组件的运行依赖于httpd、gcc和gd。可以通过以下命令来检查nagios所依赖的rpm包是否已经完全安装:# rpm -q httpd gcc glibc glibc-common gd gd-devel 对于缺少的rpm包,您可以挂载光盘直接使用rpm命令进行安装。如果不想总是被rpm的依赖关系所困扰,您可以通过yum结合本地源来实现rpm包的管理。对于本地源的建立,可以参考笔者的另外一篇关于yum的文章。 说明:以上软件包您也可以通过编译源代码的方式安装,只是后面许多要用到的相关文件的路径等需要按照您的源代码安装时的配置逐一修改。 (2)添加nagios运行所需要的用户和组: # groupadd nagcmd# useradd -m nagios# usermod -a -G nagcmd nagios 把apache加入到nagcmd组,以便于在通过web Interface操作nagios时能够具有足够的权限:# usermod -a -G nagcmd apache 3、编译安装nagios: # tar zxf nagios-3.1.2.tar.gz # cd nagios-3.1.2# ./configure --with-command-group=nagcmd# make all# make install# make install-init# make install-config# make install-commandmode 为email指定您想用来接收nagios警告信息的邮件地址,默认是本机的nagios用户:# vi /usr/local/nagios/etc/objects/contacts.cfg email nagios@localhost #这个是默认设置 在httpd的配置文件目录(conf.d)中创建Nagios的Web程序配置文件:# make install-webconf 创建一个登录nagios web程序的用户,这个用户帐号在以后通过web登录nagios认证时所用:# htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin 以上过程配置结束以后需要重新启动httpd:# service httpd restart 4、编译、安装nagios-plugins nagios的所有监控工作都是通过插件完成的,因此,在启动nagios之前还需要为其安装官方提供的插件。 # tar zxf nagios-plugins-1.4.13.tar.gz # cd nagios-plugins-1.4.13# ./configure --with-nagios-user=nagios --with-nagios-group=nagios# make# make install 5、配置并启动Nagios (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界面的客户端地址。二、安装配置Nagios基于web的管理接口fruity(第三方工具) 虽然Nagios监控结果的查看能够由WEB界面直观的显示,但其配置文件的设定等管理工作通常都要通过字符界面进行,这对某些用户而言可能是不小的挑战。为了解决这个问题,可以通过安装Nagios的web界面程序fruity来提高部分工作效率。不过,fruity对于Nagios的支持只到Nagios 2.X系列,fruity的作者近两年已经没有出新版本,其维护和开发似乎已经停止,同时,作者也一再声明fruity只是beta版,不建议在生产性环境中使用。因此,在使用此管理工具前请您慎重对待之。如果不打算使用,您可以略过些工具的安装配置过程。本文后面的Nagios配置过程也不在对如何使用fruity进行演示说明。 # tar zxf fruity-1.0-rc2.tar.gz 将解压后的目录移至httpd的网站目录,并重新命名为fruity。当然,您也可以使用web的虚拟路径来实现对于访问fruity的路径的指定。 # mv fruity-1.0-rc2 /var/www/html/fruity 为fruity创建数据库,并使用fruity提供的sql脚本建立所需要的表:# cd /var/www/html/fruitymysql> create database fruity;mysql> use fruity;mysql> source sqldata/fruity-mysql.sql 新建mysql用户并为其设定所需的权限:mysql> GRANT SELECT,INSERT,DROP,EMPTY ON fruity.* TO fruity@localhost IDENTIFIED BY '123456'; 编辑其配置文件,指定数据的相关访问属性:# vi includes/config.inc使以下选项的值为您所需要的设定:$sitedb_config['host'] = 'localhost'; $sitedb_config['username'] = 'fruity'; $sitedb_config['password'] = '123456'; $sitedb_config['database'] = 'fruity'; $sitedb_config['dbserv'] = 'mysql'; 由于fruity具有直接操作Nagios配置的权限,因此,为了安全起见,建议为其指定访问认证功能。启用方法这里就不再说明,请读者自行参考Nagios的设定进行。 接下来就可以通过浏览器进行访问了:http://yourIP/fruity三、NDOUtils的安装与设定: 1、NDOUtils简介 NDOUTILS ADDON主要用来将Nagios的配置信息和event产生的数据存入数据库(目前的beta版支持mysql和pgsql,稳定版只支持mysql),以方便实现数据的快速检索和处理,并且为其它通过web接口程序来管理这些数据提供了保障。在一个大型应用中,可能存在多个独立的或分布式布置的Nagios服务器,这种环境中的每个Nagios服务器通常被称为一个Nagios实例。在多Nagios实例的环境中,既可以把所有实例的数据存入到一个数据库,也可以将各实例的数据分别存储。在只有一个Nagios实例环境中,其实例名称通常为“default”;而在多实例的环境中,则需要为此些Nagios实例各自命名。 NDO Utils主要由以下四个部分组成: 1)NDOMOD Event Broker Module(NDOMOD.O):用来输出Nagios进程产生的数据(data和logic),其前提是Nagios在编译时开启了Event broker的功能。同时,NDOMOD模块还可以导出Nagios配置有关的信息(包括Nagios监控进程运行时环境产生的动态数据)至文件、Unix域套接字或者TCP套接字。NDO2DB将通过前面的这三种方式获得Nagios的有关数据。2)NDO2DB:用来接收由NDOMOD和LOG2NDO组件输出的信息并将之存储在数据库中。启动时,NDO2DB进程将创建一个TCP套接字或Unix域套接字以监听客户端(输出端)的连接请求。目前仅支持MySQL数据库。多个客户端可以同时向一个NDO2DB守护进程输出数据,此时的NDO2DB将为每一个连接进来的客户端(Nagios实例)建立一个连接进程,以实现每个客户端数据的独立存储、检索和处理。 3)LOG2NDO:用来将Nagios的历史日志通过NDO2DB进程输出至数据库。LOG2NDO与NDO2DB进程通信的方法依然是标准文件、Unix域套接字或者TCP套接字三种。4)FILE2SOCK:从标准文件或标准输入读入数据,并将之输出至Unix域套接字或TCP套接字。当NDOMOD或LOG2NDO将数据输出至标准文件时,此工具则可用来将这些标准文件中数据读出并发送给NDO2DB进程监听的TCP套接字或Unix域套接字。 2、安装NDOUtils # tar zxf ndoutils-1.4b8.tar.gz# cd ndoutils-1.4b8# ./configure --enable-mysql --with-mysql-lib=/usr/lib --with-mysql-inc=/usr/include --disable-pgsql# make # cp -v src/{ndomod-3x.o,ndo2db-3x,file2sock,log2ndo} /usr/local/nagios/bin 以上复制的文件中前两项是版本相关的,即如果您的nagios主版本号是2系列,则需要拷贝名为ndomod-2x.o和ndo2db-2x的两个文件。后两项是通用文件,无论哪个版本都需要复制。 3、为NDOUtils创建数据库 # mysql -uroot -pmysql> create database ndodb;mysql> GRANT SELECT,INSERT,UPDATE,DELETE 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_”为前缀。后面讲到整合的文章中会继续对些做出说明。 4、复制、编辑配置文件 # cd ..# cp -v config/{ndo2db.cfg,ndomod.cfg} /usr/local/nagios/etc # vi /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 5、编辑ndo2db守护进程和ndomod的配置文件 # vi /usr/local/nagios/etc/ndo2db.cfgsocket_type=tcpdb_servertype=mysqldb_host=localhostdb_port=3306db_prefix=nagios_db_user=ndouserdb_pass=123456 说明:i) 以上"db_"开头的选项用来指定连接数据库的属性;ii)其默认用来接收数据的方式为Unix域套接字,这里修改成了TCP套接字;同时,ndomod.cfg配置文件中指定的输出方式也应该做相应的修改; 接下来我们去编辑ndomod的配置文件,为其指定数据的输出方式和输出目标主机:# vi /usr/local/nagios/etc/ndomod.cfgoutput_type=tcpsocketoutput=127.0.0.1 6、启动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 说明: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库文件位置的选项;