diff --git a/plugins/router/snmp__mikrotik_ram b/plugins/router/snmp__mikrotik_ram new file mode 100755 index 00000000..5c6c3d54 --- /dev/null +++ b/plugins/router/snmp__mikrotik_ram @@ -0,0 +1,106 @@ +#!/usr/bin/perl -w +# +# Copyright (C) 2019 Alejandro Suarez (teconecta.es) +# +# Munin plugin to monitor Mikrotik routers RAM utilization. +# Based on snmp__if_ plugin. +# +# 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; version 2 dated June, +# 1991. +# +# 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. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +#%# family=snmpauto +#%# capabilities=snmpconf + +use strict; +use Net::SNMP; + +my $DEBUG = 0; + +my $host = $ENV{host} || undef; +my $port = $ENV{port} || 161; +my $community = $ENV{community} || "public"; + +my $response; + +if (defined $ARGV[0] and $ARGV[0] eq "snmpconf") +{ + print "require 1.3.6.1.2.1.25.2.3.1.5.65536 \n"; + exit 0; +} + +if ($0 =~ /^(?:|.*\/)snmp_([^_]+)_mikrotik_ram$/) +{ + $host = $1; + if ($host =~ /^([^:]+):(\d+)$/) + { + $host = $1; + $port = $2; + } +} +elsif (!defined($host)) +{ + print "# Debug: $0 -- $1\n" if $DEBUG; + die "# Error: couldn't understand what I'm supposed to monitor."; +} + +my $sysRAMUsage = "1.3.6.1.2.1.25.2.3.1.6.65536"; +my $sysRAMTotal = "1.3.6.1.2.1.25.2.3.1.5.65536"; + +my ($session, $error) = Net::SNMP->session( + -hostname => $host, + -community => $community, + -port => $port + ); + + +if (!defined ($session)) +{ + die "Croaking: $error"; +} + + +if ($ARGV[0] and $ARGV[0] eq "config") +{ + print "host_name $host\n"; + if (!defined ($response = $session->get_request($sysRAMTotal))) + { + die "Croaking: " . $session->error(); + } +# print "graph_args --base 1000 -r --lower-limit 0 --upper-limit 100\n"; + print "graph_args --base 1024 -l 0 --vertical-label Bytes --upper-limit " . ($response->{$sysRAMTotal} * 1024) . "\n"; + print "graph_title RAM usage\n"; + print "graph_category system\n"; + print "graph_info This graph shows the router's memory usage.\n"; + print "graph_order Total Used\n"; + print "graph_vlabel bytes\n"; + print "sysRAMTotal.label Total Memory\n"; + print "sysRAMTotal.draw AREA\n"; + print "sysRAMUsage.label Used Memory\n"; + print "sysRAMUsage.draw AREA\n"; + exit 0; +} + + +if (defined ($response = $session->get_request(-varbindlist => [$sysRAMUsage, $sysRAMTotal]))) +{ + print "sysRAMUsage.value ", $response->{$sysRAMUsage}*1024, "\n"; + print "sysRAMTotal.value ", $response->{$sysRAMTotal}*1024, "\n"; +} +else +{ + print "sysRAMUsage.value U\n"; +} + +# vim:syntax=perl