天天看點

perl_Script_nagios_自定義插件

今天要監控一個服務的程序___xl2tpd;該服務有幾個IP就會有幾個程序;

本來是想利用nagios的check_nrpe插件取值,然後判斷報警,腳本寫好了,本地測試正常,可是部署上去發現每次都取得反值,比如,現在有2個程序(2個IP),結果監控端取到值就是crit;郁悶啊;不知道這個nagios的check_nrpe是什麼機制,第一次自定義;

最後沒辦法使用了check_pros

command[check_aa]=/usr/local/nagios/libexec/check_procs -c 2:2 -a '/usr/sbin/xl2tpd'

這樣是正常的,可是我的腳本感覺也沒錯,雖然寫的粗糙了點;

vim check_srv.pl

#!/usr/bin/perl

use Getopt::Std;

use strict;

use vars qw($opt_m $opt_c $opt_h);

getopts('m:c:h');

my ($srv_name,$srv_count,$back,$output,$help);

my $sr_count=`netstat -naputl |grep -c "$opt_m"`;

my %re;

   $re{ok}=0;

   $re{crit}=2;

& main();

sub main {

    get_args();

    check_result();

    warning();

}

sub get_args{

    $srv_name = $opt_m if $opt_m;

    $srv_count = $opt_c if $opt_c;

    &Usage() if (!defined($srv_name) || !defined($srv_count)); 

    }

sub check_result {

    if ($sr_count == $srv_count) {

        $back=$re{ok};

        $output="$srv_name service is ok";

    }else{

        $back=$re{crit};

        $output="$srv_name service is crit";

sub warning{

    print "$output\n";

    exit $back;

    }    

sub Usage {

    print << "END";

    ./check_service.pl -m <service_name> -c <service_counts> -h <help>

END

    exit 2;

##################################END##########################################

本地執行./check_srv.pl -m xl2tpd -c 2

xl2tpd_service is ok!

可是在監控端執行./check_nrpe -H hostip -c check_aa

就是不行,得到空值;

今天接着弄:

将日志打到一個檔案中瞧瞧吧;

command[check_aa]=/usr/local/nagios/libexec/check_srv.pl -m xl2tpd -c 2  >> /tmp/output 2>&1

打開看看:

(Not all processes could be identified, non-owned process info

 will not be shown, you would have to be root to see it all.)

xl2tpd_service is crit;

發現是權限問題:

在被監控端;

vim /etc/sudoers

nagios   ALL=NOPASSWD:ALL (新增)

然後執行 ./check_nrpe -H hostip -c check_aa

發現OK了,哈哈,

那就到此為止吧

 本文轉自 西索oO 51CTO部落格,原文連結:http://blog.51cto.com/lansgg/1158257