summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: a664c79)
raw | patch | inline | side by side (parent: a664c79)
author | Florian Forster <octo@noris.net> | |
Wed, 23 Dec 2009 11:40:14 +0000 (12:40 +0100) | ||
committer | Florian Forster <octo@noris.net> | |
Wed, 23 Dec 2009 11:40:14 +0000 (12:40 +0100) |
contrib/snmp-probe-host.px | patch | blob | history |
index 1d8f975b6a6066f41b94e4b18bb96dbf38ceb089..d1a7a88616c55f50af9e15bfa73b9740930a5436 100755 (executable)
#!/usr/bin/perl
#
# collectd - snmp-probe-host.px
-# Copyright (C) 2008 Florian octo Forster
+# Copyright (C) 2008,2009 Florian octo Forster
+# Copyright (C) 2009 noris network AG
#
# 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
use Getopt::Long ('GetOptions');
use Socket6;
+our %ExcludeOptions =
+(
+ 'IF-MIB64' => qr/^\.?1\.3\.6\.1\.2\.1\.31/,
+ 'IF-MIB32' => qr/^\.?1\.3\.6\.1\.2\.1\.2/
+);
+
sub get_config
{
my %conf;
{
my $sess = shift;
my $conf = shift;
+ my $excludes = @_ ? shift : [];
my @oids;
my $cmd = 'GET';
my $vl;
$oid_orig = $tmp;
}
+ for (@$excludes)
+ {
+ if ($oid_orig =~ $_)
+ {
+ return;
+ }
+ }
+
$vb = SNMP::Varbind->new ([$oid_orig]);
if ($cmd eq 'GET')
my $host = shift;
my $community = shift;
my $data = shift;
+ my $excludes = @_ ? shift : [];
my $version = 2;
my @valid_data = ();
my $begin;
for (keys %$data)
{
my $name = $_;
- if (probe_one ($sess, $data->{$name}))
+ if (probe_one ($sess, $data->{$name}, $excludes))
{
push (@valid_data, $name);
}
-C | --config Path to config file holding the SNMP data blocks.
-c | --community SNMP community to use. Default: `public'.
-h | --help Print this information and exit.
+ -x | --exclude Exclude a specific MIB. Call with "help" for more
+ information.
USAGE
exit (1);
}
+sub exit_usage_exclude
+{
+ print "Available exclude MIBs:\n\n";
+ for (sort (keys %ExcludeOptions))
+ {
+ print " $_\n";
+ }
+ print "\n";
+ exit (1);
+}
+
=head1 NAME
snmp-probe-host.px - Find out what information an SNMP device provides.
my $community = 'public';
my $conf;
my $working_data;
+my @excludes = ();
=head1 OPTIONS
SNMP community to use. Should be pretty straight forward.
+=item B<--exclude> I<MIB>
+
+This option can be used to exclude specific data from being enabled in the
+generated config. Currently the following MIBs are understood:
+
+=over 4
+
+=item B<IF-MIB>
+
+Exclude interface information, such as I<ifOctets> and I<ifPackets>.
+
+=back
+
=back
=cut
GetOptions ('H|host|hostname=s' => \$host,
'C|conf|config=s' => \$file,
'c|community=s' => \$community,
+ 'x|exclude=s' => \@excludes,
'h|help' => \&exit_usage) or die;
if (!$host)
exit (1);
}
+if (@excludes)
+{
+ my $tmp = join (',', @excludes);
+ my @tmp = split (/\s*,\s*/, $tmp);
+
+ @excludes = ();
+ for (@tmp)
+ {
+ my $mib = uc ($_);
+ if ($mib eq 'HELP')
+ {
+ exit_usage_exclude ();
+ }
+ elsif (!exists ($ExcludeOptions{$mib}))
+ {
+ print STDERR "No such MIB: $mib\n";
+ exit_usage_exclude ();
+ }
+ push (@excludes, $ExcludeOptions{$mib});
+ }
+}
+
$conf = get_config ($file) or die ("Cannot read config");
if (!defined ($conf->{'plugin'})
exit (1);
}
-probe_all ($host, $community, $conf->{'plugin'}{'snmp'}{'data'});
+probe_all ($host, $community, $conf->{'plugin'}{'snmp'}{'data'}, \@excludes);
exit (0);