Skip to content
Indus LeveL
zimbra postfix nagios mta monitoring linux sysadmin email

Monitoring Zimbra Postfix Email Queues with Custom Nagios Plugins

An infrastructure monitoring masterclass on drafting custom Bash Nagios plugins to audit Postfix MTA deferred and active message queues.

2 min read
Cover illustration representing active server health monitoring, Nagios daemon checks, and Postfix email queue auditing

Maintaining enterprise communication platforms running Zimbra Mail Server requires constant vigilance over underlying Postfix Message Transfer Agent (MTA) queues. Sudden bursts of outbound bounce messages, spam phishing activity, or downstream relay drops can fill deferred mail queues in minutes, taking down core notification services across the data center.

In this infrastructure monitoring guide, I explore how to draft custom Bash executable Nagios Core plugins designed to check Postfix filesystem spools, evaluate threshold bounds, and return standardized status alert codes (OK, WARNING, CRITICAL).

Step 1: Manual Postfix Queue Verification

Before developing automated threshold scripts, understand how Postfix structures its active and deferred message spools on local disk partitions. Each message awaiting transmission or delivery retry is written as an individual flat file.

# Verify base Postfix deferred message volume count
find /var/spool/postfix/deferred -type f | wc -l

# Verify Zimbra specific deferred message volume count
find /opt/zimbra/data/postfix/spool/deferred -type f | wc -l

# Verify Zimbra active mail processing volume count
find /opt/zimbra/data/postfix/spool/active -type f | wc -l

Step 2: Custom Nagios Plugin Architecture (check_deferred_mails)

Nagios and NRPE daemons rely on strict execution exit status codes to set dashboard warning states:

  • Exit Code 0: OK
  • Exit Code 1: WARNING
  • Exit Code 2: CRITICAL

Developing the Deferred Queue Script

Deploy the monitoring script /usr/local/nagios/libexec/check_deferred_mails:

#!/bin/bash
# /usr/local/nagios/libexec/check_deferred_mails
# Custom Nagios Core plugin to monitor Zimbra deferred message queues

DEFERREDCOUNT=$(find /opt/zimbra/data/postfix/spool/deferred -type f | wc -l)

if (( DEFERREDCOUNT < 150 )); then
    echo "Total $DEFERREDCOUNT Deferred emails -- OK"
    exit 0
fi

if (( DEFERREDCOUNT >= 150 && DEFERREDCOUNT <= 199 )); then
    echo "Total $DEFERREDCOUNT Deferred emails -- WARNING"
    exit 1
else
    echo "Total $DEFERREDCOUNT Deferred emails -- CRITICAL"
    exit 2
fi

Step 3: Developing Active Message Monitoring Scripts

Along with deferred retries, monitoring active processing backlogs identifies when mail transport daemons are stalling due to system memory degradation or high I/O wait.

#!/bin/bash
# /usr/local/nagios/libexec/check_active_mails
# Custom Nagios Core plugin to monitor active processing volume

ACTIVECOUNT=$(find /opt/zimbra/data/postfix/spool/active -type f | wc -l)

if (( ACTIVECOUNT < 20 )); then
    echo "Total $ACTIVECOUNT Active emails processing -- OK"
    exit 0
fi

if (( ACTIVECOUNT >= 20 && ACTIVECOUNT <= 29 )); then
    echo "Total $ACTIVECOUNT Active emails processing -- WARNING"
    exit 1
else
    echo "Total $ACTIVECOUNT Active emails processing -- CRITICAL"
    exit 2
fi

Step 4: Binding NRPE Command Integration

To allow unprivileged monitoring service accounts (nagios) to inspect protected spool file directories, configure custom sudoers rule bypasses and append command declarations within NRPE profile blocks (nrpe.cfg).

# Assign file execution permissions
chmod 755 /usr/local/nagios/libexec/check_deferred_mails

Add the custom execution command string to your local NRPE configuration file:

command[check_deferred_mails]=sudo /usr/local/nagios/libexec/check_deferred_mails

References

Back to Blog
Share:

Follow along

Stay in the loop — new articles, thoughts, and updates.