2019独角兽企业重金招聘Python工程师标准>>>
七、Nagios监控软件搭建
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。目前就是需要这么多,安装过程中会提示我们需要安装一些依赖包,到时候在安装吧。
1.创建nagios用户和组
# useradd nagios
# mkdir -v /usr/local/nagios
# chown -R nagios:nagios /usr/local/nagios/
2.解压、编译、安装(前面已经写得非常详细,这里我这给出操作步骤和命令,不解释了)
# cd /usr/local/lampsoft/nagios
# tar xvf nagios-3.2.3.tar.gz
# cd nagios-3.2.3
# ./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"
AuthType Basic
Options ExecCGI
AllowOverride None
Order allow,deny
Allow from all
AuthName "Nagios Access"
AuthUserFile /usr/local/nagios/etc/.htpasswd
Require valid-user
Alias /nagios "/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
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模式,则将
#LoadModule cgi_module modules/mod_cgi.so
前面的#去掉,如果不是呢,则把
#LoadModule cgid_module modules/mod_cgid.so
前面的#去掉即可。
那怎么看apache工作在什么模块下呢?使用httpd -M查看,看下mpm后面接的是什么,如:我的是 mpm_event_module (shared),那么我的是工作在event模式下。apache在2.4以后,默认都是工作在event模块下,因为这个性能比prefork要好很多。
八、配置Nagios
首先,看下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 [email protected]
}
这样我就定义了一个联系人J_Chen,要是有报警信息就会发送到[email protected]这个邮箱。
下面解释一下各参数的意义:
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监控体系的搭建,上节只是把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
下面是对各个选项的解释,我们主要使用到的其实就是-H和-c参数:
Options:
-n = Do no use SSL
-u = Make socket timeouts return an UNKNOWN state instead of CRITICAL
[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的图形化监控,也很简单。
十、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来安装即可。
现在终于可以正常显示监控图片了,如下:
十一、Nagios插件的开发与整合
本来LAMP+Nagios架构已经写完,但是觉得还是有些内容没有写完整,心里一直纠结啊。确实,关于nagios还有最重要的一点,手动开发插件,这样对于以后的生产使用会是事半功倍的。所以我觉得还是要把插件开发的相关内容好好研究一下,可能不能精通,但是至少也要入门。最近今天比较忙,所以也就没来得及补充。这两天在学cacti进阶课程,本想先把cacti总结整理以后再写Nagios,但是不想文章标题中坚被打断,强烈的完美主义。所以,先留个标题,我把cacti总结好以后再来写这个。
这里使用了“写代码的小孩——nagios插件开发demo版”的开发脚本为示例
- #!/bin/bash
- STATE_OK=0
- STATE_WARNING=1
- STATE_CRITICAL=2
- STATE_UNKNOWN=3
- TOTAL=`/bin/netstat -n | awk '/^tcp/ {++S[$NF]}END {for(a in S) print a, S[a]}'
- |grep "ESTABLISHED" | awk '{print$NF}'`
- if [ $TOTAL -lt 100 ];then
- echo "TEST OK : The established status id $TOTAL"
- exit $STATE_OK
- elif [ $TOTAL -gt 100 -a $total -lt 200];then
- echo "TEST WARNING : The established status id $TOTAL"
- exit $STATE_WARNING
- elif [ $TOTAL -gt 201 ];then
- echo "TEST CRITICAL : The established status id $TOTAL"
- exit $STATE_CRITICAL
- else
- echo "UNKNOWN STATE"
- exit $STATE_UNKNOWN
- fi
STATE_OK=0、STATE_WARNING=1、STATE_CRITICAL=2、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.