Chinaunix首页 | 论坛 | 博客
  • 博客访问: 177005
  • 博文数量: 28
  • 博客积分: 430
  • 博客等级: 下士
  • 技术积分: 257
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-30 09:53
文章分类

全部博文(28)

文章存档

2012年(27)

2011年(1)

分类: LINUX

2012-05-04 18:00:56

这篇文章是从网上看了很多资料,通过自己实践,测试可以完成服务器的基本监控,然后整理而成,希望可以帮助学习linux的朋友。 

[color=Red][size=4][size=6]有很多朋友说我的文章和他做的有点出入,我在这里说明下我的nagios是2.9的,现在最新的是3.0.5的,我也测试过了,3.0.5的和2.9的在配置文件上是有点变化的,不要死定着这篇文章,文章只是引导大家去学习原理,配置文件的变动还需要大家去相应的改动。[/size][/size][/color] 

实验环境:nagios监控服务器为192.168.1.240   
          主机名为nagios 
          nagios被监控服务器为192.168.1.208 
          主机名为apache 
用到的软件包:httpd-2.2.6.tar.gz、imagepak-base.tar.gz、mysql-5.1.22-rc-linux-i686-icc-glibc23.tar.gz、nagios-2.9.tar.gz、nagios-plugins-1.4.9.tar.gz、nrpe-2.12.tar.gz、perl-stable.tar.gz、php-5.2.4.tar.bz2、pnp-latest.tar.gz、rrdtool-1.0.50.tar.gz 

在监控服务器上进行下面的操作: 
1.安装nagios主程序  
1)解压缩:  
tar -zxvf nagios-2.9.tar.gz  
cd nagios-2.9  
./configure --prefix=/usr/local/nagios   --with-gd-lib=/usr/local/lib --with-gd-inc=/usr/local/include  

2)创建用户并且设定权限: 
groupadd nagios  
useradd -g nagios nagios  
mkdir /usr/local/nagios  
chown -R nagios.nagios /usr/local/nagios  

make all  
make install               [color=Red]//来安装主程序,CGI和HTML文件 [/color] 
make install-init          [color=Red]//在/etc/rc.d/init.d安装启动脚本[/color]  
make install-commandmode   [color=Red]//来配置目录权限[/color]  
make install-config  
  [color=Red]//来安装示例配置文件,安装的路径是/usr/local/nagios/etc[/color].  

3)验证是否安装成功: 
验证程序是否被正确安装。切换目录到安装路径(这里是/usr/local/nagios),看是否存在 etc、bin、 sbin、 share、 var这五个目录,如果存在则可以表明程序被正确的安装到系统了。后表是五个目录功能的简要说明:  
bin Nagios执行程序所在目录,nagios文件即为主程序 
etc Nagios配置文件位置,初始安装完后,只有几个*.cfg-sample文件 
sbin Nagios Cgi文件所在目录,也就是执行外部命令所需文件所在的目录 

share Nagios网页文件所在的目录 
var Nagios日志文件、spid 等文件所在的目录 

var/archives Empty directory for the archived logs 
/var/rw                 Empty directory for the external command file 


2.安装插件  
1)解压缩: 
tar -zxvf nagios-plugins-1.4.9.tar.gz  
cd nagios-plugins-1.4.9  
./configure  --prefix=/usr/local/nagios/  
[color=Red](在redhat系统上面安装可能出现configure时,到这里checking for redhat spopen problem...就不动了,所以需要在configure时再加上--enable-redhat-pthread-workaround )[/color] 
make  
make install  
ls /usr/local/nagios/libexec/  
会显示安装的插件文件,即所有的插件都安装在libexec这个目录下  

注意:要是没有这个插件目录需要用下面的命令把插件复制过来 
cp /usr/local/nagios-plugins/libexec /usr/local/nagios/ 

2)将apache的运行用户加到nagios组里面 : 
从httpd.conf中过滤出当前的apache运行用户  
grep ^User /usr/local/apache2/conf/httpd.conf  

我的是daemon,下面将这个用户加入nagios组  
usermod -G nagios daemon  
   
3)修改apache配置:  
修改apache的配置文件,增加nagios的目录,并且访问此目录需要进行身份验证  
vi /usr/local/apache2/conf/httpd.conf,在最后增加如下内容 : 

ScriptAlias /nagios/cgi-bin /usr/local/nagios/sbin  
  
    Options ExecCGI  
    AllowOverride None  
    Order allow,deny  
    Allow from all  
    AuthName "Nagios Access"  
    AuthType Basic  
AuthUserFile /usr/local/nagios/etc/htpasswd   [color=Red]//用于此目录访问身份验证的文件[/color]  
    Require valid-user  
  
   
Alias /nagios /usr/local/nagios/share  
  
    Options None  
    AllowOverride None  
    Order allow,deny  
    Allow from all  
    AuthName "Nagios Access"  
    AuthType Basic  
AuthUserFile /usr/local/nagios/etc/htpasswd  [color=Red]//用于此目录访问身份验证的文件[/color]  
Require valid-user  
  

4)增加验证用户: 
也就是通过web访问nagios的时候,必须要用这个用户登陆.在这里我们增加用户test:密码为123456  
#/usr/local/apache2/bin/htpasswd -c /usr/local/nagios/etc/htpasswd test   [color=Red]//用户名[/color] 
New password: //(输入123456)  
Re-type new password: (再输入一次密码)  
Adding password for user test  
   
5)查看认证文件的内容: 
[root@localhost conf]# less /usr/local/nagios/etc/htpasswd  
test:OmWGEsBnoGpIc      [color=Red] //前半部分是用户名test,后面是加密后的密码 [/color]  

到这里nagios的安装也就基本完成了,你可以通过web来访问了.  
会弹出对话框要求输入用户名密码  
输入test,密码123456,就可以进入nagios的主页面了  
但是可以发现什么也点不开,因为nagios还没启动呢!下面的工作就是修改配置文件,增加要监控的主机和服务  

3.典型配置  
nagios要用起来,就必须修改配置文件,增加要监控的主机和服务才行.在具体做这个动作之前,下面的概念必须要了解.  
   
1)预备知识 : 
在Nagios里面定义了一些基本的对象,一般用到的有:  
联系人 contact                 出了问题向谁报告?一般当然是系统管理员了 
监控时间段 timeperiod 7X24小时不间断还是周一至周五,或是自定义的其他时间段 
被监控主机 Host                 所需要监控的服务器,当然可以是监控机自己 
监控命令 command                 nagios发出的哪个指令来执行某个监控,这也是自己定义的 
被监控的服务 Service                 例如主机是否存活,80端口是否开,磁盘使用情况或者自定义的服务等

[color=Red]注意:多个被监控主机可以定义为一个主机组,多个联系人可以被定义为一个联系人组[/color] 

2)将示例配置文件复制为真实配置文件名: 

cd /usr/local/nagios/etc  
把这里.cfg-sample文件配置文件模板,全部重命名为.cfg 

3)修改配置文件:  
修改nagios的主配置文件nagios.cfg  
vi nagios.cfg  
cfg_file=/usr/local/nagios/etc/localhost.cfg      [color=Red]//在前面加#[/color] 
cfg_file=/usr/local/nagios/etc/contacts.cfg      [color=Red]//联系人配置文件路径[/color]  
cfg_file=/usr/local/nagios/etc/contactgroups.cfg [color=Red]//联系人组配置文件路径[/color] 
cfg_file=/usr/local/nagios/etc/commands.cfg      [color=Red]//命令配置文件路径[/color]  
cfg_file=/usr/local/nagios/etc/host.cfg         [color=Red] //主机配置文件路径 [/color] 
cfg_file=/usr/local/nagios/etc/hostgroups.cfg    [color=Red]//服务器组配置文件[/color] 
cfg_file=/usr/local/nagios/etc/templates.cfg     [color=Red]//模板配置文件路径[/color]  
cfg_file=/usr/local/nagios/etc/timeperiods.cfg   [color=Red]//监视时段配置文件路径[/color] 
cfg_file=/usr/local/nagios/etc/services.cfg      [color=Red]//服务配置文件[/color] 

其他配置文件以实际情况来进行配置 

改check_external_commands=0为check_external_commands=1 .这行的作用是允许在web界面下执行重启nagios、停止主机/服务检查等操作。  

把command_check_interval的值从默认的1改成command_check_interval=10s(根据自己的情况定这个命令检查时间间隔,不要太长也不要太短)。  
主配置文件要改的基本上就是这些,通过上面的修改,发现/usr/local/nagios/etc并没有文件hosts.cfg等一干文件,怎么办?稍后手动创建它们。 

4)然后检查配置文件是否出错  
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg 

出现Total Warnings: 0 
        Total Errors:   0     [color=Red]//这样表示配置文件没有错误[/color] 

5)修改CGI脚本控制文件cgi.cfg  

#vi cgi.cfg  
第二个要修改的配置文件是cgi.cfg,它的作用是控制相关cgi脚本。先确保use_authentication=1。接下来修改default_user_name=test(前面创建的用户名) ,再后面的修改在下表列出:  
authorized_for_system_information=nagiosadmin,mandahang,test     [color=Red]//后面跟的都是用户名[/color] 
authorized_for_configuration_information=nagiosadmin,mandahang,test 
authorized_for_system_commands=mandahang,test authorized_for_all_services=nagiosadmin,mandahang,test  
authorized_for_all_hosts=nagiosadmin,mandahang,test 
authorized_for_all_service_commands=nagiosadmin,mandahang,test 
authorized_for_all_host_commands=nagiosadmin,mandahang,test 

[color=Red]注意:在上面的配置文件里面加上新加的用户test[/color] 
那么上述用户名打那里来的呢?是执行命令 /usr/local/apache2/bin/htpasswd -c /usr/local/nagios/etc/htpasswd test(用户名test) 所生成的  

6)配置各种配置文件 

定义监控时间段,创建配置文件timeperiods.cfg : 
# vi timeperiods.cfg  
define timeperiod{  
        timeperiod_name         24x7   [color=Red]//时间段的名称,这个地方不要有空格[/color]  
        alias                   24 Hours A Day,7Days 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,监控的时间是每天全天24小时:  
   
定义联系人,创建配置文件contacts.cfg  
# vi contacts.cfg  
define contact{  
        contact_name                    test    [color=Red]//联系人的名称,这个地方不要有空格 [/color] 
        alias                           sys 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-by-email  
        host_notification_commands      host-notify-by-email         
email                           [email]tfhudong@sohu.com[/email]  
        pager                           1391119xxxx  
        }  

[color=Red]创建了一个名为test的联系人,下面列出其中重要的几个选项做说明:[/color] 
  
service_notification_period     24x7  
服务出了状况通知的时间段,这个时间段就是上面在timeperiods.cfg中定义的.  

host_notification_period        24x7  
主机出了状况通知的时间段, 这个时间段就是上面在timeperiods.cfg中定义的  

service_notification_options    w,u,c,r  
[color=Red]当服务出现w—报警(warning),u—未知(unkown),c—严重(critical),或者r—从异常情况恢复正常,在这四种情况下通知联系人. [/color] 

host_notification_options       d,u,r  
[color=Red]当主机出现d­­­­—当机(down),u—返回不可达(unreachable),r—从异常情况恢复正常,在这3种情况下通知联系人 [/color] 
service_notification_commands   notify-by-email  
[color=Red]服务出问题通知采用的命令notify-by-email,这个命令是在commands.cfg中定义的,作用是给联系人发邮件[/color].  

host_notification_commands      host-notify-by-email 
[color=Red]同上,主机出问题时采用的也是发邮件的方式通知联系人 [/color] 

email                           [email]yahoon@test.com[/email]  
[color=Red]很明显,联系的人email地址 [/color] 
Pager                           137xxxxxxxxxxxxxx  [color=Red]//电话[/color] 


下面就可以将多个联系人组成一个联系人组,创建文件contactgroups.cfg : 

# vi contactgroups.cfg  
define contactgroup{  
        contactgroup_name       sagroup    [color=Red]//联系人组的名称,同样不能空格 [/color]        
     alias                                System Administrators        [color=Red]//别名 [/color]       
     members                          test  
[color=Red]//组的成员,来自于上面定义的contacts.cfg,如果有多个联系人则以逗号相隔 [/color] 
        }  

定义被监控主机,创建文件hosts.cfg : 
# vi hosts.cfg  
define host{  
        host_name        nagios        [color=Red] //被监控主机的名称,最好别带空格[/color]  
        alias            nagios             [color=Red]//别名 [/color]       
       address     192.168.1.240    [color=Red]//被监控主机的IP地址[/color]        
       check_command    check-host-alive  
        [color=Red]//监控的命令check-host-alive,这个命令来自commands.cfg,用来监控主机是否存活[/color]  
        max_check_attempts    5  [color=Red]//检查失败后重试的次数[/color]  
        check_period          24x7  
       [color=Red] //检查的时间段24x7,同样来自于我们之前在timeperiods.cfg中定义的 [/color] 
contact_groups        sagroup  
       [color=Red] //联系人组,上面在contactgroups.cfg中定义的sagroup [/color] 
notification_interval  10  
        [color=Red]//提醒的间隔,每隔10秒提醒一次 [/color] 
notification_period   24x7  
        [color=Red]//提醒的周期, 24x7,同样来自于我们之前在timeperiods.cfg中定义的 [/color] 
notification_options            d,u,r  
[color=Red]//指定什么情况下提醒[/color] 
        }  

通过简单的复制修改就可以定义多个主机了.我们在这加上另外一台机器 
   
与联系人可以组成联系人组一样,多个主机也可以组成主机组: 
主机名为:apache         ip:192.168.1.208 

创建文件hostgrops.cfg  
# vi hostgroups.cfg  
define hostgroup{  
        hostgroup_name          linux-servers  [color=Red]//主机组名称 [/color] 
        alias                   linux-servers  [color=Red]//别名 [/color] 
        members                 nagios,apache 
[color=Red]//组的成员主机,多个主机以逗号相隔,必须是上面hosts.cfg中定义的[/color]  
        }  

下面是最关键的了,用nagios主要是监控一台主机的各种信息,包括本机资源,对外的服务等等.这些在nagios里面都是被定义为一个个的项目(nagios称之为服务,为了与主机提供的服务相区别,我这里用项目这个词),而实现每个监控项目,则需要通过commands.cfg文件中定义的命令.  
例如我们现在有一个监控项目是监控一台机器的web服务是否正常, 我们需要哪些元素呢?最重要的有下面三点:首先是监控哪台机,然后是这个监控要用什么命令实现,最后就是出了问题的时候要通知哪个联系人?  
   
定义监控的项目,也叫服务,创建services.cfg : 

# vi services.cfg  
define service{  
        host_name               nagios  
       [color=Red] //被监控的主机,hosts.cfg中定义的[/color]  
        service_description     check-host-alive  
       [color=Red] //这个监控项目的描述,这个会在web页面中出现[/color]      
     check_command           check-host-alive  
        [color=Red]//所用的命令,是commands.cfg中定义的 [/color] 
        max_check_attempts      5    [color=Red]//重试的次数[/color] 
        normal_check_interval   3    [color=Red]//循环检查的间隔时间[/color] 
        retry_check_interval    2     
        check_period            24x7  
        [color=Red]//监控的时间段,是timeperiods.cfg中定义的[/color]  
        notification_interval   10  
        notification_period     24x7  
        [color=Red]//通知的时间段 [/color] 
notification_options    w,u,c,r  
        [color=Red]//在监控的结果是wucr时通知联系人 [/color] 
        contact_groups          sagroup  
        [color=Red]//联系人组,是contactgroups.cfg中定义的 [/color] 
        }  

这样整个的配置过程就结束了.虽然功能很简单,但是已经为以后扩展打下了良好的基础. 
  
在运行nagios之前首先做测试  

/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg  
看到下面这些信息就说明没问题了  

Total Warnings: 0  
Total Errors:   0  

作为守护进程后台启动nagios  
/usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg  
   
登陆来查看吧.点左边的Host Detail 


 


[ 本帖最后由 wiliiwin 于 2008-11-21 13:53 编辑 ]


  回复于:2008-11-14 18:17:34

4. 使用命令和插件监控更多信息  
  
我们已经增加了二个监控项目,分别监控nagios,apache这二台主机是否存活. 
nagios本身并没有监控的功能,所有的监控是由插件完成的,插件将监控的结果返回给nagios,nagios分析这些结果,以web的方式展现给我们,同时提供相应的报警功能(这个报警的功能也是由插件完成的)  
所有的这些插件是一些实现特定功能的可执行程序,默认安装的路径是/usr/local/nagios/libexec  
  
这些程序都是可以独立执行的,使用方法可以通过”命令名 –h”来查看  

例如,我们查看check_disk这个插件的用法则可以使用check_disk –h  
# ./check_disk -h  
check_disk (nagios-plugins 1.4.9) 1.91  
Copyright (c) 1999 Ethan Galstad <[email]nagios@nagios.org[/email]>  
Copyright (c) 1999-2006 Nagios Plugin Development Team  
        <[email]nagiosplug-[email]devel@lists.sourceforge.net[/email][/email]>  
This plugin checks the amount of used disk space on a mounted file system  
and generates an alert if free space is less than one of the threshold values  
Usage: check_disk -w limit -c limit [-p path | -x device] [-t timeout][-m] [-e] [-W limit] [-K limit] [-v] [-q] [-E]  

输出的资料十分详细给出了这个插件的功能,使用方法,参数意义等,对于每一个插件都是这样.所以当你不懂某个插件怎么使用时就好好读读吧.从上面的输出可以看到check_disk这个插件是用来检查磁盘使用情况的.  
我现在来独立执行它,例如查看根分区的使用情况,执行  
# ./check_disk -w 10% -c 5% /  
命令的含义是检查分区/的使用情况,若剩余10%以下,为警告状态(warning),5%以下为严重状态(critical),  

执行后我们会看到下面这条信息  
DISK WARNING - free space: / 487 MB (6% inode=78%);| /=7449MB;7524;7942;0;8361  
说明当前是warning的状态,空闲空间只有6%了.如果nagios收到这些状态结果就会采取报警等措施了  
   
我们在定义某个监控项目时,所用的监控命令都是来自commands.cfg的,这和这些插件有什么关系?想到了吧,commands.cfg中定义的监控命令就是使用的这些插件.举个例子,之前我们已经不止一次用到了check-host-alive这个命令,打开commands.cfg就可以看到这个命令的定义,如下:  
define command{  
        command_name    check-host-alive  
        command_line    $USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 1  
        }  

command_name    check-host-alive  
这句话的意思是定义的命令名是check-host-alive,也就是我们在services.cfg中使用的名称  
执行的操作是  
$USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 1  
其中$USER1$是在resource.cfg文件中定义的,代表插件的安装路径.就如我们上面看到的那样$USER1$=/usr/local/nagios/libexec,至于$HOSTADDRESS$,则默认被定义为监控主机的地址.  
简单的说,我们在services.cfg中定义了对dbpi执行check-host-alive命令,实际上就是执行了  
/usr/local/nagios/libexec/ check_ping -H dbpi的ip地址 -w 3000.0,80% -c 5000.0,100% -p 1  
实际上check-host-alive只是这一长串命令的简称而已,而在services.cfg中都是使用简称的.  
在commands.cfg中定义了很多这样的命令简称.基本上我们常用的监控项目都包含了,例如ftp,http,本地的磁盘,负载等等.  
我们再看一个命令,check_local_disk定义如下  
define command{  
        command_name    check_local_disk  
        command_line    $USER1$/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$  
        }  

check_local_disk实际上是执行的check_disk插件.这里的$ARG1$, $ARG2$, $ARG3$是什么意思呢?在之前我们已经提到了这个check_disk这个插件的用法,-w的参数指定磁盘剩了多少是警告状态,-c的参数指定剩多少是严重状态,-p用来指定路径.  
在使用check-host-alive的时候,只需要在services.cfg中直接写上这个命令名check-host-alive.后面没任何的参数.而使用check_local_disk则不同,在services.cfg中这要这么写  
check_local_disk!10%!5%!/  
在命令名后面用!分隔出了3个参数,10%是$ARG1$的值,5%是$ARG2$的值,/ 是$ARG3$的值,  
   
简单的一句话就是  
services.cfg定义监控项目用某个命令  
↓  
这个命令必须在commands.cfg中定义  
↓  
定义这个命令时使用了libexec下的插件  

如果命令不带$ARG1$就可以在services.cfg中直接使用,如果带了使用时就带上参数,以!相隔  
   
1).监控nagios的ftp  
编辑services.cfg 增加下面的内容,基本上就是copy上节我们定义监控主机存活的代码.  
define service{  
        host_name               nagios  
      [color=Red]//要监控的机器,给出机器名,注意必须是hosts.cfg中定义的 [/color] 
        service_description     check ftp  
     [color=Red] //给这个监控项目起个名字吧,任意起,你自己懂就行[/color]  
        check_command           check_ftp  
        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          sagroup  
        } 
   
修改了配置文件,当然就要重新启动了,简单的方法杀掉nagios进程,然后重新启动  
/usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg  

这里只能监控监控服务器的本地信息,需要监控被监控服务器的信息,就需要下面的操作。 

5.用NRPE监控LINUX上的”本地信息” 
本节的目的,对系统为linux的主机apcahe进行如下监控:磁盘容量,登陆用户数,http,ftp,mysql的状况,其他功能自己可以自定义配置 

对于像磁盘容量,cpu负载这样的”本地信息”,nagios只能监测自己所在的主机,而对其他的机器则显得有点无能为力.毕竟没得到被控主机的适当权限是不可能得到这些信息的.为了解决这个问题,nagios有这样一个附加组件----NRPE.用它就可以完成对linux类型主机”本地信息”的监控.  
   
所以我们按照图示在监控主机(nagios)和被监控主机上安装相应的软件  
   
在被监控主机上  

1)增加用户  
useradd nagios  

设置密码 
# passwd nagios  
   
2)安装nagios插件  
tar -zxvf nagios-plugins-1.4.9.tar.gz  
cd nagios-plugins-1.4.9  
编译安装  
./configure --enable-redhat-pthread-workaround 
make  
make install  
这一步完成后会在/usr/local/nagios/下生成两个目录libexec和share  
# ls /usr/local/nagios/  
libexec  share  

修改目录权限  
# chown nagios.nagios /usr/local/nagios  
# chown -R nagios.nagios /usr/local/nagios/libexec  
   
3)安装nrpe  
解压缩  
tar -zxvf nrpe-2.8.1.tar.gz  
cd nrpe-2.8.1  
编译  
./configure  
NRPE的端口是5666  
make all  
接下来安装NPRE插件,daemon和示例配置文件  

安装check_nrpe这个插件  
make install-plugin  
之前说过监控机需要安装check_nrpe这个插件,被监控机并不需要,我们在这里安装它是为了测试的目的  

安装deamon  
make install-daemon 
  
安装配置文件  
make install-daemon-config  
   
现在再查看nagios目录就会发现有4个目录了  
# ls /usr/local/nagios/  
bin      etc      libexec  share  
将NRPE deamon作为xinetd下的一个服务运行的.在这样的情况下xinetd就必须要先安装好,不过一般系统已经默认装了  
   
4)安装xinetd脚本  
# make install-xinetd  
输出如下  
/usr/bin/install -c -m 644 sample-config/nrpe.xinetd /etc/xinetd.d/nrpe  

可以看到创建了这个文件/etc/xinetd.d/nrpe  
编辑这个脚本  
vi /etc/xinetd.d/nrpe  
# default: on  
# description: NRPE (Nagios Remote Plugin Executor)  
service nrpe  
{  
        flags           = REUSE  
        socket_type     = stream  
        port            = 5666  
        wait            = no  
        user            = nagios  
        group           = nagios  
        server          = /usr/local/nagios/bin/nrpe  
        server_args     = -c /usr/local/nagios/etc/nrpe.cfg --inetd  
        log_on_failure  += USERID  
        disable         = no  
        only_from       = 127.0.0.1    [color=Red]在后面增加监控主机的地址192.168.1.240,以空格间隔 [/color] 
}  

改后  
     only_from       = 127.0.0.1 192.168.1.240 
   
编辑/etc/services文件,增加NRPE服务  
vi /etc/services  

增加如下  
# Local services  
nrpe            5666/tcp                        # nrpe  

重启xinetd服务  
# service xinetd restart  

查看NRPE是否已经启动  
# netstat -at|grep nrpe  
tcp        0      0 *:nrpe                  *:*                     LISTEN     
# netstat -an|grep 5666  
tcp        0      0 0.0.0.0:5666            0.0.0.0:*               LISTEN    
可以看到5666端口已经在监听了  
   
5)测试NRPE是否则正常工作  

之前安装了check_nrpe这个插件用于测试,现在就是用的时候.执行  
/usr/local/nagios/libexec/check_nrpe -H localhost  
会返回当前NRPE的版本  
# /usr/local/nagios/libexec/check_nrpe -H localhost  
NRPE v2.8.1  

也就是在本地用check_nrpe连接nrpe daemon是正常的  

[color=Red]注:为了后面工作的顺利进行,注意本地防火墙要打开5666能让外部的监控机访问 [/color] 
   
/usr/local/nagios/libexec/check_nrpe –h查看这个命令的用法  
可以看到用法是check_nrpe –H 被监控的主机 -c要执行的监控命令  
注意:-c后面接的监控命令必须是nrpe.cfg文件中定义的.也就是NRPE daemon只运行nrpe.cfg中所定义的命令  
   
查看NRPE的监控命令  
cd /usr/local/nagios/etc  
vi nrpe.cfg  

# The following examples use hardcoded command arguments...  
command[check_users]=/usr/local/nagios/libexec/check_users -w 5 -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 150 -c 200  

注意:其他命令需要自行添加 

也就是check_nrpe 的-c参数可以接的内容,等号=后面是实际执行的插件程序(只这与commands.cfg中定义命令的形式十分相似,不过是写在了一行).也就是说check_users就是等号后面/usr/local/nagios/libexec/check_users -w 5 -c 10的简称.  
我们可以很容易知道上面这5行定义的命令分别是检测登陆用户数,cpu负载,hda1的容量,僵尸进程,总进程数.各条命令具体的含义见插件用法(执行”插件程序名 –h”)  
由于-c后面只能接nrpe.cfg中定义的命令,也就是说现在我们只能用上面定义的这五条命令.我们可以在本机实验一下.执行  
/usr/local/nagios/libexec/check_nrpe -H localhost -c check_users  

/usr/local/nagios/libexec/check_nrpe -H localhost -c check_load  

/usr/local/nagios/libexec/check_nrpe -H localhost -c check_hda1  

/usr/local/nagios/libexec/check_nrpe -H localhost -c check_zombie_procs  

/usr/local/nagios/libexec/check_nrpe -H localhost -c check_total_procs  

在运行nagios的监控主机上  

之前已经将nagios运行起来了,现在要做的事情是:  
– 安装check_nrpe插件  
– 在commands.cfg中创建check_nrpe的命令定义,因为只有在commands.cfg中定义过的命令才能在services.cfg中使用  

创建对被监控主机的监控项目  

安装check_nrpe插件  
# tar -zxvf nrpe-2.8.1.tar.gz  
# cd nrpe-2.8.1  
# ./configure  
# make all  
# make install-plugin  
[color=Red]只运行这一步就行了,因为只需要check_nrpe插件 [/color] 
   
在apache刚装好了nrpe,现在我们测试一下监控机使用check_nrpe与被监控机运行的nrpedaemon之间的通信.  

# /usr/local/nagios/libexec/check_nrpe -H 192.168.1.208 
NRPE v2.8.1  

[color=Red]看到已经正确返回了NRPE的版本信息,说明一切正常.[/color]  
   
在commands.cfg中增加对check_nrpe的定义  
vi /usr/local/nagios/etc/commands.cfg  
在最后面增加如下内容  
########################################################################  
#  
# 2007.9.5 add by yahoon  
# NRPE COMMAND  
#  
########################################################################  
# 'check_nrpe ' command definition  
define command{  
        command_name check_nrpe  
        command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$  
        }  

意义如下  
command_name check_nrpe  
[color=Red]定义命令名称为check_nrpe,在services.cfg中要使用这个名称. [/color] 

command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$  
[color=Red]这是定义实际运行的插件程序.这个命令行的书写要完全按照check_nrpe这个命令的用法.不知道用法的就用check_nrpe –h查看 [/color] 

-c后面带的$ARG1$参数是传给nrpe daemon执行的检测命令,之前说过了它必须是nrpe.cfg中所定义的那5条命令中的其中一条.在services.cfg中使用check_nrpe的时候要用!带上这个参数  

下面就可以在services.cfg中定义对apache主机磁盘容量的监控  
define service{  
        host_name              apache  
[color=Red]被监控的主机名,这里注意必须是linux且运行着nrpe,而且必须是hosts.cfg中定义的 [/color] 
        service_description     check-disk  
        [color=Red]监控项目的名称 [/color] 
        check_command           check_nrpe!check_disk  
       [color=Red] 监控命令是check_nrpe,是在commands.cfg中定义的,带的参数是check_disk,是在nrpe.cfg中定义的[/color]  
        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          sagroup  
        }  
像这样将其余几个监控项目加进来. 

6.Nagios的性能分析图表(此安装在监控机上进行) 
Nagios监控的侧重点在“此时”服务是否正常,是一个瞬时状态。通过对这个状态的监控和告警,管理员可以第一时间对主机或者服务的故障做处理。但是我 们往往也非常关心主机的性能以及服务的响应时间等情况,这些情况是一个持续的变化曲线,并非一个实时的值,如果通过查看日志数据来分析的话,既繁琐有抽 象,所以,我们希望Nagios可以帮我们做这份工作,然后将报表提交给我们,这样就非常方便了。这就是今天需要用到的Nagios的相关开源项目—— PNP 

PNP是一个小巧的开源软件包,它是基于PHP和PERL,利用rrdtool将Nagios采集的数据绘制成图表。如果你要安装PNP,那么准备工作有如下3项: 
1、整合Apache和PHP 
2、安装rrdtools  
3、安装Perl  
1)安装php 
./configure \ 
--prefix=/usr/local/php \ 
--with-mysql=/usr/local/mysql \ 
--with-apxs2=/usr/local/apache2/bin/apxs \ 
--with-gd --with-jpeg-dir=/usr/lib --enable-gd-native-ttf \ 
--with-zlib-dir=/usr/lib --with-png-dir=/usr/lib \ 
--with-freetype-dir=/usr/include/freetype2 --with-ttf \ 
--enable-sockets --enable-ftp --enable-mbstring  

make && make install 

#在httpd配置文件里加入,使apache支持php 
AddType application/x-httpd-php .php .phtml 
AddType application/x-httpd-php-source .phps 

#拷贝php配置文件到指定位置 
cp php.ini-dist /usr/local/php/lib/php.ini 

2)安装rrdtools 
./configure  
make&&make install 

3) 安装Perl 
 rm -f config.sh Policy.sh 
 sh Configure -de 
 make 
 make test 
 make install 

要介绍PNP工作原理,首先要说明一下Nagios提供的数据接口,也就是PNP的数据来源。在定义host或service 中都有一个定义项,名为process_perf_data,其值可以定义为0或1,其作用是是否启用Nagios的数据输出功能。如果你将此项赋值为 1,那么Nagios就会将收集的数据写入到某个文件中,以备提取。所以,如果你想让Nagios将数据输出的话,首先要将Nagios的主配置文件 nagios.cfg中相关的配置修改: 

process_performance_data=1 
service_perfdata_command=process-service-perfdata  [color=Red]#默认此句被注释掉了,在这里去掉前面的#[/color] 

如果想要对某个监控对象做数据图表,则需在所对应的host或者service定义中(一般写在hosts.cfg或者services.cfg文件中),包含如下的定义: 

process_perf_data   1 

这 样,Nagios就会调用相应的命令来输出数据了。Nagios的command.cfg定义中默认有一项“process-service- perfdata”,该命令声明了Nagios输出哪些值到输出的文件中。不过其定义相对简单,PNP提供了一个perl脚本,更详尽的定义了一个输出数 据的方法。如果要使用PNP的话,我们需要在command.cfg的定义中,将“process-service-perfdata”命令对应的执行命令行的内 容替换成该脚本: 

define command{ 
command_name process-service-perfdata 
command_line /usr/local/nagios/libexec/process_perfdata.pl 


这样设置了之后,Nagios就会利用PNP提供的脚本进行相关的工作了。 
刚刚定义命令时用到的脚本“process_perfdata.pl”现在还不存在。我们现在就来安装,也就PNP的软件包 安装方法很简单,过程也很顺利 

./configure --with-rrdtool=/usr/local/rrdtool-1.0.50/bin/rrdtool --with-perfdata-dir=/usr/local/nagios/share/perfdata/ 
make all 
make install 

安装结束之后,再去检查一下Nagios的插件目录(libexec),就会发现多了一个名为“process_perfdata.pl”的脚本。 

ok,现在执行一下Nagios配置检查命令 
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg 
如果没有什么错误,那么我们重新启动Nagios。 
/etc/init.d/nagios restart 
验收一下成果,在浏览器的地址栏中输入: 



 

基本上nagios的主要功能就有这些,nagios的使用关键在于如何活用那些丰富的插件.nagios可以说是一个对于linux/unix环境支持十分好的程序. 
  
之前我说重启nagios的时候都是用的杀进程的方式,其实也可以不这么做.如果在安装nagios的时候安装了启动脚本就可以使用/etc/init.d/nagios restart 还可以带的参数有stop, start,status  
如果报错了,有可能是脚本里面的路径设置错误,解决办法  
vi /etc/init.d/nagios  
将prefix=/usr/local/nagiosaa改为安装的目录/etc/init.d/nagios  

注:在nagios安装的时候说是将脚本安装到了/etc/rc.d/init.d,其实这和/etc/init.d是一个目录
阅读(2264) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

never01012012-05-04 18:04:18

Nagios在线帮助中文版
http://nagios-cn.sourceforge.net/nagios-cn/