diff options
| -rwxr-xr-x | plugins-scripts/check_ntp.pl | 32 |
1 files changed, 26 insertions, 6 deletions
diff --git a/plugins-scripts/check_ntp.pl b/plugins-scripts/check_ntp.pl index 331f8556..560a8775 100755 --- a/plugins-scripts/check_ntp.pl +++ b/plugins-scripts/check_ntp.pl | |||
| @@ -50,7 +50,7 @@ | |||
| 50 | # Modifed to run under Embedded Perl (sghosh@users.sf.net) | 50 | # Modifed to run under Embedded Perl (sghosh@users.sf.net) |
| 51 | # - combined logic some blocks together.. | 51 | # - combined logic some blocks together.. |
| 52 | # | 52 | # |
| 53 | # Todo - non-hardcoded dispersion values... | 53 | # Added ntpdate check for stratum 16 desynch peer (James Fidell) Feb 03, 2003 |
| 54 | # | 54 | # |
| 55 | 55 | ||
| 56 | 56 | ||
| @@ -111,6 +111,8 @@ if ($critical < $warning ) { | |||
| 111 | exit $ERRORS{"UNKNOWN"}; | 111 | exit $ERRORS{"UNKNOWN"}; |
| 112 | } | 112 | } |
| 113 | 113 | ||
| 114 | my $stratum = -1; | ||
| 115 | my $ignoreret = 0; | ||
| 114 | my $answer = undef; | 116 | my $answer = undef; |
| 115 | my $offset = undef; | 117 | my $offset = undef; |
| 116 | my $msg; # first line of output to print if format is invalid | 118 | my $msg; # first line of output to print if format is invalid |
| @@ -137,7 +139,7 @@ alarm($TIMEOUT); | |||
| 137 | 139 | ||
| 138 | 140 | ||
| 139 | ### | 141 | ### |
| 140 | ###$dispersion_error = $ERRORS{' | 142 | ### |
| 141 | ### First, check ntpdate | 143 | ### First, check ntpdate |
| 142 | ### | 144 | ### |
| 143 | ### | 145 | ### |
| @@ -150,6 +152,11 @@ if (!open (NTPDATE, "$utils::PATH_TO_NTPDATE -q $host 2>&1 |")) { | |||
| 150 | while (<NTPDATE>) { | 152 | while (<NTPDATE>) { |
| 151 | print if ($verbose); | 153 | print if ($verbose); |
| 152 | $msg = $_ unless ($msg); | 154 | $msg = $_ unless ($msg); |
| 155 | |||
| 156 | if (/stratum\s(\d+)/) { | ||
| 157 | $stratum = $1; | ||
| 158 | } | ||
| 159 | |||
| 153 | if (/(offset|adjust)\s+([-.\d]+)/i) { | 160 | if (/(offset|adjust)\s+([-.\d]+)/i) { |
| 154 | $offset = $2; | 161 | $offset = $2; |
| 155 | 162 | ||
| @@ -163,8 +170,15 @@ while (<NTPDATE>) { | |||
| 163 | } | 170 | } |
| 164 | 171 | ||
| 165 | if (/no server suitable for synchronization found/) { | 172 | if (/no server suitable for synchronization found/) { |
| 166 | $ntpdate_error = $ERRORS{"CRITICAL"}; | 173 | if ($stratum == 16) { |
| 167 | $msg = "No suitable peer server found - "; | 174 | $ntpdate_error = $ERRORS{"WARNING"}; |
| 175 | $msg = "Desynchronized peer server found"; | ||
| 176 | $ignoreret=1; | ||
| 177 | } | ||
| 178 | else { | ||
| 179 | $ntpdate_error = $ERRORS{"CRITICAL"}; | ||
| 180 | $msg = "No suitable peer server found - "; | ||
| 181 | } | ||
| 168 | } | 182 | } |
| 169 | 183 | ||
| 170 | } | 184 | } |
| @@ -172,7 +186,7 @@ while (<NTPDATE>) { | |||
| 172 | close (NTPDATE); | 186 | close (NTPDATE); |
| 173 | # declare an error if we also get a non-zero return code from ntpdate | 187 | # declare an error if we also get a non-zero return code from ntpdate |
| 174 | # unless already set to critical | 188 | # unless already set to critical |
| 175 | if ( $? ) { | 189 | if ( $? && !$ignoreret ) { |
| 176 | print "stderr = $? : $! \n" if $verbose; | 190 | print "stderr = $? : $! \n" if $verbose; |
| 177 | $ntpdate_error = $ntpdate_error == $ERRORS{"CRITICAL"} ? $ERRORS{"CRITICAL"} : $ERRORS{"UNKNOWN"} ; | 191 | $ntpdate_error = $ntpdate_error == $ERRORS{"CRITICAL"} ? $ERRORS{"CRITICAL"} : $ERRORS{"UNKNOWN"} ; |
| 178 | print "ntperr = $ntpdate_error : $!\n" if $verbose; | 192 | print "ntperr = $ntpdate_error : $!\n" if $verbose; |
| @@ -208,7 +222,13 @@ if ($have_ntpdc) { | |||
| 208 | 222 | ||
| 209 | if ($ntpdate_error != $ERRORS{'OK'}) { | 223 | if ($ntpdate_error != $ERRORS{'OK'}) { |
| 210 | $state = $ntpdate_error; | 224 | $state = $ntpdate_error; |
| 211 | $answer = $msg . "Server for ntp probably down\n"; | 225 | if ($ntpdate_error == $ERRORS{'WARNING'} ) { |
| 226 | $answer = $msg . "\n"; | ||
| 227 | } | ||
| 228 | else { | ||
| 229 | $answer = $msg . "Server for ntp probably down\n"; | ||
| 230 | } | ||
| 231 | |||
| 212 | if (defined($offset) && abs($offset) > $critical) { | 232 | if (defined($offset) && abs($offset) > $critical) { |
| 213 | $state = $ERRORS{'CRITICAL'}; | 233 | $state = $ERRORS{'CRITICAL'}; |
| 214 | $answer = "Server Error and time difference $offset seconds greater than +/- $critical sec\n"; | 234 | $answer = "Server Error and time difference $offset seconds greater than +/- $critical sec\n"; |
