I have written the following nagios plugins that would take into account buffered and cached when calculating free memory...UCD-SNMP-MIB::memIndex.0 = INTEGER: 0 UCD-SNMP-MIB::memErrorName.0 = STRING: swap UCD-SNMP-MIB::memTotalSwap.0 = INTEGER: 8385920 kB UCD-SNMP-MIB::memAvailSwap.0 = INTEGER: 8385920 kB UCD-SNMP-MIB::memTotalReal.0 = INTEGER: 8240104 kB UCD-SNMP-MIB::memAvailReal.0 = INTEGER: 2576224 kB UCD-SNMP-MIB::memTotalFree.0 = INTEGER: 10962144 kB UCD-SNMP-MIB::memMinimumSwap.0 = INTEGER: 16000 kB UCD-SNMP-MIB::memBuffer.0 = INTEGER: 326776 kB UCD-SNMP-MIB::memCached.0 = INTEGER: 4740904 kB
I just want to know if there not a way to calculate the available memory without dubbling the variables? line 82 onwards from my script.#!C:\Dwimperl\perl\bin use strict; use warnings; use Net::SNMP; use Nagios::Plugin; use nagios::Plugin::Getopt; use Math::Round; my $np; $np=Nagios::Plugin->new( usage => "Usage: %s -H <host> -C <community> -w <warn> -c +<crit>", shortname => "SNMP Memory", timeout => 5, blurb => "this plugin calculates the real used memory in l +inux which includes the cache and buffers", extra => " Examples: check_snmp_mem.pl -H 127.0.0.1 -C public -w 90 -c 95 " ); # plugin arguments $np->add_arg( spec => "host|H=s", help => "ip address or hostname of device", required => 1, ); $np->add_arg( spec => "community|C=s", help => "snmp community string", required => 1, ); $np->add_arg( spec => "warning|w=i", help => "usage in percent, when a WARNING is returned", required => 1, ); $np->add_arg( spec => "critical|c=i", help => " mem usage in percent, when a CRITICAL is returned +", required => 1, ); $np->getopts; # perform sanity checking on command line options if ( (defined $np->opts->warning) && ($np->opts->warning < 0 || $np->o +pts->warning > 100) ) { $np->nagios_die( " invalid number supplied for the -w option: ente +r a value between 0 and 100 " ); } if ( (defined $np->opts->warning) && ($np->opts->critical < 0 || $np-> +opts->critical > 100) ) { $np->nagios_die( " invalid number supplied for the -c option: ente +r a value between 0 and 100 " ); } if ( (defined $np->opts->warning) && ( $np->opts->warning > $np->opts- +>critical) ) { $np->nagios_die( " invalid number supplied for the -w option: warn +ing threshold should be smaller than critical threshold " ); } my $memRealTotalOID = '.1.3.6.1.4.1.2021.4.5.0'; my $memRealFreeOID = '.1.3.6.1.4.1.2021.4.6.0'; my $memRealCachedOID = '.1.3.6.1.4.1.2021.4.15.0'; my $memRealBuffersOID = '.1.3.6.1.4.1.2021.4.14.0'; my ($session, $error) = Net::SNMP->session( -hostname => $np->opts->host, -community => $np->opts->community, ); if (!defined $session) { $np->nagios_exit (WARNING, $error) #printf "ERROR: %s.\n", $error; } my $memRealFree = $session->get_request(-varbindlist => [ $memRealF +reeOID],); my $memRealTotal = $session->get_request(-varbindlist => [ $memReal +TotalOID],); my $memRealCached = $session->get_request(-varbindlist => [ $memRea +lCachedOID],); my $memRealBuffers = $session->get_request(-varbindlist => [ $memRe +alBuffersOID],); $session->close(); my $buffers = $memRealBuffers->{$memRealBuffersOID}; my $cache = $memRealCached->{$memRealCachedOID}; my $total= $memRealTotal->{$memRealTotalOID}; my $free = $memRealFree->{$memRealFreeOID}; my $memRealUsed = $total - $free; my $memRealUsedMB = round ($memRealUsed / 1024); my $totalMB = round($total / 1024); my $realTPercent = (($memRealUsed - $buffers - $cache)/ $total) * 10 +0; my $realPercent = sprintf "%.2f", $realTPercent; $np->add_perfdata( label => "Free", value => $free, uom => "KB" ); $np->add_perfdata( label => "Total", value => $total, uom => "KB" ); $np->add_perfdata( label => "Cached", value => $cache, uom => "KB" ); $np->add_perfdata( label => "Buffered", value => $buffers, uom => "KB" ); ##################################################################### +######### # check the result against the defined warning and critical thresholds +, # output the result and exit $np->nagios_exit( return_code => $np->check_threshold($realPercent), message => " used: $realPercent% with $memRealUsedMB MB of $total +MB MB free" );
In reply to Re^4: best way to monitor real memory usage on linux
by mariog
in thread best way to monitor real memory usage on linux
by mariog
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |