我正在尝试计算我的邮件服务器处理多少电子邮件以成功传递的粗略百分比与当电子邮件来自配置错误的邮件服务器、垃圾邮件等时它在现场丢弃的数量……
我首先在 /var/log/ 目录中运行了以下 2 个命令(以捕获邮件日志中的条目以及已轮换出的旧邮件日志):
grep "dsn=2.0.0, status=sent (delivered to maildir)" * | wc -l
7814
grep "NOQUEUE: reject: RCPT" * | wc -l
13338
但后来我认为这些条目可能会重复(尤其是 NOQUEUE)。因此,我运行了以下稍作修改的命令,以查看可能存在多少差异。
grep "dsn=2.0.0, status=sent (250 2.0.0 from MTA(" * | wc -l
8839
查看我的邮件日志条目,我收到了多个 NOQUEUE 条目以进行传递尝试。但我认为这是因为发送邮件服务器有时会尝试多次投递。例如:
Aug 10 10:48:24 mail postfix/smtpd[7159]: NOQUEUE: reject: RCPT from unknown[112.198.103.178]: 450 4.7.1 Client host rejected: cannot find your reverse hostname, [112.198.103.178]; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<112.198.103.178>
Aug 10 10:48:24 mail postfix/smtpd[7159]: NOQUEUE: reject: RCPT from unknown[112.198.103.178]: 454 4.7.1 <[email protected]>: Relay access denied; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<112.198.103.178>
Aug 10 10:48:24 mail postfix/smtpd[7159]: NOQUEUE: reject: RCPT from unknown[112.198.103.178]: 454 4.7.1 <[email protected]>: Relay access denied; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<112.198.103.178>
Aug 10 10:48:24 mail postfix/smtpd[7159]: disconnect from unknown[112.198.103.178]
所以我有两个问题:
- 我应该担心使用 grep 捕获重复条目
NOQUEUE: reject: RCPT
吗? - 在过滤这些日志条目并得出正确的数字时,我应该考虑更好的方法吗?
- 我如何确定每次成功交付的唯一行。看看两者之间的差异
grep "dsn=2.0.0, status=sent (delivered to maildir)" * | wc -l
,grep "dsn=2.0.0, status=sent (250 2.0.0 from MTA(" * | wc -l
我们可以看出有差异。
这些似乎是单独的交付尝试,因此应该这样计算。
假设这种事情一定已经解决了,我查看了
munin
postfix_mailstats
脚本是如何完成的。那是一个 perl 脚本,所以正则表达式是 perl 兼容的:这些是成功的交付:
这些是拒绝:
正则表达式的捕获部分(括号之间)是拒绝代码,它指示消息是如何被拒绝的。
delivered to maildir
是本地交付,250 .* from MTA
是远程交付,即两种不同类型的交付;所以你计算每个的不同数量并不奇怪。