有没有办法使用 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