mirror of
https://github.com/munin-monitoring/contrib.git
synced 2018-11-08 00:59:34 +01:00
141 lines
3.7 KiB
Plaintext
141 lines
3.7 KiB
Plaintext
|
#!/usr/bin/perl -w
|
||
|
|
||
|
# Plugin copyright Bjorn Ruberg <bjorn@ruberg.no> 20052006
|
||
|
#
|
||
|
# Licensed under GPLv2. Be nice.
|
||
|
#
|
||
|
# Environment variables:
|
||
|
#
|
||
|
# - dbstat The full path to a db_stat binary able to
|
||
|
# communicate with the LDAP backend BDB
|
||
|
# database files.
|
||
|
# - dbdir The full path to the directory where
|
||
|
# the LDAP backend BDB database files are.
|
||
|
# - title (Optional) The plugin's title. Useful if you
|
||
|
# have more than one DIT installed.
|
||
|
# - warning (Optional) A threshold integer value. Triggers
|
||
|
# plugin to send warnings if cache percentage
|
||
|
# drops below the given value.
|
||
|
#
|
||
|
# Limitations:
|
||
|
#
|
||
|
# - The plugin only checks _one_ database directory. To work
|
||
|
# around that, i.e. if you have more than one DIT in your
|
||
|
# OpenLDAP, create symlinked files and corresponding entries
|
||
|
# in the Munin environment file(s).
|
||
|
#
|
||
|
# Magic markers
|
||
|
#%# family=auto
|
||
|
#%# capabilities=autoconf suggest
|
||
|
|
||
|
|
||
|
use strict;
|
||
|
use vars qw ( $measure $config $dbdir $dbstat $warning);
|
||
|
my $arg = shift (@ARGV);
|
||
|
|
||
|
# Finding dbN.N_stat should be done here
|
||
|
$dbstat = ($ENV{'dbstat'} || "/usr/bin/db4.2_stat");
|
||
|
die ("Can't execute db_stat file '$dbstat'") unless -x $dbstat;
|
||
|
|
||
|
# Also the LDAP database files
|
||
|
$dbdir = ($ENV{'dbdir'} || "/var/lib/ldap");
|
||
|
die ("Can't open database directory '$dbdir'") unless (-d $dbdir && -r $dbdir);
|
||
|
|
||
|
# And the graph title
|
||
|
my $title = ($ENV{'title'} || '');
|
||
|
|
||
|
# Die if no valid file ending, unless suggest/autoconf.
|
||
|
if ($0 !~ /_(pages|percent)$/) {
|
||
|
unless ($arg && $arg =~ /^(suggest|autoconf)$/) {
|
||
|
die ("Plugin must be suffixed with 'percent' or 'pages'. Try running 'munin-node-configure suggest'");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
# Check file name
|
||
|
if ($0 =~ /_pages$/) {
|
||
|
$measure = "pages";
|
||
|
} elsif ($0 =~ /_percent$/) {
|
||
|
$measure = "percent";
|
||
|
}
|
||
|
|
||
|
# Parse command line arguments
|
||
|
if ($arg && $arg eq "config") {
|
||
|
$config = 1;
|
||
|
} elsif ($arg && $arg eq "autoconf") {
|
||
|
print "yes\n";
|
||
|
exit 0;
|
||
|
} elsif ($arg && $arg eq "suggest") {
|
||
|
print "pages\n";
|
||
|
print "percent\n";
|
||
|
exit 0;
|
||
|
}
|
||
|
|
||
|
|
||
|
if ($config) {
|
||
|
print <<EOF;
|
||
|
graph_title Requested pages found in cache $title
|
||
|
graph_category OpenLDAP
|
||
|
graph_info Pages found in cache (indexes)
|
||
|
EOF
|
||
|
if ($measure eq "pages") {
|
||
|
print <<EOF;
|
||
|
graph_args --base 1000 -l 0
|
||
|
graph_vlabel Cache hits per \${graph_period}
|
||
|
EOF
|
||
|
} else {
|
||
|
print <<EOF;
|
||
|
graph_args --base 1000 --upper-limit 100 -l 0 --vertical-label %
|
||
|
graph_vlabel Cache hits (percentage)
|
||
|
EOF
|
||
|
}
|
||
|
}
|
||
|
|
||
|
my @output = `$dbstat -h $dbdir -m`;
|
||
|
my $file = ""; # "Total";
|
||
|
my $pages = undef;
|
||
|
my $percent = undef;
|
||
|
my $counter = 0;
|
||
|
|
||
|
foreach my $line (@output) {
|
||
|
chomp $line;
|
||
|
if ($line =~ /^Pool File\: (.*)$/) {
|
||
|
$file = $1;
|
||
|
}
|
||
|
if ($file &&
|
||
|
$line =~ /^(\d+)\s+Requested pages found in the cache \((\d+)\%\)/) {
|
||
|
$pages = $1;
|
||
|
$percent = $2;
|
||
|
}
|
||
|
if ($file && defined ($pages) && defined ($percent)) {
|
||
|
$file =~ s/\.bdb$//;
|
||
|
my $val = "slapd_bdb_cache_${measure}_${file}";
|
||
|
if ($config) {
|
||
|
print "$val.label $file\n";
|
||
|
if ($measure eq "pages") {
|
||
|
print "$val.type DERIVE\n";
|
||
|
print "$val.min 0\n";
|
||
|
if ($counter == 0) {
|
||
|
print "$val.draw AREA\n";
|
||
|
} else {
|
||
|
print "$val.draw STACK\n";
|
||
|
}
|
||
|
print "$val.info Number of $file pages found in cache\n";
|
||
|
} else {
|
||
|
print "$val.type GAUGE\n";
|
||
|
print "$val.info Percentage of $file pages found in cache\n";
|
||
|
print "$val.warning $warning:\n" if $ENV{'warning'};
|
||
|
}
|
||
|
} else {
|
||
|
if ($measure eq "pages") {
|
||
|
print "$val.value $pages\n";
|
||
|
} else {
|
||
|
print "$val.value $percent\n";
|
||
|
}
|
||
|
}
|
||
|
$file = "";
|
||
|
$pages = undef;
|
||
|
$percent = undef;
|
||
|
$counter++;
|
||
|
}
|
||
|
}
|