#!/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"; } else { print "no (unable to list system stats)\n"; } } else { print "no (ntpdc not found)\n"; } exit 0; } 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 time\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