[Pkg-nagios-devel] Bug#587590: nagios-plugins-basic: Please add the attached patch for faster checking of Postfix queues
Russell Coker
russell at coker.com.au
Wed Jun 30 03:26:53 UTC 2010
Package: nagios-plugins-basic
Version: 1.4.12-5
Severity: normal
The "mailq" command reads the headers of each message, if there are many
thousands of messages that can regularly take long enough to cause a timeout.
The following patch (against version 1.4.12-5) adds a new option -M
postfix-fast to use find instead of mailq, it usually runs about 1,000 times
faster!
The same bug appears to be present in 1.4.14-5, I will make and test a patch
for that shortly and update this bug report accordingly.
--- /usr/lib/nagios/plugins/check_mailq 2010-06-24 09:32:13.000000000 +0000
+++ ./check_mailq 2010-06-30 03:20:07.000000000 +0000
@@ -293,6 +293,43 @@
}
} # end of ($mailq eq "sendmail")
+elsif ( $mailq eq "postfix-fast" ) {
+ if (! open (MAILQ, "/usr/bin/find /var/spool/postfix/defer /var/spool/postfix/hold -type f|/usr/bin/wc -l|") ) {
+ print "ERROR: could not run find on the mail spool \n";
+ exit $ERRORS{'UNKNOWN'};
+ }
+ $msg_q = <MAILQ>;
+ close MAILQ;
+
+ if ( $? ) {
+ print "CRITICAL: Error code ".($?>>8)." returned from $utils::PATH_TO_MAILQ",$/;
+ exit $ERRORS{CRITICAL};
+ }
+
+ ## shut off the alarm
+ alarm(0);
+
+ # check queue length(s)
+ if ($msg_q == 0){
+ $msg = "OK: mailq reports queue is empty";
+ $state = $ERRORS{'OK'};
+ } else {
+ print "msg_q = $msg_q warn=$opt_w crit=$opt_c\n" if $verbose;
+
+ # overall queue length
+ if ($msg_q < $opt_w) {
+ $msg = "OK: mailq ($msg_q) is below threshold ($opt_w/$opt_c)";
+ $state = $ERRORS{'OK'};
+ }elsif ($msg_q >= $opt_w && $msg_q < $opt_c) {
+ $msg = "WARNING: mailq is $msg_q (threshold w = $opt_w)";
+ $state = $ERRORS{'WARNING'};
+ }else {
+ $msg = "CRITICAL: mailq is $msg_q (threshold c = $opt_c)";
+ $state = $ERRORS{'CRITICAL'};
+ }
+ }
+
+} # end of ( $mailq eq "postfix-fast" )
elsif ( $mailq eq "postfix" ) {
## open mailq
@@ -374,7 +411,7 @@
# }
#}
}
-} # end of ($mailq eq "postfixl")
+} # end of ($mailq eq "postfix")
elsif ( $mailq eq "qmail" ) {
# open qmail-qstat
@@ -560,7 +597,7 @@
}
if (defined $opt_M) {
- if ($opt_M =~ /^(sendmail|qmail|postfix|exim)$/) {
+ if ($opt_M =~ /^(sendmail|qmail|postfix|postfix-fast|exim)$/) {
$mailq = $opt_M ;
}elsif( $opt_M eq ''){
$mailq = 'sendmail';
-- System Information:
Debian Release: squeeze/sid
APT prefers unstable
APT policy: (500, 'unstable')
Architecture: amd64 (x86_64)
Kernel: Linux 2.6.32-5-amd64 (SMP w/2 CPU cores)
Locale: LANG=en_AU.UTF-8, LC_CTYPE=en_AU.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash
More information about the Pkg-nagios-devel
mailing list