一、Nagios 简单原理:
Nagios 简单地说就是一个平台,其工作都依赖于插件及第三方工具来实现。像plgins 可以检测到服务(pop2,tcp,httpd,mysql)的状态; nrpe可以检测到主机本身信息(swap,sdx,top)的状态; nsca可以检测到windows机器的状态。报警(常用):邮件―sendmailmsnsendmsg;短信-短信网关/飞信。还可以结合mrtg rddtools画出流量报表。
大家看张图吧:
 
二、配置文件区别
安装过程很简单,现在只讲下配置的区别吧。
Nagios 2.X
所有配置文件都在:/../nagios/etc/ 目录下
主配置文件:nagios.cfg用以指定nagios的基本工作,及使用那些次配置文件
次配置文件:(都需要自己新建)
contactgroups.cfg  联系组配置文件
contacts.cfg       联系人配置文件
hostgroups.cfg     主机组配置文件
hosts.cfg          主机配置文件
services.cfg       服务配置文件(定义多台主机时,这个配置文件可以写N个,只需要在nagios.cfg中再添加一项就可以了)
timeperiods.cfg    监视时段配置文件
cgi.cfg              cgi脚本配置文件
commands.cfg        定义运行插件配置文件
templates.cfg       报警时间,报警信息配置
 
Nagios 3.X
主配置文件及cgi.cfg /../nagios/etc/ 目录下
次配置文件在: /../nagios/etc/objects/ 目录下
主配置文件:nagios.cfg用以指定nagios的基本工作,及使用那些次配置文件
次配置文件:(默认安装就有)
contacts.cfg    联系人及组配置文件
templates.cfg   监控项目及报警配置文件
timeperiods.cfg 监视时间配置文件
switch.cfg      交换机配置文件
windows.cfg    windows配置文件
localhost.cfg    本机配置文件
commands.cfg   定义运行插件配置文件
 
注意区别:
<!--[if !supportLists]-->1、  <!--[endif]-->配置文件目录不一样
<!--[if !supportLists]-->2、  <!--[endif]-->3.X配置文件不需要自己新建,默认就有
<!--[if !supportLists]-->3、  <!--[endif]-->配置文件改动很大,其中装用户及组写到了一个文件,但不定义报警的时间,只定义收邮件人/接收短信人,其报警时间段写到了templates.cfg文件里;监控主机配置文件直接写到了服务配置文件里,相应的主机组都定义在templates.cfg
<!--[if !supportLists]-->4、  <!--[endif]-->2.xswap需要手动添加到commands.cfg    3.X自带
 
三、插件的问题
许多人在装nrpe的时候都会遇到CHECK_NRPE: Error - Could not complete SSL handshake错误。解决方法
石头大哥([url]http://www.itnms.net/discuz/[/url])的翻译如下:
简单说一下,大概的内容,不是严格翻译。
     1.  
确认check_nrpe nrpe daemon的版本一定要一致。
     2.  
确认 check_nrpenrpe deamon端同时启用或者禁用ssl支持。
     3.  
确认nrep.cfg可以被nrpe(或者nagios,反正是执行nrep或者xinetd/inetd程序的)用户正常读取。
     4.  
有关伪随机设备的问题。这个只会在solaris 8上出现,需要一个补丁Sun patch 112438
     5.  
确定nagios主机在xinetd only_from中,如果没有使用xinetd,则要确认nrpe.cfg中的配置。
另外,赠送l两个,
1.
检查一下你的Windows或者Linux自带的防火墙,是否把端口给filter掉了。
2.
nrpe的的log打开,可以发现更多有用的信息。

四、飞信机器(fetion)新版 结合nagios短信报警方法
旧版是fetion-200804X 采用的sms直接发短信的方法。这种方法很简单。
 
新版我用的fetin-20080522X
安装方法:
参考hiadmin
1、软件环境(centos 5为例)
官网地址:[url]http://www.it-adv.net/[/url]
支持库安装:
需要Glibc2.4以上的版本
2、安装过程
下载包地址 LINUX X86/32(REDHAT ES4X32):支持库 最新程序fetion20080522004-linrh4.tar.gz
其中支持库和安装包内容如下:
# tar zxvf libraryrh4x32.tar.gz
libACE-5.6.5.so
libACE_SSL-5.6.5.so
libcrypto.so.0.9.7a
libssl.so.0.9.7a

# tar zxvf fetion20080522004-linrh4.tar.gz
我将fetion放在/../nagios/libexec/sms
把支持库复制到/usr/lib/目录下,并作软链接如下:
cp lib*so* /usr/lib/
ln -s /usr/lib/libcrypto.so.0.9.7a /usr/lib/libcrypto.so.4
ln -s /usr/lib/libssl.so.0.9.7a /usr/lib/libssl.so.4
设定lib库配置文件
#vi /etc/ld.so.conf
#
增加一条
/usr/lib/
#
保存退出后,执行
#ldconfig
fetion的目录结构:
.\Readme.txt:
本说明文件
.\fetion
:主程序
.\sound\*.wav:
各种音效文件,您可以用自己喜欢的文件替换
.\plugins\plugin_*:
插件程序,您可以修改插件以达到自己的各性化需求
完成之后测试,安装是否成功;执行
#cd install
# ./fetion -h
 Usage:
    fetion -h
        -h: help
    fetion -u mobile -p pwd [-b batchfile] [-EN] [-d]
    fetion -u mobile -p pwd [-b batchfile] [-EN] [-d]
        -u: Fetion user account(only supports mobile phone No.)
        -p: Account password
        -b: Batch file name
        -d: Debug on and write logs to [mobile]-debug.log
        -EN: English
3、实际测试
测试帐号:13888888888
密码:123456 (如果密码中含有特殊字符,请使用单引号)
如果发送成功。那么fetion安装过程就OK
 
五:fetion 组合nagios
1Fetion以后台方式启动:nohup /usr/local/nagios/libexec/sms/fetion -u 13888888888 -p 123456 >/dev/null 2>1 &
2、写一个perl脚本(本脚本由gzmaster小弟提供)
Sms.pl (/../nagios/libexec/sms/sms.pl)
#!/usr/bin/perl -w
 
use strict;
use Data::Dumper;
use LWP::UserAgent;
my $mesg = shift;
$mesg =~ s/\//|/g;
my @number = (接收手机号,接收手机号);
foreach my $number ( @number ) {
        #print "send sms to $number \n";
        my $send_sms_url = "http://localhost:40000/API/buddy/sms/" . $number . "/" . $mesg . '?rand=0.7394060082921254';
        my $request = HTTP::Request->new(GET => $send_sms_url);
        my $ua = LWP::UserAgent->new;
        $ua->timeout( 5 );
        $ua->agent("Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; Maxthon 2.0)");
        my $response = $ua->request($request);
        my $content = $response->content();
}
    3、修改相应的配置文件
修改用户及组:contacts.cfg
添加:
define contact{
        contact_name                    sms-members
        use                             sms-mail-contact
        alias                           Nagios Admin SMS
        pager                          13581565655
       }
 
define contactgroup{
        contactgroup_name       admins-and-lijs
        alias                   Nagios Administrators
        members                 sms-members
        }
修改报警选项:templates.cfg
 
define contact{
        name generic-contact               
 service_notification_period     24x7  
host_notification_period    24x7        
 service_notification_options    w,u,c,r,f,s
host_notification_options       d,u,r,f,s
 service_notification_commands notify-service-by-email; service-notify-by-sms
      host_notification_commands     notify-host-by-email
        register                        0    
        }
 
define contact{
        name                            sms-mail-contact
        service_notification_period     24x7                  
        host_notification_period        24x7               
        service_notification_options    w,u,c,r,f,s      
        host_notification_options       d,u,r,f,s  
        service_notification_commands  service-notify-by-sms
        host_notification_commands     notify-host-by-email
       register                        0                 
        }
 
修改调用脚本:commands.cfg
#host-notify-by-sms  
define command {
       command_name      host-notify-by-sms
       command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nHost: $HOSTNAME$\nState:
 $HOSTSTATE$\nWAN_IP: $HOSTALIAS$\nLAN_IP: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/local/nagios/lib
exec/sms.pl 710880931 "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
        }
 
#service notify by sms 
define command {
       command_name     service-notify-by-sms
             command_line     /usr/local/nagios/libexec/sms/sms.pl '** $NOTIFICATIONTYPE$ alert - $HOSTNAME$  $SERVICEDESC$ is $SERVICESTA
TE$ info: $SERVICEOUTPUT$'
        }
 
测试下nagios情况。然后再测试报警。就OK