postfix 或 sendmail 监控

postfix 或 sendmail 监控

我希望当邮件备份且未按预期转发(即发送延迟)时通过电子邮件提醒支持团队。我尝试使用 nagios,但没有任何解决方案。我尝试使用 logwatch,但不是我想要的。

理想的解决方案:如果邮件未发送“status=sent (250 Ok)”,则在邮件中发出警报。这很简单,问题在于避免重复。因此,一旦在第二次检查未发送的情况下发现警报,则任何警报都与此有关。

这该怎么做呢?

也许 postfix 有自己的解决方案?

答案1

SMTP 并非为实时和低延迟通信而设计!
即使邮件已离开您的服务器,通常也不会送达收件人的收件箱,它可能仍在远程垃圾邮件和/或 AV 过滤器中进行处理。

自从灰名单非常有效,而且常见甚至暂时的错误都不是问题。

只需监视邮件队列的大小,根据您的使用模式,只有队列超过 100 或 1000 的事件才可能引起关注并表明存在真正的问题......

答案2

如果您愿意在某处创建额外的文件/日志,那么处理重复应该是可以管理的。例如,按照正常步骤发送警报电子邮件,然后在成功发送消息后,向脚本添加一行额外的代码,将时间戳和其他一些信息写入新的日志文件,如下所示:

echo $(date +%s),sent_queuealert >> /path/to/postfix/logs/sentalerts.log

它将存储 unix 日期戳和所采取的操作。现在日志文件已写入 if-else 语句中的一些额外逻辑,这是控制是否发送消息所需的全部内容,下面是一个简单的示例

#!/bin/bash
lastalert=$(grep "sent_queuealert" ./sentalerts.log |tail -n1 |cut -d"," -f1)
ctime=$(date +%s)
dtime=$(expr $ctime - $lastalert)
if [ "$dtime" -lt 250 ]
then
    echo "Too soon to send"
    echo $(date +%s),skip_send >> sentalerts.log
else
    echo "place holder for alert sender"
    echo $(date +%s),sent_queuealert >> sentalerts.log
fi

这是一个相当粗糙的版本,但应该很容易修改以满足您的目的。使用 cron 每隔几分钟运行相应的脚本将允许您检查日志文件,而不必依赖 postfix 中的内部机制。这里有一些有趣的信息监控后缀在那个答案中。将这些知识与某种带时间戳的日志检查相结合可能会产生更优雅的解决方案。

答案3

电子邮件监控应该从几个简单的事情开始:

  • 邮件服务器是否接受 SMTP 或 SMTPS 端口上的连接?
  • 邮件服务器是否接受你的用户的新邮件?中继用户?
  • 邮件服务器上是否有可用磁盘空间?
  • 队伍都满了吗?

掌握基础知识后,可以考虑扩展到

  • 每隔n分钟到角色帐户,然后确保该帐户在过去 n*2 分钟内有新的电子邮件。
  • postfix观察及其助手使用了多少 CPU
  • 图表展示您过滤了多少垃圾邮件
  • 图形传送延迟
  • 添加指标相关警报

相关内容