Nagios官网:https://www.nagios.org/,以前使用的最新版本的nagios,发现一大堆问题,后面又从新使用以前的版本。这里讲解的也是比较成熟的版本,且有中文插件包,方便朋友发现解决问题。咱们使用的nagios版本为:nagios-3.2.3.tar.gz。主要使用的软件有:nagios-3.2.3.tar.gz , nagios-plugins-2.0.3.tar.gz pnp-0.4.13.tar.gz,nagios-cn-3.2.3.tar.bz2 ,nrpe-2.12.tar.gz ,rrdtool-1.4.5.tar.gz。目前就是须要这么多,安装过程当中会提示咱们须要安装一些依赖包,到时候在安装吧。php
1.建立nagios用户和组linux
# useradd nagiosios
# mkdir -v /usr/local/nagiosapache
# chown -R nagios:nagios /usr/local/nagios/centos
2.解压、编译、安装(前面已经写得很是详细,这里我这给出操做步骤和命令,不解释了)浏览器
# cd /usr/local/lampsoft/nagiostomcat
# tar xvf nagios-3.2.3.tar.gz 安全
# cd nagios-3.2.3bash
# ./configure --prefix=/usr/local/nagios/服务器
# make all
#make install
#make install-init
#make install-commandmode
# make install-config
3.安装nagios插件,插件版本和nagios版本不必定要相同的,能够去官网下载最新插件,也是能用的。咱们使用nagios-plugins-2.0.3.tar.gz
# tar xvf nagios-plugins-2.0.3.tar.gz
# cd nagios-plugins-2.0.3
# ./configure --prefix=/usr/local/nagios/
# make && make install
4.安装nagios中文插件
# tar xvf nagios-cn-3.2.3.tar.bz2
# cd nagios-cn-3.2.3
#./configure
# make all
# make install
# make install-init
# make install-commandmode
# make install-config
5.修改apache的配置文件,让其能够支持nagios,也是为了保证nagios的安全。要修改两处:
第一处:修改apache运行用户,原来是deamon,修改成nagios,即:
User nagios
Group nagios
第二处:在配置文件末尾,增长nagios安全验证机制。
ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin"
<Directory "/usr/local/nagios/sbin">
AuthType Basic
Options ExecCGI
AllowOverride None
Order allow,deny
Allow from all
AuthName "Nagios Access"
AuthUserFile /usr/local/nagios/etc/.htpasswd
Require valid-user
</Directory>
Alias /nagios "/usr/local/nagios/share"
<Directory "/usr/local/nagios/share">
AuthType Basic
Options None
AllowOverride None
Order allow,deny
Allow from all
AuthName "nagios Access"
AuthUserFile /usr/local/nagios/etc/.htpasswd
Require valid-user
</Directory>
6.建立Apache验证用户
# /usr/local/apache/bin/htpasswd -c /usr/local/nagios/etc/.htpasswd nagios
而后输入两次密码便可。
注意:第一次建立密码文件须要添加-c参数,之后都不须要再加。删除的话,使用-D参数,指定密码配置文件,指定用户名便可删除对应用户。另外,建立的时候可使用-m参数,指定MD5加密。如今就能够重启apache,让配置文件生效了。可是重启以前,咱们最好作一次apache配置文件的语法检测,即apachectl -t看下是否提示syntax OK。而后再进行重启。
7.重启apache,启动nagios
8.经过浏览器进行访问IP/nagios,会提示咱们输入访问页面的用户名密码,输入之后便可进行查看,以下图:
注意!当咱们试图点击nagios左侧的菜单时,发现老是提示咱们下载文件,这是由于没有打开apache的cgj模块。修改apache配置文件,找到LoadModule actions_module modules/mod_actions.so 去掉前面的注释,另外若是你的apache是prefork模式,则将
<IfModule mpm_prefork_module>
#LoadModule cgi_module modules/mod_cgi.so
</IfModule>
前面的#去掉,若是不是呢,则把
<IfModule !mpm_prefork_module>
#LoadModule cgid_module modules/mod_cgid.so
</IfModule>
前面的#去掉便可。
那怎么看apache工做在什么模块下呢?使用httpd -M查看,看下mpm后面接的是什么,如:个人是 mpm_event_module (shared),那么个人是工做在event模式下。apache在2.4之后,默认都是工做在event模块下,由于这个性能比prefork要好不少。
首先,看下nagios有哪些目录:bin、etc、include、libexec、sbin、share、var,其中bin主要是nagios的一些可执行文件,sbin则存放nagios的cgi脚本,include则是nagios的头文件,libexec存放nagios监控插件,share存放一些网页文件,动态生成文件等。var则存放nagios的锁文件,日志文件等等。
其次,咱们说下nagios监控的执行过程。首先在nagios.cfg中定义配置文件路径,其次添加配置文件,而后对配置文件进行调用。这些配置文件包括时间配置,命令配置,主机配置,服务配置等。也就是说,nagios的监控系统,须要注意四点:
a.定义监控哪些主机、主机组、服务、服务组
b.定义这个监控要用什么命令实现
c.定义监控的时间段
d.定义主机或者服务出现问题时要通知的联系人和联系人组
接下来就开始真正进行服务监控的实施。
我们得有个目标吧,先看下下面这张图,就先作成这样吧
1.修改nagios的主配置文件——nagios.cfg
第一处:添加以下三行代码:
cfg_file=/usr/local/nagios/etc/objects/services.cfg
cfg_file=/usr/local/nagios/etc/objects/hosts.cfg
cfg_file=/usr/local/nagios/etc/objects/contactgroups.cfg
第二处:改变检查时间间隔
command_check_interval=10s 通常设置10s就能够了,也能够根据实际状况进行设置。
好了,先保存退出。
注意:最好注释掉cfg_file=/usr/local/nagios/etc/objects/localhost.cfg这行代码,否则后面咱们测试的时候,会发现莫名其妙出现不少主机和服务检测。
2.修改 CGI的配置文件——cgi.cfg
首先确认一下,use_authentication=1是否为1,为1表示启用cgi脚本调用验证,最好要启用,这样会安全不少。这里须要添加一下可以调用cgi脚本权限的用户
第一处:启用默认用户名,将#去掉,将guest改成nagios,即:
default_user_name=nagios
第二处:则是给予nagios用户一些调用其余脚本的权限。主要修改的代码行以下,将nagios用户添加进去,注意多用户之间用逗号隔开就能够了。
authorized_for_system_information=nagiosadmin,nagios
authorized_for_configuration_information=nagiosadmin,nagios
authorized_for_system_commands=nagiosadmin,nagios
authorized_for_all_services=nagiosadmin,nagios
authorized_for_all_hosts=nagiosadmin,nagios
authorized_for_all_service_commands=nagiosadmin,nagios
authorized_for_all_host_commands=nagiosadmin,nagios
就是这几个,保存退出吧。
3.查看一下时间模板配置文件——timeperiods.cfg
生成环境常用的是24x7的这个,固然你也能够定义本身的时间模板:
define timeperiod{
timeperiod_name 24x7
alias 24 Hours A Day, 7 Days A Week
sunday 00:00-24:00
monday 00:00-24:00
tuesday 00:00-24:00
wednesday 00:00-24:00
thursday 00:00-24:00
friday 00:00-24:00
saturday 00:00-24:00
}
之后咱们调用监控时间就是用24x7这个名字了,因此你要是定义本身所须要的时间段,这个名字要记好,否则是没法调用的。
时间模板暂时不用修改,那接下来咱们要定义联系人模板了。
4.联系人模板是存在的,就是contacts.cfg,可是里面没有咱们所需的信息,因此咱们不妨模仿着本身定义一个,能够在最后添加以下信息
############ Add for Nagios Monitor ##############################################
define contact{
contact_name J_Chen
alias J_Chen_admin
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r
host_notification_options d,u,r
service_notification_commands notify-service-by-email
host_notification_commands notify-host-by-email
email 315688082@qq.com
}
这样我就定义了一个联系人J_Chen,要是有报警信息就会发送到315688082@qq.com这个邮箱。
下面解释一下各参数的意义:
contact_name 联系人姓名,之后定义服务出现问题联系人的时候,就能够直接调用这个名字了。alias是别名,没有太大意义,更多的用于方便操做。
service_notification_period 服务监控时间段,后面的24x7就是以前timeperiods.cfg里面定义的。
host_notification_period 主机监控时间段,也是24x7,成天不间断监控
service_notification_options 服务监控报警选项,即当出现这四中状况时,发邮件通知联系人。即:w-报警(warning),u-未知(unknown),c-严重(critical),或者r-从异常恢复正常(recovery)
host_notification_options 和上面相似,主机监控报警选项。d-宕机(down),u-不可达(unreachable),r-从故障恢复正常(recovery)。
service_notification_commands 服务出现情况通知命令使用notify-service-by-email(这天命令实在commands.cfg中定义的)
host_notification_commands 和上面的很是相似,不解释了
email 即联系人邮件
若是咱们有多个管理员,能够定义多个联系人,而后将这些联系人放到一个组中,而后在监控到故障的时候,直接通知这些组。假如我再建立一个用户tomcat,基本上上面的用户定义同样,改下名字,联系方式就好了。以下:
define contact{
contact_name Tomcat
alias Tomcat_admin
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r
host_notification_options d,u,r
service_notification_commands notify-service-by-email
host_notification_commands notify-host-by-email
email tomcat@localhost
}
5.定义联系人组Superman(我给联系人组起的名字),联系人组这个文件是不存在的,咱们手动建立一下。
# vi /usr/local/nagios/etc/objects/contactgroups.cfg
添加以下内容
define contactgroup{
contactgroup_name Superman
alias Super_admin
members J_Chen,Tomcat
(多个联系人之间使用逗号分开就能够了)
}
6.建立监控主机文件hosts.cfg
vi /usr/local/nagios/etc/objects/hosts.cfg (定义两台主机:一个是nagios服务,另外一个监控内部一台测试服务器,地址192.168.1.51)
define host{
host_name nagios-server
alias nagios server
address 192.168.1.214
check_command check-host-alive
max_check_attempts 5
check_period 24x7
contact_groups Superman
notification_interval 300
notification_period 24x7
notification_options d,u,r
}
define host{
host_name 51-server
alias 51 server
address 192.168.1.51
check_command check-host-alive
max_check_attempts 5
check_period 24x7
contact_groups Superman
notification_interval 300
notification_period 24x7
notification_options d,u,r
}
保存退出。
注意:check-host-alive这个命令是在command.cfg中定义过的。
7.如今定义监控服务services.cfg(先简单定义了两个服务)以下:
# vi /usr/local/nagios/etc/objects/services.cfg
define service{
host_name nagios-server
service_description check-host-alive
check_command check-host-alive
max_check_attempts 5
normal_check_interval 3
retry_check_interval 2
check_period 24x7
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
contact_groups Superman
}
define service{
host_name 51-server
service_description check-host-alive
check_command check-host-alive
max_check_attempts 5
normal_check_interval 3
retry_check_interval 2
check_period 24x7
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
contact_groups Superman
}
注意:这里的host_name就是咱们以前在hosts.cfg文件中定义的。
简单的配置到此就结束了,咱们先来看一下能不能正常启动。nagios给咱们提供了检测脚本,执行以下命令:
# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
很开心,配置彻底正确,以下:
咱们重启一下nagios试试看。
[root@centos1 objects]# service nagios restart
Running configuration check...done.
Stopping nagios: .done.
Starting nagios: done.
启动完成,访问一下试试看。
8.使用浏览器访问一下
点击左侧的主机、服务均可以正常显示,正是以前定的。
好了,nagios最简单的配置已经完成了。可是有没有发现咱们检测的只是本机的服务还有另一台主机的存活检测,若是仅是这样的话,我直接使用一条ping命令就能够完成。固然了,nagios的强大功能才刚刚开始,它不但能够检测本身的负载量,磁盘使用率,当前登陆用户数等等,也能够检测别的主机。简直比木马还木马,下次继续学习nagios的高级监控功能。
今天主要总结一下Nagios监控体系的搭建,上节只是把Nagios最基本的框架搭建起来,可是这在生成环境中是远远不足的。好比我想监控非本机服务器的磁盘空闲率,CPU利用率,当前登陆人数等等,这些都是不能直接获取的,好在Nagios早已经有了相关的辅助工具来用于远程主机的监控,其监控原理图以下(图片是我从大神做品上摘取的):
这样就清晰多了,其实Nagios监控远程主机主要是依靠这个附加组件——NRPE。
NRPE主要由两部分组成:check_nrpe、NRPE ,前者位于监控主机上,后者位于被监控主机上。远程监控的原理大概就是这样:当Nagios须要监控某个远程主机的服务或者资源时,Nagios会先运行check_nrpe这个插件,告诉它我须要检测什么。check_nrpe取得指令后就立刻链接到远程的NRPE上,使用的方式是SSL,远程NRPE在收到check_nrpe的调取指令后,就会利用nagios插件对服务进行监控(这就是为何被监控主机上也要安装nagios插件的缘由),插件将取得的状态值返回给NRPE,NRPE返回给check_nrpe,以后check_nrpe就将这一状态信息讲给nagios去处理,继而完成了Nagios对远程主机的监控。这样一来咱们能够作个比较形象的比喻,Nagios至关于皇上,check_nrpe则是宰相,负责为皇上处理收集平常事务,那么NRPE则就至关于远赴其余国家的节度使,去完成丞相交代下来的命令,实际上是皇上发出的,只不过是经过丞相转述出去的。
熟悉了大概原理以后,就须要进行实践了。假设我须要监控内网51服务器上面的服务,须要在192.168.1.51上面执行如下操做:
1.增长nagios用户
# useradd nagios
# passwd nagios
2.安装nagios插件
# tar xvf nagios-plugins-2.0.3.tar.gz
# cd nagios-plugins-2.0.3
# ./configure
# make
# make install
这步完成以后就会在/usr/local/nagios下生成两个目录libexec和share
3.修改目录权限
# chown -R nagios:nagios /usr/local/nagios
4.安装nrpe
# tar xvf nrpe-2.12.tar.gz
# cd nrpe-2.12
# ./configure
编译完成后能够看到NRPE的一些信息
General Options:
-------------------------
NRPE port: 5666
NRPE user: nagios
NRPE group: nagios
Nagios user: nagios
Nagios group: nagios
Review theoptions above for accuracy. If they lookokay,
type 'make all'to compile the NRPE daemon and client.
能够看到NRPE的端口是5666,下一步是make all
# make all
# make install-plugin (这步其实能够不须要,可是为了本地测试方便,咱们仍是建议安装)
#make install-daemon
#make install-daemon-config
如今查看一下nagios目录下面,会发现已经有四个目录文件了:bin,etc,share,libexec
5.根据官方文档,NRPE deamon是做为xinetd下的一个服务运行的,这就须要实现安装好xinetd,通常系统已经默认安装好了。没有安装的话使用yum安装便可。yum install xinetd -y,确保安装好之后,来安装xinetd脚本
# make install-xinetd而后编辑这个脚本,脚本位置能够从输出信息查看,通常会是/etc/xinetd.d/nrpe,编辑这个脚本
# vi /etc/xinetd.d/nrpe须要修改only_from行,后面能够接IP地址,也能够接IP地址段,使用空格间隔,表示从哪台主机上来的check_nrpe请求本机会做出相应。咱们在51上作的修改,固然是容许如今这台nagios监控主机了。即修改成:
only_from= 127.0.0.1 192.168.1.214
6.编辑/etc/services文件,增长NRPE服务
# vi /etc/services 增长一行代码
#Local services
nrpe 5666/tcp#nrpe
7.重启xinetd服务
#service xinetd restart
8.查看NRPE服务是否启动,还记得nrpe的端口号吗?5666
#netstat -nltp | grep 5666
tcp 0 0 0.0.0.0:5666 0.0.0.0:* LISTEN
已结启动成功了。
9.测试NRPE可否正常工做,如今本机上测试一下:有个很是简单的命令
# /usr/local/nagios/libexec/check_nrpe -H localhost
即check_nrpe可以解析出-H指定的主机上的nrpe版本信息,则证实本地之间是能够取得信息的,后面用一样的办法,测试可否取得远程主机的版本信息。
[nagios@Exp51 libexec]$ ./check_nrpe -H localhost
NRPE v2.12
--------是能够的。另外须要注意的是,本地防火墙须要将5666端口打开,是的外部监控主机能够访问。
10.如今说一下,如何实用check_nrpe来读取监控信息。相比较而言,check_nrpe可以接受的参数很少,以下:
Usage: check_nrpe -H <host> [-n] [-u] [-p <port>] [-t <timeout>] [-c <command>] [-a <arglist...>]
下面是对各个选项的解释,咱们主要使用到的其实就是-H和-c参数:
Options:
-n = Do no use SSL
-u = Make socket timeouts return an UNKNOWN state instead of CRITICAL
<host> = The address of the host running the NRPE daemon
[port] = The port on which the daemon is running (default=5666)
[timeout] = Number of seconds before connection times out (default=10)
[command] = The name of the command that the remote daemon should run
[arglist] = Optional arguments that should be passed to the command. Multiple
arguments should be separated by a space. If provided, this must be
the last option supplied on the command line.
注意:-c只能解释命令名称,这个命令必定是在nrpe.cfg中定义过的。这个至关于监控主机上的commands.cfg文件,只有它里面定义过的命令才是合法的,固然这里面的命令基本上都是基于插件去定义的,nrpe.cfg也不例外。(nrpe.cfg文件位于/usr/local/nagios/etc目录下)如今来查看一下nrpe.cfg默认定义了哪些命令(有些是我本身定义的):
command[check_users]=/usr/local/nagios/libexec/check_users -w 4 -c 10
command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20
command[check_hda1]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/hda1
command[check_zombie_procs]=/usr/local/nagios/libexec/check_procs -w 5 -c 10 -s Z
command[check_total_procs]=/usr/local/nagios/libexec/check_procs -w 200 -c 250
command[check_disk]=/usr/local/nagios/libexec/check_disk -w 20 -c 10 -p /
command[check_swap]=/usr/local/nagios/libexec/check_disk -w 40 -c 20
command[check_Internet]=/usr/local/nagios/libexec/check_ping -H www.baidu.com -w 3000.0,80% -c 5000.0,100% -p 5
其中红色字体就是咱们定义的命令,也是check_nrpe -c后惟一能接的参数,咱们如今就能够先使用check_nrpe -H localhost -c [command]来检测一下,正常之后就能够在监控主机上进行测试了。
11.如今在nagios监控主机上安装check_nrpe插件
# tar xvf nrpe-2.12.tar.gz
# cd nrpe-2.12
# ./configure
# make all
# make install-plugin (监控主机上只要安装这个就好了)
如今就能够测试和51主机是否可以正常通讯了
# /usr/local/nagios/libexec//check_nrpe -H 192.168.1.51
NRPE v2.12
测试经过。如今就能够在监控主机上对check_nrpe命令进行定义了
12.增长commands.cfg上对于check_nrpe的命令定义
define command{
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
注意:$HOSTADDRESS$会默认为你定义的服务或者主机的IP地址,在service或者host中定义时,-H IP 就看省略掉了
如今就能够在监控主机上定义要监控的远程主机的某些服务资源了。以下:咱们定义了监控51主机上登陆人数监控:
define service{
use services-pnp
host_name 51_server
service_description check-users
check_command check_nrpe!check_users
max_check_attempts 5
normal_check_interval 3
retry_check_interval 2
check_period 24x7
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
contact_groups superman
}
注意:check_nrpe后面接的check_users就是在远程主机nrpe.cfg上定义过的。咱们依次在将nrpe.cfg中定义的其余的命令加进来,完成后重启一下nagios,就会看到以下图所示的状态。
等待一会启动好了就能够了,五分钟以内应该都是能够正常获取监控信息的,个人已经启动好了,以下:
可是咱们如今只能看到实时的监控状态,如何让nagios将一段时间的状态收集起来造成一个统计图表呢?看下下面这台主机上(192.168.1.215,个人另外一台虚拟机服务器)的监控图,以下:
其实安装好之后是没有小太阳标识的,这是我安装了一个绘图抓图插件,能够看到一段时间主机或者服务的监控状态绘图。咱们点开小太阳标识,出现以下图表:
下节来总结一下nagios的图形化监控,也很简单。
这里咱们引入一个新的开源软件包——PNP,它基于PHP和PERL,PNP利用rrdtool工具将采集的数据绘制成相关的图表,而后显示出主机或者服务在一段时间内的运行状况。PNP官网:http://www.pnp4nagios.org,目前官网最新版本是pnp4nagios-0.6.25.tar.gz。安装PNP须要提早配置好安装环境,PNP须要的环境支撑有:
1.整合后的apache和PHP环境,而且可以支撑GD/zlib/jpeg等图片的解析与展示,这些咱们在编译PHP的时候已经考虑进来的,因此这点事知足的。
2.安装rrdtool工具(这是一个图标生成工具,pnp就是利用它来生成相关监控图表的)
3.安装perl
如今就先来安装rrdtool(这里我使用rrdtool-1.4.5.tar.gz,一直用的这个,原本想用新的试试,结果官网一直打不开,官方给出的最新下载地址(http://oss.oetiker.ch/rrdtool/pub/rrdtool.tar.gz)):
# tar xvf rrdtool-1.4.5.tar.gz
# cd rrdtool-1.4.5
# ./configure --prefix=/usr/local/rrdtool
报错:
configure: WARNING:
----------------------------------------------------------------------------
* I could not find a working copy of pangocairo. Check config.log for hints on why
this is the case. Maybe you need to set LDFLAGS and CPPFLAGS appropriately
so that compiler and the linker can find libpangocairo-1.0 and its header files. If
you have not installed pangocairo, you can get it either from its original home on
http://ftp.gnome.org/pub/GNOME/sources/pango/1.17
You can find also find an archive copy on
http://oss.oetiker.ch/rrdtool/pub/libs
The last tested version of pangocairo is 1.17.
LIBS=-lm
LDFLAGS=
CPPFLAGS=
----------------------------------------------------------------------------
checking for xmlParseFile in -lxml2... yes
checking libxml/parser.h usability... yes
checking libxml/parser.h presence... yes
checking for libxml/parser.h... yes
configure: error: Please fix the library issues listed above and try again.
经过对编译出来的信息分析,包括一些警告信息,主要是由于缺乏相应的库文件,解决办法:
# yum install pango* -y
再次编译执行:经过了,以下:
编译经过了,如今开始安装
# make
编译有报错:
Can't locate ExtUtils/MakeMaker.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at Makefile.PL line 1.
BEGIN failed--compilation aborted at Makefile.PL line 1.
make[3]: *** [perl-piped/Makefile] Error 2
make[3]: Leaving directory `/usr/local/lampsoft/nagios/rrdtool-1.4.5/bindings'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/usr/local/lampsoft/nagios/rrdtool-1.4.5/bindings'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/usr/local/lampsoft/nagios/rrdtool-1.4.5'
make: *** [all] Error 2
解决办法:yum -y install perl-ExtUtils-MakeMaker
而后从新make,提示以下:
# make install
安装完成以后就能够安装pnp了。
+++++++++++++++++++++++++++++++++++++++++++++++ 分隔线 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
安装pnp,这里我使用的版本是pnp-0.4.13,
# tar xvf pnp-0.4.13.tar.gz
# cd pnp-0.4.13
# ./configure --with-nagios-user=nagios --with-nagios-group=nagios --with-rrdtool=/usr/local/rrdtool/bin/rrdtool --with-perfdata-dir=/usr/local/nagios/share/perfdata
有个警告信息,提示咱们找不到RRDs Perl的模块,这个其实咱们已经安装好了,只是系统没有找到,configure有个选项是--with-perl_lib_path=能够用来指定模块路径。
*** Configuration summary for pnp 0.4.13 02-19-2009 ***
General Options:
------------------------- -------------------
Nagios user/group: nagios nagios
Install directory: /usr/local/nagios
HTML Dir: /usr/local/nagios/share/pnp
Config Dir: /usr/local/nagios/etc/pnp
Path to rrdtool: /usr/local/rrdtool/bin/rrdtool (Version 1.4.5)
RRDs Perl Modules: *** NOT FOUND ***
RRD Files stored in: /usr/local/nagios/share/perfdata
process_perfdata.pl Logfile: /usr/local/nagios/var/perfdata.log
Perfdata files (NPCD) stored in: /usr/local/nagios/var/spool/perfdata/
Review the options above for accuracy. If they look okay,
type 'make all' to compile.
WARNING: The RRDs Perl Modules are not found on your System
Using RRDs will speedup things in larger Installtions.
----------------------------------------------------------------------------------------------
咱们指定perl的模块路径再从新编译一下:
# ./configure --with-nagios-user=nagios --with-nagios-group=nagios --with-rrdtool=/usr/local/rrdtool/bin/rrdtool --with-perfdata-dir=/usr/local/nagios/share/perfdata --with-perl_lib_path=/usr/local/rrdtool/lib/perl/5.10.1/x86_64-linux-thread-multi/
# make all
# make install
# make install-config
# make install-init
如今开始配置PNP
1.建立默认配置文件
# cd /usr/local/nagios/etc/pnp/
# cp process_perfdata.cfg-sample process_perfdata.cfg
# cp npcd.cfg-sample npcd.cfg
# cp rra.cfg-sample rra.cfg
# chown -R nagios:nagios *
2.修改process_perfdata.cfg文件
# vi /usr/local/nagios/etc/pnp/process_perfdata.cfg
将LOG_LEVEL = 0改为LOG_LEVEL = 2,即调成debug模式。
3.修改nagios配置文件
增长小太阳标示:
修改templates.cfg,增长一个定义PNP的hosts和services
# vi /usr/local/nagios/etc/objects/templates.cfg
define host {
name hosts-pnp
register 0
action_url /nagios/pnp/index.php?host=$HOSTNAME$
process_perf_data 1
}
define service {
name services-pnp
register 0
action_url /nagios/pnp/index.php?host=$HOSTNAME$&srv=$SERVICEDESC$
process_perf_data 1
}
4.修改nagios的主配置文件,nagios.cfg
去掉host_perfdata_command=process-host-perfdata前面的注释,即保证:
# vi /usr/local/nagios/etc/nagios.cfg
process_performance_data=1
host_perfdata_command=process-host-perfdata
service_perfdata_command=process-service-perfdata
保存退出。
5.修改commands.cfg文件,定义process-host-perfdata命令(注意process-host-perfdata、process-service-perfdata在commands.cfg中原来是定义好的,须要先注释掉)
# vi /usr/local/nagios/etc/objects/commands.cfg
define command{
command_name process-host-perfdata
command_line /usr/local/nagios/libexec/process_perfdata.pl
}
define command{
command_name process-service-perfdata
command_line /usr/local/nagios/libexec/process_perfdata.pl
}
好了之后保存退出。
6.修改hosts.cfg和services.cfg文件,给每一个主机和服务增长小太阳标识。只须要使用use命令继承一下便可。以下:
# vi /usr/local/nagios/etc/objects/hosts.cfg
而后给每一个须要统计图表信息的service加上services-pnp继承
修改好之后保存退出。
如今配置就算完成了,在从新启动nagios服务以前,咱们先检测一下有没错误:
# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
一切正常,如今可从新启动了。
小太阳图标已经出现了,可是能不能正常调用呢,咱们点击一下小太阳图标,发现是有故障的。以下:
今天看了一下日志,发现都没有关于这个错误的信息。图形不能出来,监控正常,也就是说要么是Nagios和pnp之间出了问题,要门就是PNP以及rrdtool等出了问题。先来检查一下:
# /usr/local/nagios/libexec/process_perfdata.pl
提示:BEGIN failed--compilation aborted at ./process_perfdata.pl
这是提示须要安装一个perl-Time-HiRes扩展包,来支持二者之间的交互,使用yum来安装
#yum install perl-Time-HiRes
而后再从新测试一下:
# /usr/local/nagios/libexec/process_perfdata.pl
提示:dont try this as root
这就没有什么问题了。可是发现图像依然出不来,仍是跟以前同样。因而从新编译安装一下pnp,重启nagios搞定。
另外须要注意的一点,咱们安装好之后,可能nagios界面全是乱码,这个颇有多是apache的cgj模块没有启动。若是启动以后仍是有乱码,则根据报错信息,若是提示是timezone设置不对,则能够在php的配置文件中指定一下时间域。通常只要修改成:data.timezone = PRC就行了。
还有,若是其余正常,可是图像不显示,都是方块同样乱码,这是由于缺乏rrdtool-perl组件,使用yum来安装便可。
如今终于能够正常显示监控图片了,以下:
原本LAMP+Nagios架构已经写完,可是以为仍是有些内容没有写完整,内心一直纠结啊。确实,关于nagios还有最重要的一点,手动开发插件,这样对于之后的生产使用会是事半功倍的。因此我以为仍是要把插件开发的相关内容好好研究一下,可能不能精通,可是至少也要入门。最近今天比较忙,因此也就没来得及补充。这两天在学cacti进阶课程,本想先把cacti总结整理之后再写Nagios,可是不想文章标题中坚被打断,强烈的完美主义。因此,先留个标题,我把cacti总结好之后再来写这个。
这里使用了“写代码的小孩——nagios插件开发demo版”的开发脚本为示例
STATE_OK=0、STATE_WARNING=一、STATE_CRITICAL=二、STATE_UNKNOWN=3这是nagios能识别的四种状态码。
每种状态定义了显示在监控页面的不一样颜色,以及是否发送警告信息等。所以Nagios的插件,必需要首先定义这四
种状态,且在脚本进行判断中,必须使用exit返回相应状态值。而在exit上面的这句通常是用来显示当前状态信息,
不能太大,默认是4K。
好比我下面就是使用这个脚原本进行本地的链接测试,以下图:
Nagios插件开发的语法其实就是这么简单,难点仍是在于脚本的开发上,如何能实现脚本的健壮性、稳定性等特色,就是长期积累的结果了。
另外还有一点须要注意:
脚本在开发完成以后,可能有些是须要root权限才能正常执行的,而咱们又不想nagios的执行用户拥有root权限,所以可使用sudo命令,固然这里必须使用sudo的 免密码特征,并且只给固定的执行某条命令(例如:smartctl)的权限,即只有在执行该条命令的时候是以root身份执行的,且不须要输入执行用户密码来实现用户切换,须要在visudo中修改一行,以下:
nagios ALL=(ALL) NOPASSWD:/usr/sbin/smartctl -H /dev/sda (这比网上的好多教程,直接把第三段改为ALL安全多了)
这样就保证了执行该条语句的时候,只要这样写就能够了:$ sudo smartctl -H /dev/sda
若是执行其余命令,则会提示:Sorry, user nagios is not allowed to execute '/usr/sbin/smartctl -H /dev/sdb' as root on centos3.