diff --git a/pandora_server/ChangeLog b/pandora_server/ChangeLog index 5d5bd9d811..93de78c741 100644 --- a/pandora_server/ChangeLog +++ b/pandora_server/ChangeLog @@ -1,3 +1,8 @@ +2013-07-15 Sergio Martin + + * util/plugin/snmp_remote.pl: Add SNMP remote plugin to the + default plugins on Pandora FMS server + 2013-07-10 Ramon Novoa * lib/PandoraFMS/Core.pm: Added support to filter 10 binding vars. diff --git a/pandora_server/util/plugin/snmp_remote.pl b/pandora_server/util/plugin/snmp_remote.pl new file mode 100755 index 0000000000..90d7218fb4 --- /dev/null +++ b/pandora_server/util/plugin/snmp_remote.pl @@ -0,0 +1,133 @@ +#!/usr/bin/perl +#--------------------------------------------------------------------------- +# SNMP remote plugin +# Depending on the configuration returns the result of these modules: +# - % Memory Use +# - % CPU Use +# - % Disk Use +# - Show if a process is running or not +# +# Artica ST +# Copyright (C) 2013 mario.pulido@artica.es +# +# License: GPLv2+ +#--------------------------------------------------------------------------- +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# GPL License: http://www.gnu.org/licenses/gpl.txt +#--------------------------------------------------------------------------- + +use strict; +use Getopt::Std; + +my $VERSION = 'v1r1'; + +#----------------------------------------------------------------------------- +# HELP +#----------------------------------------------------------------------------- + +if ($#ARGV == -1 ) +{ + print "-H, --host=STRING\n"; + print "\tHost IP\n"; + print "-c, --community=STRING\n"; + print "\tSnmp Community\n"; + print "-m, --module=STRING\n"; + print "\tDefine module (memuse|diskuse|process|cpuload) \n"; + print "-d, --disk=STRING\n"; + print "\tDefine disk name (C:, D: in Windows) or mount point (Linux)(only in diskuse module)\n"; + print "-p, --process=STRING\n"; + print "\tProcess or service name (only in process module)\n"; + print "\n"; + print "Example of use \n"; + print "perl snmp_remoto.pl -H host -c community -m (memuse|diskuse|process|cpuload) [-p process -d disk] \n"; + print "Version=$VERSION"; + exit; +} + +my ( $host, $community, $module, $disk, $process ) = &options; + +#------------------------------------------------------------------------------------- +# OPTIONS +#------------------------------------------------------------------------------------- + +sub options { + + # Get and check args + my %opts; + getopt( 'Hcmdp', \%opts ); + + $opts{"H"} = 0 unless ( exists( $opts{"H"} ) ); + $opts{"c"} = 0 unless ( exists( $opts{"c"} ) ); + $opts{"m"} = 0 unless ( exists( $opts{"m"} ) ); + $opts{"d"} = "/" unless ( exists( $opts{"d"} ) ); + $opts{"p"} = 0 unless ( exists( $opts{"p"} ) ); + return ( $opts{"H"}, $opts{"c"}, $opts{"m"}, $opts{"d"}, $opts {"p"}); +} + +#-------------------------------------------------------------------------------------------------- +# Module % Memory use +#-------------------------------------------------------------------------------------------------- + +if ($module eq "memuse"){ + my $memid = `snmpwalk -On -v 1 -c $community $host .1.3.6.1.2.1.25.2.3.1.3 | grep Physical | head -1 | gawk '{print \$1}' | gawk -F "." '{print \$13}' | tr -d "\r"`; + my $memtot = `snmpget -v 1 -c $community $host .1.3.6.1.2.1.25.2.3.1.5.$memid ` ; + my $memtot2 = `echo "$memtot" | gawk '{print \$4}'`; + my $memfree = `snmpget -v 1 -c $community $host .1.3.6.1.2.1.25.2.3.1.6.$memid` ; + my $memfree2 = `echo "$memfree" | gawk '{print \$4}'`; + my $memuse = ($memfree2)*100/$memtot2; + printf("%.2f", $memuse); + } +#-------------------------------------------------------------------------------------------------- +# Module % Disk use +#-------------------------------------------------------------------------------------------------- +if ($module eq "diskuse"){ + my $diskid = `snmpwalk -On -v 1 -c $community $host .1.3.6.1.2.1.25.2.3.1.3 | grep "$disk" | head -1 | gawk '{print \$1}' | gawk -F "." '{print \$13}' | tr -d "\r"`; + my $disktot = `snmpget -v 1 -c $community $host .1.3.6.1.2.1.25.2.3.1.5.$diskid ` ; + my $disktot2 = `echo "$disktot" | gawk '{print \$4}'`; + + if($disktot2 == 0) { + print 0; + } + else { + my $diskfree = `snmpget -v 1 -c $community $host .1.3.6.1.2.1.25.2.3.1.6.$diskid` ; + my $diskfree2 = `echo "$diskfree" | gawk '{print \$4}'`; + my $diskuse = ($disktot2 - $diskfree2)*100/$disktot2; + printf("%.2f", $diskuse); + } + } + +#-------------------------------------------------------------------------------------------------- +# Module Process Status +#-------------------------------------------------------------------------------------------------- + +if ($module eq "process"){ + my $status = `snmpwalk -v 2c -c $community $host 1.3.6.1.2.1.25.4.2.1.2 | grep "$process" | head -1 | wc -l`; + print $status; + } +#-------------------------------------------------------------------------------------------------- +# Module % Cpu Load +#-------------------------------------------------------------------------------------------------- + +if ($module eq "cpuload"){ + my $cpuload = `snmpwalk -v 1 -c $community $host .1.3.6.1.2.1.25.3.3.1.2 | gawk '{print \$4}' `; + my @cpuload = split(/\n/, $cpuload); + my $sum; + my $counter = 0; + foreach my $val(@cpuload){ + $sum = $sum+$val; + $counter ++; + } + my $cputotal = $sum/$counter; + print $cputotal; + + } +