如何使用 monit 监控 postfix 邮件队列?

如何使用 monit 监控 postfix 邮件队列?

有没有办法使用 monit 来监控 postfix 邮件队列?可用的脚本只是检查 up/down/内存或 CPU。我希望在队列开始填满时收到通知。如果能够在不同的队列上设置监视器以便能够做出适当的反应,那就太好了。

答案1

您必须使用 Monit 的“程序”功能。

如果您的monitrc文件包含include /etc/monit.d/*.cfg,则在您的中/etc/monit.d创建一个.cfg包含内容的文件(monitrc如果您没有包含*.cfg中的所有文件,请在文件中添加适当的包含语句/etc/monit.d

check program mail-queue path "/usr/local/sbin/check_postfix_queue"
    if status != 0 then alert

/usr/local/sbin/check_postfix_queue然后创建包含以下内容的脚本:

#!/bin/bash

MAXMSG=20
MSG=$( postqueue -p | egrep '\-\- [0-9]+ Kbytes in [0-9]+ Request[s]*\.' | awk '{ print $5 }'  )
[ ${MSG:-0} -le $MAXMSG ] && exit 0 || exit 1

MAXMSG 是消息队列限制:如果消息数量超过该参数,monit 将发出警报。

答案2

这是我的版本check_postfix_queue脚本。它不调用mailq命令,因为它读取并列出所有队列中的所有消息,但我们只想知道消息的数量。

它还显示每个队列的消息数量。

#!/bin/bash
# usage: mailq-check.sh [<max-count>]

TOTAL=0

for QUEUE in maildrop hold incoming active deferred; do
    CNT=$(find /var/spool/postfix/$QUEUE -type f | wc -l)
    TOTAL=$(( TOTAL + CNT ))
    echo $QUEUE: $CNT
done

echo total: $TOTAL

if [ -n "$1" ] && [ "$TOTAL" -gt "$1" ]; then
    exit 1
fi

exit 0

可选参数可以设置所有队列中触发错误的最大消息数。

您可以按照第一个答案中提到的在 monit 中使用该脚本:

check program mail-queue path "/usr/local/sbin/check_postfix_queue 50"
    if status != 0 then alert

相关内容