Repository
Munin (2.0)
Last change
2021-08-09
Graph Categories
Family
auto
Capabilities
Language
Shell

postfix_mailqueue

Example graph: month

Name

postfix_mailqueue - Plugin to monitor postfix mail spools

About

A guide to postfix mail queue manageent can be found at http://www.postfix.org/QSHAPE_README.html#queues

A summary:

  • maildrop

    Messages that have been submitted via the Postfix sendmail(1) command, but not yet brought into the main Postfix queue by the pickup(8) service.

  • hold

    Messages placed in the “hold” queue stay there until the administrator intervenes

  • incoming

    Inbound mail from the network, or mail picked up by the local pickup(8) daemon from the maildrop directory.

  • active

    Messages that the queue manager has opened for delivery. Only a limited number of messages is allowed to enter the active queue (leaky bucket strategy, for a fixed delivery rate).

  • deferred

    Mail that could not be delivered upon the first attempt. The queue manager implements exponential backoff by doubling the time between delivery attempts.

  • corrupt

    Unreadable or damaged queue files are moved here for inspection.

Configuration

By default “postconf -h queue_directory” is used to determine the spool directory. If postconf is not available in the $PATH then /var/spool/postfix is assumed. This can be overridden by the “spooldir” environment variable like so:

[postfix_mailqueue]
   env.spooldir /var/spool/postfix

Author

Unknown.

License

Unknown.

Magic Markers

#%# family=auto
#%# capabilities=autoconf
#!@@GOODSH@@
# -*- sh -*-

: << =cut

=head1 NAME

postfix_mailqueue - Plugin to monitor postfix mail spools

=head1 ABOUT

A guide to postfix mail queue manageent can be found at
L<http://www.postfix.org/QSHAPE_README.html#queues>

A summary:

=over 4

=item maildrop

Messages that have been submitted via the Postfix sendmail(1) command,
but not yet brought into the main Postfix queue by the pickup(8)
service.

=item hold

Messages placed in the "hold" queue stay there until the administrator
intervenes

=item incoming

Inbound mail from the network, or mail picked up by the local
pickup(8) daemon from the maildrop directory.

=item active

Messages that the queue manager has opened for delivery. Only a limited number
of messages is allowed to enter the active queue (leaky bucket strategy, for a
fixed delivery rate).

=item deferred

Mail that could not be delivered upon the first attempt. The queue manager
implements exponential backoff by doubling the time between delivery attempts.

=item corrupt

Unreadable or damaged queue files are moved here for inspection.

=back

=head1 CONFIGURATION

By default "postconf -h queue_directory" is used to determine the
spool directory.  If postconf is not available in the $PATH then
/var/spool/postfix is assumed.  This can be overridden by the
"spooldir" environment variable like so:

 [postfix_mailqueue]
    env.spooldir /var/spool/postfix

=head1 AUTHOR

Unknown.

=head1 LICENSE

Unknown.

=head1 MAGIC MARKERS

=begin comment

These magic markers are used by munin-node-configure when installing
munin-node.

=end comment

 #%# family=auto
 #%# capabilities=autoconf

=cut

# Attempt to get spooldir via postconf, but environment overrides.
# Remember that postconf is not available unless postfix is.
if [ -n "${spooldir}" ]; then
    SPOOLDIR=${spooldir}
else
    SPOOLDIR="$(postconf -h queue_directory 2>/dev/null || echo /var/spool/postfix)"
fi

. "$MUNIN_LIBDIR/plugins/plugin.sh"

case $1 in
    autoconf|detect)

        if [ -d "$SPOOLDIR" ] ; then
            echo yes
            exit 0
        else
            echo "no (spooldir not found)"
            exit 0
            fi;;
    config)
        cat <<'EOF'
graph_title Postfix Mailqueue
graph_vlabel Mails in queue
graph_category postfix
graph_total Total
active.label active
deferred.label deferred
maildrop.label maildrop
incoming.label incoming
corrupt.label corrupt
hold.label held
EOF
        for field in active deferred maildrop incoming corrupt hold; do
            print_warning "$field"
            print_critical "$field"
        done
        exit 0;;
esac

cd "$SPOOLDIR" >/dev/null 2>/dev/null || {
     echo "# Cannot cd to $SPOOLDIR"
     exit 1
}

cat <<EOF
deferred.value $( { test -d deferred && find deferred -type f; } | wc -l)
active.value $( { test -d active && find active -type f; } | wc -l)
maildrop.value $( { test -d maildrop && find maildrop -type f; } | wc -l)
incoming.value $( { test -d incoming && find incoming -type f; } | wc -l)
corrupt.value $( { test -d corrupt && find corrupt -type f; } | wc -l)
hold.value $( { test -d hold && find hold -type f; } | wc -l)
EOF