一、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   定义运行插件配置文件

 

注意区别:

1、  配置文件目录不一样

2、  3.X 配置文件不需要自己新建,默认就有

3、  配置文件改动很大,其中装用户及组写到了一个文件,但不定义报警的时间,只定义收邮件人/接收短信人,其报警时间段写到了templates.cfg文件里;监控主机配置文件直接写到了服务配置文件里,相应的主机组都定义在templates.cfg

4、  2.x swap需要手动添加到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 ly_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 and write logs to [mobile]-debug.log
        -EN: English

3 、实际测试
测试帐号:13888888888
密码:123456 (如果密码中含有特殊字符,请使用单引号)

如果发送成功。那么fetion安装过程就OK

 

五:fetion 组合nagios

1 Fetion以后台方式启动: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                          138888888888

       }

 

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