From 7ae53db10a39f24744a8b5fe6633e6b6efbd1da3 Mon Sep 17 00:00:00 2001 From: Guillaume Blairon Date: Fri, 19 Jun 2009 18:52:41 +0200 Subject: [PATCH] Initial version --- plugins/other/snmp__netapp_nfs3calls | 182 +++++++++++++++++++++++++++ 1 file changed, 182 insertions(+) create mode 100755 plugins/other/snmp__netapp_nfs3calls diff --git a/plugins/other/snmp__netapp_nfs3calls b/plugins/other/snmp__netapp_nfs3calls new file mode 100755 index 00000000..2e0c2a42 --- /dev/null +++ b/plugins/other/snmp__netapp_nfs3calls @@ -0,0 +1,182 @@ +#!/usr/bin/perl + +=head1 NAME + +snmp__netapp_nfs3calls - Munin plugin to retrieve NFSv3 calls types +stats from NetApp storage appliances. + +=head1 APPLICABLE SYSTEMS + +NFSv3 calls stats should be reported by any NetApp storage appliance +with SNMP agent daemon activated. See na_snmp(8) for details. + +=head1 CONFIGURATION + +Unfortunately, SNMPv3 is not fully supported on all NetApp equipments. +For this reason, this plugin will use SNMPv2 by default, which is +insecure because it doesn't encrypt the community string. + +The following parameters will help you get this plugin working : + +[snmp_*] +env.community MyCommunity + +If your community name is 'public', you should really worry about +security and immediately reconfigure your appliance. + +Please see 'perldoc Munin::Plugin::SNMP' for further configuration. + +=head1 INTERPRETATION + +The plugin reports various NFSv3 calls by type. This can help you +determine what calls types are killing your appliance under heavy +loads. + +=head1 MIB INFORMATION + +This plugin requires support for the NETWORK-APPLIANCE-MIB issued by +Network Appliance. It reports the content of the v3Calls OID. + +=head1 MAGIC MARKERS + +#%# family=snmpauto +#%# capabilities=snmpconf + +=head1 VERSION + +v1.0 - 06/19/2009 18:36:02 CEST +Initial revision + +=head1 AUTHOR + +This plugin is copyright (c) 2009 by Guillaume Blairon. + +NetApp is a registered trademark and Network Appliance is a trademark +of Network Appliance, Inc. in the U.S. and other countries. + +=head1 BUGS + +This plugin wasn't tested on many hardware. If you encounter bugs, +please report any to Guillaume Blairon ELE. + +=head1 LICENSE + +GPLv2 or (at your option) any later version. + +=cut + +use strict; +use warnings; +use Munin::Plugin::SNMP; +use vars qw($DEBUG); + +$DEBUG = $ENV{'MUNIN_DEBUG'}; + +my @palette = + #Better colours from munin 1.3.x + #Greens Blues Oranges Dk yel Dk blu Purple Lime Reds Gray + qw(00CC00 0066B3 FF8000 FFCC00 330099 990099 CCFF00 FF0000 808080 + 008F00 00487D B35A00 B38F00 6B006B 8FB300 B30000 BEBEBE + 80FF80 80C9FF FFC080 FFE680 AA80FF EE00CC FF8080 + 666600 FFBFFF 00FFCC CC6699 999900); + +my %oids = ( + nulls => 'NFSPROC3_NULL (Do Nothing)', + getattrs => 'NFSPROC3_GETATTR (Get File Attributes)', + setattrs => 'NFSPROC3_SETATTR (Set File Attributes)', + lookups => 'NFSPROC3_LOOKUP (Lookup Filename)', + accesss => 'NFSPROC3_ACCESS (Check Access Permission)', + readlinks => 'NFSPROC3_READLINK (Read from Symbolic Link)', + reads => 'NFSPROC3_READ (Read from File)', + writes => 'NFSPROC3_WRITE (Write to File)', + creates => 'NFSPROC3_CREATE (Create a File)', + mkdirs => 'NFSPROC3_MKDIR (Create a Directory)', + symlinks => 'NFSPROC3_SYMLINK (Create a Symbolic Link)', + mknods => 'NFSPROC3_MKNOD (Create a Special Device)', + removes => 'NFSPROC3_REMOVE (Remove a File)', + rmdirs => 'NFSPROC3_RMDIR (Remove a Directory)', + renames => 'NFSPROC3_RENAME (Rename a File or Directory)', + links => 'NFSPROC3_LINK (Create Link to an Object)', + readdirs => 'NFSPROC3_READDIR (Read from Directory)', + readdirpluss => 'NFSPROC3_READDIRPLUS (Extended Read from Directory)', + fsstats => 'NFSPROC3_FSSTAT (Get Dynamic File System Information)', + fsinfos => 'NFSPROC3_FSINFO (Get Static File System Information)', + pathconfs => 'NFSPROC3_PATHCONF (Retrieve POSIX Information)', + commits => 'NFSPROC3_COMMIT (Commit Cached Data on a Server to Stable Storage)', +); + +if (defined $ARGV[0] and $ARGV[0] eq 'snmpconf') { + print "require 1.3.6.1.4.1.789.1.3.1.2.4.1.1.0 [0-9]\n"; + exit 0; +} + +my $session = Munin::Plugin::SNMP->session(); + +if (defined $ARGV[0] and $ARGV[0] eq "config") { + + my ($host, undef, undef, undef) = Munin::Plugin::SNMP->config_session(); + + print "host_name $host\n" unless $host eq 'localhost'; + print "graph_title $host NFSv3 calls\n"; + print "graph_args --base 1000\n"; + print "graph_vlabel calls / \${graph_period}\n"; + print "graph_category nfs\n"; + print "graph_info This graph shows NFSv3 calls for the $host NetApp equipment.\n"; + print "graph_order "; + + foreach (sort keys %oids) { print "$_ "; } + print "\n"; + + my $c = 0; + foreach my $k (sort keys %oids) { + my $i = $oids{$k}; + my $l = $k; + $l =~ s/s$//g; + print "$k.info The number of NFS Version 3 calls received for the $i procedure, since the last time the statistics were cleared.\n"; + print "$k.type DERIVE\n"; + print "$k.label $l\n"; + print "$k.min 0\n"; + print "$k.colour $palette[$c]\n"; + $c++; + } + + exit 0; +} + +my $values = $session->get_hash( + -baseoid => '1.3.6.1.4.1.789.1.3.1.2.4.1', + -cols => { + 1 => 'nulls', + 2 => 'getattrs', + 3 => 'setattrs', + 4 => 'lookups', + 5 => 'accesss', + 6 => 'readlinks', + 7 => 'reads', + 8 => 'writes', + 9 => 'creates', + 10 => 'mkdirs', + 11 => 'symlinks', + 12 => 'mknods', + 13 => 'removes', + 14 => 'rmdirs', + 15 => 'renames', + 16 => 'links', + 17 => 'readdirs', + 18 => 'readdirpluss', + 19 => 'fsstats', + 20 => 'fsinfos', + 21 => 'pathconfs', + 22 => 'commits', + }, +); + +foreach my $k (keys %oids) { + my $v = 'U'; + $v = $values->{0}->{$k} if (defined $values); + print "$k.value $v\n"; +} + +exit 0; + +__END__