一、Nagios概述
1、简介
Nagios是插件式的结构,它本身没有任何监控功能,所有的监控都是通过插件进行的,因此其是高度模块化和富于弹性的。Nagios监控的对象可分为两类:主机和服务。主机通常指的是物理主机,如服务器、路由器、工作站和打印机等,这里的主机也可以是虚拟设备,如xen虚拟出的Linux系统;而服务通常指某个特定的功能,如提供http服务的httpd进程等。而为了管理上的方便,主机和服务还可以分别被规划为主机组和服务组等。
Nagios不监控任何具体数值指标(如操作系统上的进程个数),它仅用四种抽象属性对被监控对象的状态进行描述:OK、WARNING, CRITICAL和UNKNOWN。于是,管理员只需要对某种被监控对象的WARNING和CRITICAL状态的阈值进行关注和定义即可。Nagios通过将WARTING和CRTICAL的阈值传递给插件,并由插件负责某具体对象的监控及结果分析,其输出信息为状态信息(OK,WARNING,CRITICAL或UNKOWN)以及一些附加的详细说明信息。
2、特性
由上述说明可以,Nagios是极富弹性的,其监控功能完全可以按照管理员的期望进行。此外,它外提供了对问题的自动响应能力和一个功能强大的通知系统。所有这些功能的实现是基于一个结构明晰的对象定义系统和少数几个对象类型实现的。
1) 命令(Commands)
“命令”用于定义Nagios如何执行某特定的监控工作。它是基于某特定的Nagios插件定义出的一个抽象层,通常包含一组要执行的操作。
2)时段(Time periods)
“时段”用于定义某“操作”可以执行或不能执行的日期和时间跨度,如工作日内的每天8:00-18:00等;
3)联系人和联系人组(Contacts and contact groups)
“联系人”用于定义某监控事件的通知对象、要通知的信息以及这些接收通知者何时及如何接收通知;一个或多个联系人可以定义为联系人组,而一个联系人也可以属于多个组;
4) 主机和主机组(host and host groups)
“主机”通常指某物理主机,其包括此主机相关的通知信息的接收者(即联系人)、如何及何时进行监控的定义。主机也可以分组,即主机组(host groups),一个主机可同时属于多个组;
5) 服务(Services)
“服务”通常指某主机上可被监控的特定的功能或资源,其包括此服务相关的通知信息的接收者、如何及何时进行监控等。服务也可以分组,即服务组(Service groups),一个服务可同时属于多个服务组;
3、依赖关系
Nagios的强大功能还表现在其成熟的依赖关系系统上。比如,某路由设备故障必然会导致关联在其上的其它主机无法被正常访问,如果不能定义这些设备间的依赖关系,那么监控系统上必然会出现大量的设备故障信息。而Nagios则通过依赖关系来描述网络设备的拓扑结构,并能够实现在某设备故障时不再对依赖于此设备的其它设备进行检测,从而避免了无谓的故障信息,方便管理员及时定位并排除故障。此外,Nagios的依赖关系还可以在服务级别上实现,如果某服务依赖于其它服务时,也能实现类似主机依赖关系的功能。
4、宏
Nagios还能够使用宏,并且宏的定义在整个Nagios系统中具有一致性。宏是能够用于对象定义中的变量,其值通常依赖于上下文。在“命令”中定义的宏,相对于主机、服务或其它许多参数来说,其值会随之不同。比如,某命令可以根据向其传递的IP地址的不同来监控不同的主机。
5、计划中宕机
Nagios还提供了调度性计划中的宕机机制,管理员可以周期性的设定某主机或服务为计划中的不可用状态。这种功能可以阻止Nagios在调度宕机时段通知任何信息。当然,这也可以让Nagios自动通知管理员该进行主机或服务维护了。
6、软状态和硬状态(Soft and Hard States)
如上所述,Nagios的主要工作是检测主机或服务的状态,并将其存储下来。某一时刻,主机或服务状态仅可以是四种可用状态之一,因此,其状态能够正确反映主机或服务的实际状况就显得特别关键。为了避免某偶然的临时性或随机性问题,Nagios引入了软状态和硬状态。在实际的检测中,Nagios一旦发现某主机或服务的状态为UNKOWN或不同于上一次检测时的状态,其将会对此主机或服务进行多次测试以确保此状态的变动是非偶然性的。具体共要做出几次测试是可以配置的,在这个指定次数的测试时段内,Nagios假设此变化后的状态为软件状态。一旦测试完成后状态仍然为新变的状态时,此状态就成了硬状态。
二、安装配置Nagios
1、Nagios程序简介
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只能安装在Linux系统主机上,其编译需要用到gcc。同时,如果打算使用web界面的管理工具的话,还需要有apache服务器和GD图形库的支持。
2、安装前的准备工作
(1)解决安装Nagios的依赖关系:
Nagios基本组件的运行依赖于httpd、gcc和gd。可以通过以下命令来检查nagios所依赖的rpm包是否已经完全安装:
yum -y install httpd gcc glibc glibc-common gd gd-devel php php-mysql mysql mysql-devel mysql-server
说明:以上软件包您也可以通过编译源代码的方式安装,只是后面许多要用到的相关文件的路径等需要按照您的源代码安装时的配置逐一修改。此外,您还得按需启动必要的服务,如httpd等。
(2)添加nagios运行所需要的用户和组:
groupadd nagcmd useradd -G nagcmd nagios passwd nagios
把apache加入到nagcmd组,以便于在通过web Interface操作nagios时能够具有足够的权限:
usermod -a -G nagcmd apache
3、编译安装nagios:官方最新版本为4.1.0rc1 我这里使用3.5.1
wget #下载
tar zxf nagios-3.5.1.tar.gz cd nagios-3.5.1 ./configure --with-command-group=nagcmd --enable-event-broker --prefix=/usr/local/nagios make all make install make install-init make install-commandmode make install-config 创建一个登录nagios web程序的用户,这个用户帐号在以后通过web登录nagios认证时所用: htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin #输入2次密码
4、编译、安装nagios-plugins
wget #下载插件
#nagios的所有监控工作都是通过插件完成的,因此,在启动nagios之前还需要为其安装官方提供的插件。 tar zxf 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
5、配置并启动Nagios
(1)把nagios添加为系统服务并将之加入到自动启动服务队列:
chkconfig --add nagios chkconfig nagios on
(2)检查其主配置文件的语法是否正确:
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg #检查语法为了方便可以写到.bashrc 里面 如 #echo "alias check='/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg' " >> /root/.bashrc source /root/.bashrc 使之生效 以后直接执行 check 即可检查语法
(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界面的客户端地址。
6.安装NRPE
1、NRPE简介
Nagios监控远程主机的方法有多种,其方式包括SNMP、NRPE、SSH和NCSA等。这里介绍其通过NRPE监控远程Linux主机的方式。
NRPE(Nagios Remote Plugin Executor)是用于在远端服务器上运行检测命令的守护进程,它用于让Nagios监控端基于安装的方式触发远端主机上的检测命令,并将检测结果输出至监控端。而其执行的开销远低于基于SSH的检测方式,而且检测过程并不需要远程主机上的系统帐号等信息,其安全性也高于SSH的检测方式。
wget http://sourceforge.net/projects/nagios/files/nrpe-2.x/nrpe-2.15/nrpe-2.15.tar.gz/download tar xf download cd nrpe-2.12.tar.gz ./configure --with-nrpe-user=nagios \ --with-nrpe-group=nagios \ --with-nagios-user=nagios \ --with-nagios-group=nagios \ --enable-command-args \ --enable-ssl make all make install-plugin make install-daemon make install-daemon-config
配置NRPE
# vim /usr/local/nagios/etc/nrpe.conf #基本上不用修改 被监控主机主要修改Server_address log_facility=daemon pid_file=/var/run/nrpe.pid server_address=nrpe帧听的IP server_port=5666 nrpe_user=nagios nrpe_group=nagios allowed_hosts=nagios 服务器端的IP command_timeout=60 connection_timeout=300 debug=0
启动nrpe
/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg –d
为了便于NRPE服务的启动,可以将如下内容定义为/etc/init.d/nrped脚本:
#!/bin/bash # chkconfig: 2345 88 12 # description: NRPE DAEMON NRPE=/usr/local/nagios/bin/nrpe NRPECONF=/usr/local/nagios/etc/nrpe.cfg case "$1" in start) echo -n "Starting NRPE daemon..." $NRPE -c $NRPECONF -d echo " done." ;; stop) echo -n "Stopping NRPE daemon..." pkill -u nagios nrpe echo " done." ;; restart) $0 stop sleep 2 $0 start ;; *) echo "Usage: $0 start|stop|restart" ;; esac exit 0 或者,也可以在/etc/xinetd.d目录中创建nrpe文件,使其成为一个基于非独立守护进程的服务,文件内容如下: service nrpe { flags = REUSE socket_type = stream wait = no user = nagios group = nagios server = /usr/local/nagios/bin/nrpe server_args = -c /etc/nagios/nrpe.cfg -i log_on_failure += USERID disable = no } 此种情况下启动NRPE进程需要通过重启xinetd来实现。
至此一个监控框架和客户端已经搭建起来
7.安装PNP PNP4Nagios 是一个用于显示 Nagios 性能图表的插件,基于 RRDTool 日志分析,并以 Kohana(一个 PHP 开发框架)呈现在 Web 端,可以以 Action Url 的形式集成到 Nagios 中
wget https://sourceforge.net/projects/pnp4nagios/files/latest #下载 tar xf latest cd pnp4nagios-0.6.25/ ./configure --with-nagios-user=nagios --with-nagios-group=nagios --with-rrdtool=/usr/local/rrdtool/bin/rrdtool (如果单独编译安装的rrdtoool,则使用--with-rrdtool=/usr/local/rrdtool/bin/rrdtool这样的形式) #我这里是用yum安装的所已不许要指定 make all make install make install-webconf make install-config make install-init (使用这条命令替换所有的make命令(不包括make all), make fullinstall)
修改apache配置,默认是将pnp4nagios的web配置安装在/etc/httpd/conf.d/下,如果你是通过源码安装的,则需要将配置文件拷贝到相关的目录下或者配置文件中(如果你是源码编译httpd 需要复制配置文件到相应的位置我这里是yum安装的)
配置pnp4nagios
pnp4nagios有三种模式,相关官方文档:http://docs.pnp4nagios.org/pnp-0.6/modes
简单点理解,第一种Synchronous Mode和后两种模式相比,更简单,更容易配置,且带来的额外负载更低,但是监控间隔最低是5分钟。
而后两种可以时时监控数据,监控的时间间隔根据官方文档记录是10秒,当然也会带来额外的负载。
配置方法分别如下
Synchronous Mode: (我使用的是这种方式)
vi /usr/local/nagios/etc/nagios.cfg process_performance_data=1 enable_environment_macros=1 service_perfdata_command=process-service-perfdata host_perfdata_command=process-host-perfdata vi /usr/local/nagios/etc/objects/commands.cfg define command { command_name process-service-perfdata command_line /usr/local/pnp4nagios/libexec/process_perfdata.pl } define command { command_name process-host-perfdata command_line /usr/local/pnp4nagios/libexec/process_perfdata.pl -d HOSTPERFDATA }
Bulk Mode:
vi /usr/local/nagios/etc/nagios.cfg process_performance_data=1 service_perfdata_file=/usr/local/pnp4nagios/var/service-perfdata service_perfdata_file_template=DATATYPE::SERVICEPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tSERVICEDESC::$SERVICEDESC$\tSERVICEPERFDATA::$SERVICEPERFDATA$\tSERVICECHECKCOMMAND::$SERVICECHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$\tSERVICESTATE::$SERVICESTATE$\tSERVICESTATETYPE::$SERVICESTATETYPE$ service_perfdata_file_mode=a service_perfdata_file_processing_interval=15 service_perfdata_file_processing_command=process-service-perfdata-file host_perfdata_file=/usr/local/pnp4nagios/var/host-perfdata host_perfdata_file_template=DATATYPE::HOSTPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tHOSTPERFDATA::$HOSTPERFDATA$\tHOSTCHECKCOMMAND::$HOSTCHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$ host_perfdata_file_mode=a host_perfdata_file_processing_interval=15 host_perfdata_file_processing_command=process-host-perfdata-file vi /usr/local/nagios/etc/command.cfg define command{ command_name process-service-perfdata-file command_line /usr/local/pnp4nagios/libexec/process_perfdata.pl --bulk=/usr/local/pnp4nagios/var/service-perfdata } define command{ command_name process-host-perfdata-file command_line /usr/local/pnp4nagios/libexec/process_perfdata.pl --bulk=/usr/local/pnp4nagios/var/host-perfdata }
由于一次处理的性能数据比较多,有可能超时,可以更改etc/process_perfdata.cfg里的timeout时间。
Bulk Mode with NPCD:
更改方法同bulk mode,只有定义command部分不同:
vi /usr/local/nagios/etc/command.cfg define command{ command_name process-service-perfdata-file command_line /bin/mv /usr/local/pnp4nagios/var/service-perfdata /usr/local/pnp4nagios/var/spool/service-perfdata.$TIMET$ } define command{ command_name process-host-perfdata-file command_line /bin/mv /usr/local/pnp4nagios/var/host-perfdata /usr/local/pnp4nagios/var/spool/host-perfdata.$TIMET$ } /usr/local/pnp4nagios/bin/npcd -d -f /usr/local/pnp4nagios/etc/npcd.cfg (确保npcd.cfg中设置了正确的spool目录)
由于一次处理的性能数据比较多,有可能超时,可以更改etc/process_perfdata.cfg里的timeout时间。
修改模板配置
在templates.cfg文件最后添加如下内容:
cd /usr/local/nagios/etc/objects/ vi templates.cfg define host { name host-pnp action_url /pnp4nagios/graph?host=$HOSTNAME$&srv=_HOST_ register 0 } define service { name srv-pnp action_url /pnp4nagios/graph?host=$HOSTNAME$&srv=$SERVICEDESC$ register 0 }
修改主机配置
再定义主机和服务时,添加上use行,来使用模板中定义的主机(host-pnp)和服务(srv-pnp):
define host{ use linux-server,host-pnp ; Name of host template to use ; This host definition will inherit all variables that are defined ; in (or inherited by) the linux-server host template definition. host_name linuxhost alias my linux host address 192.168.0.156 } ...以此类推 define service{ use generic-service,srv-pnp ; Name of service template to use host_name linuxhost service_description CHECK SWAP check_command check_nrpe!check_swap } ...以此类推
重启nagios,可以进入监控页面看效果
检查pnp4nagios安装
第一次访问http://ip/php4nagios
将会执行一个必要部分的检查。
看到全部Pass基本就ok了,然后重命名或者删除install.php。即会出现一个error页面,提示未找到perfdata下的_HOST_.xml文件,稍等片刻,即可生成文件,并显示监控图像。
mv install.php install.php.bak
如果有错检查看你安装如下php组件没
[root@www share]# rpm -qa |grep php* perl-XML-Grove-0.46alpha-40.el6.noarch plymouth-graphics-libs-0.8.3-27.el6.centos.1.x86_64 php-cli-5.3.3-40.el6_6.x86_64 xorg-x11-drv-elographics-1.4.1-3.el6.x86_64 php-common-5.3.3-40.el6_6.x86_64 php-mysql-5.3.3-40.el6_6.x86_64 redhat-lsb-graphics-4.0-7.el6.centos.x86_64 php-pdo-5.3.3-40.el6_6.x86_64 rrdtool-php-1.3.8-7.el6.x86_64 #主要是这 php-gd-5.3.3-40.el6_6.x86_64 php-5.3.3-40.el6_6.x86_64 #这个 phonon-backend-gstreamer-4.6.2-28.el6_5.x86_64 php-fpm-5.3.3-40.el6_6.x86_64
6.2、检查nagios图表
点击service页面,可看到localhost和PING服务旁边有个图标的按钮,点击会弹出一个监控页面,如下图所示
点击绿色OK前面那个走势图就可以看到绘图
排错verify_pnp_config
在运行pnp4nagios之前,我们最好运行一下scritps下的verify_pnp_config.pl来检查一下PNP的配置。
如果看到“PHP magic_quotes_gpc is deprecated”,那么到php.ini文件中找到相应的设置并off掉。
调试日志
如果想产生调试日志,则更改process_perfdata.cfg中的
LOG_LEVEL=2,
一般情况下设置为0即可。
至此一个nagios报警加pnp绘图的框架已经搭建起来
参考文献:http://www.ttlsa.com/nagios/7-nagios-install-pnp4nagios/