diff --git a/plugins/other/ntp_queries b/plugins/other/ntp_queries new file mode 100755 index 00000000..18002eba --- /dev/null +++ b/plugins/other/ntp_queries @@ -0,0 +1,150 @@ +#!/usr/bin/perl -w + +# Plugin to monitor ntp queries +# (c)2009 Chris Hastie: chris (at) oak (hyphen) wood (dot) co (dot) uk +# +# Parameters understood: +# +# config (required) +# autoconf (optional - used by munin-node-configure) +# +# Config variables: +# +# ntpdc - path to ntpdc program +# +# 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, either version 3 of the License, or +# (at your option) any later version. +# +# 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, see . +# +# Change log +# v1.0.0 2009-03-11 Chris Hastie +# initial release +# +# +# +# Magic markers - optional - used by installation scripts and +# munin-node-configure: +# +#%# family=contrib +#%# capabilities=autoconf +# + +use strict; +use Socket; + +my $NTPDC = $ENV{ntpdc} || "ntpdc"; +my $COMMAND = "$NTPDC -c sysstats"; + + +# autoconf +if ($ARGV[0] and $ARGV[0] eq "autoconf") { + `$NTPDC -c help >/dev/null 2>/dev/null`; + if ($? eq "0") { + if (`$NTPDC -c sysstats | wc -l` > 0) { + print "yes\n"; + exit 0; + } else { + print "no (unable to list system stats)\n"; + exit 1; + } + } else { + print "no (ntpdc not found)\n"; + exit 1; + } +} + +my $queries = 0; +my $packrcv; +my $packproc; + + +# get data from tc +open(SERVICE, "$COMMAND |") + or die("Could not execute '$COMMAND': $!"); + +while () { + if (/^packets received:\s*(\d*)/) { + $packrcv = $1; + } + if (/^packets processed:\s*(\d*)/) { + $packproc = $1; + } + if (/^current version:\s*(\d*)/) { + $queries += $1; + } + if (/^previous version:\s*(\d*)/) { + $queries += $1; + } + if (/^bad version:\s*(\d*)/) { + $queries += $1; + } + # if (/^access denied:\s*(\d*)/) { + # $queries += $1; + # } + # if (/^bad length or format:\s*(\d*)/) { + # $queries += $1; + # } + # if (/^bad authentication:\s*(\d*)/) { + # $queries += $1; + # } + # if (/^rate exceeded:\s*(\d*)/) { + # $queries += $1; + # } + +} +close(SERVICE); + +$queries = $queries - $packproc; + +# config +if ($ARGV[0] and $ARGV[0] eq 'config') { + print "graph_title NTP Queries\n"; + print "graph_args --base 1000\n"; + print "graph_vlabel qps\n"; + print "graph_category ntp\n"; + print "graph_info Queries to the NTP server\n"; + print "queries.label Queries per second\n"; + print "queries.type DERIVE\n"; + print "queries.min 0\n"; + + exit 0; +} + +# send output + +print "queries.value $queries\n"; + +################################## + + +=pod + +=head1 Description + +ntp_queries - A munin plugin to monitor queries handled by NTP + +=head1 Parameters understood: + + config (required) + autoconf (optional - used by munin-node-configure) + +=head1 Configuration variables: + +All configuration parameters are optional + + ntpdc - path to ntpdc program + + +=head1 Known issues + + +=cut \ No newline at end of file