文档章节

Nagios监控+PNP4nagios绘图

雁南飞丶
 雁南飞丶
发布于 2015/04/23 11:23
字数 4253
阅读 101
收藏 1

一、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/



© 著作权归作者所有

雁南飞丶
粉丝 37
博文 176
码字总数 228466
作品 0
西安
运维
私信 提问
nagios+plugin+pnp4nagios+rrdtool实现图形化监控

本文部分内容来自:http://www.ilanni.com/和http://blog.sina.com.cn/s/blog_4bf738fd0101mut6.html 欢迎转载。 一、安装前的准备 1.1安装包的下载 服务端Nagios:nagios-4.1.1.tar.gz htt...

abiu
2018/06/26
0
0
nagios+pnp4nagios监控

pnp4nagios 一、安装pnp4nagios ① 预安装:rrdtool和perl-Time* yum install rrdtool perl-Time* -y ② tar -axvf pnp4nagios-0.6.4.tar.gz –C /usr/local/src/ ③ cd /usr/local/src/ ④ ......

perofu
2012/11/06
0
2
为 Nagios 安装性能图插件 PNP4Nagios

PNP4Nagios 是一个用于显示 Nagios 性能图表的插件,基于 RRDTool 日志分析,并以 Kohana(一个 PHP 开发框架)呈现在 Web 端,可以以 Action Url 的形式集成到 Nagios 中。 项目首页:http:...

红薯
2014/03/12
1K
0
pnp4nagios在icinga2上安装注意事项

pnp4nagios在icinga2上安装注意事项 1、需要先安装pnp4nagios icinga-web-module-pnp yum install pnp4nagios icinga-web-module-pnp 2、现在pnp 扩展到服务器指定目录 pnp地址:https://exc...

tiaozhan1000
2018/07/02
0
0
Centos 6.2 nagios监控服务器集群 系列之PNP集成篇

本来这个应该是最后写的,但是今天刚配置好了,所以今天先写这个了....至于监控windows和linux的部分,稍后.... 这个pnp可算是把我折磨的不轻啊..... 总算,从网上的教程+回复中终于搞定了....

枫爱若雪
2013/05/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

分布式Session的实现方式

JWT Token 使用 JWT Token 储存用户身份,然后再从数据库或者 cache 中获取其他的信息。这样无论请求分配到哪个服务器都无所谓。 Tomcat + Redis 在 tomcat 的配置文件中配置: <Valve class...

禅明
9分钟前
0
0
Android饼图 PieChart

PieChart 饼图,android 图表。会根据定义PieChartView的大小自动居中,所以如果要调整位置,只需要在xml更改PieChartView位置大小即可。 https://github.com/ccMagic/PieChart 1、先看一下效...

ccMagic
13分钟前
1
0
说说我当初是如何学Linux的

今天我就说说我当初是如何从一名普通桌面维护工程师,通过学习和努力转成Linux运维工程师的,以及作为Linux运维工程师需要一些什么技能和知识,希望可以帮到一些对Linux有兴趣或者想往Linux...

Linux就该这么学
13分钟前
1
0
Tomcat启动异常Unable to register MBean [HikariDataSource (null)]:InstanceAlreadyExistsException

Unable to register MBean [HikariDataSource (null)] with key 'xxx'; nested exception is javax.management.InstanceAlreadyExistsException: com.zaxxer.hik ari:name=baseDataSource,ty......

sunranhou
19分钟前
1
0
qt从普通线程发信号到UI线程

加入从当前一个普通线程发送信号到ui,更新Ui只能使用Qt::BlockingQueuedConnection,用Qt::QueuedConnection会一会有用一会没用,并且会导致崩溃。 connect(this, &Task::startTask, this, ...

青黑
40分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部