/usr/share/munin/plugins/ntp_ is in munin-node 1.4.6-3ubuntu3.4.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 | #!/usr/bin/perl -w
# -*- perl -*-
=head1 NAME
ntp_ - Plugin to monitor NTP statistics
=head1 CONFIGURATION
The following environment variables are used by this plugin:
[ntp_*]
env.lowercase - lowercase hostnames after lookup
env.nodelay 1 - Set to 1 to remove delay
=head1 NOTES
This plugin is now "manual" because it's not very useful, it is
imposible to determine which peer is used as "master". There is a
ntp_offset plugin that reports a more useful value.
=head1 AUTHOR
Author unknown
=head1 LICENSE
License unknown
=head1 MAGIC MARKERS
#%# family=manual
#%# capabilities=autoconf suggest
=cut
use strict;
use Net::hostent;
use Socket;
my $nodelay = $ENV{'nodelay'} || 0;
if ($ARGV[0] and $ARGV[0] eq "autoconf") {
`ntpq -c help >/dev/null 2>/dev/null`;
if ($? eq "0") {
if (`ntpq -c "hostnames no" -c peers | wc -l` > 0) {
print "yes\n";
exit 0;
} else {
print "no (unable to list peers)\n";
exit 0;
}
} else {
print "no (ntpq not found)\n";
exit 0;
}
}
if ($ARGV[0] and $ARGV[0] eq "suggest") {
my @lines = `ntpq -c "hostnames no" -c peers`;
foreach (@lines) {
next unless /^.(\d+\.\d+\.\d+\.\d+)/;
next if /^.224\.0\.1\.1/;
my $addr = $1;
my $name;
if( my $lcid= /^.127\.127\.1\.(\d+)/) {
$lcid = $lcid - 1;
$name = "LOCAL($lcid)";
} else {
$name = gethostbyaddr(inet_aton($addr));
$name = defined $name ? $name->name : $addr;
}
$name = lc $name if exists $ENV{"lowercase"};
$name =~ s/[\.\-()]/_/g;
print $name, "\n";
}
exit 0;
}
$0 =~ /ntp_(.+)*$/;
my $name = $1;
die "No hostname provided" unless defined $name;
if ($ARGV[0] and $ARGV[0] eq "config") {
my @lines = `ntpq -c "hostnames no" -c peers`;
my $host;
foreach (@lines) {
next unless /^.(\d+\.\d+\.\d+\.\d+)/;
next if /^.224\.0\.1\.1/;
my $addr = $1;
my $host;
if( my $lcid= /^.127\.127\.1\.(\d+)/) {
$lcid = $lcid - 1;
$host = "LOCAL($lcid)"
} else {
$host = gethostbyaddr(inet_aton($addr));
$host = defined $host ? $host->name : $addr;
}
$host = lc $host if exists $ENV{"lowercase"};
my $host_ = $host;
$host_ =~ s/[\.\-()]/_/g;
next unless $host_ eq $name;
print "graph_title NTP statistics for peer $host\n";
}
print "graph_args --base 1000 --vertical-label seconds --lower-limit 0\n";
print "graph_category time\n";
print "delay.label Delay\n";
print "delay.draw LINE\n";
print "delay.graph no\n" if $nodelay;
print "delay.cdef delay,1000,/\n";
print "offset.label Offset\n";
print "offset.draw LINE\n";
print "offset.cdef offset,1000,/\n";
print "jitter.label Jitter\n";
print "jitter.draw LINE\n";
print "jitter.cdef jitter,1000,/\n";
exit 0;
}
my @lines = `ntpq -c "hostnames no" -c peers`;
foreach (@lines) {
next unless /^.(\d+\.\d+\.\d+\.\d+)/;
next if /^.224\.0\.1\.1/;
my $addr = $1;
my $host;
if( my $lcid= /^.127\.127\.1\.(\d+)/) {
$lcid = $lcid - 1;
$host = "LOCAL($lcid)"
} else {
$host = gethostbyaddr(inet_aton($addr));
$host = defined $host ? $host->name : $addr;
}
$host = lc $host if exists $ENV{"lowercase"};
$host =~ s/[\.\-()]/_/g;
next unless $host eq $name;
my @F = split;
print <<"EOT";
delay.value $F[7]
offset.value $F[8]
jitter.value $F[9]
EOT
}
exit 0;
# vim:syntax=perl
|