![如何计算 sendmail 吞吐量](https://linux22.com/image/494787/%E5%A6%82%E4%BD%95%E8%AE%A1%E7%AE%97%20sendmail%20%E5%90%9E%E5%90%90%E9%87%8F.png)
是否有人有脚本可以输出过去一小时内发送的邮件数量,即 sendmail 发送吞吐量。应该可以通过分析邮件日志来确定(/var/log/邮件日志)?
也许有一些 FOSS 可以提供帮助?
使用邮件统计(/usr/sbin/邮件统计) 似乎没什么用,因为它只提供邮件服务器首次启动时的统计数据,而不是最近一小时的统计数据。也许我错了?
答案1
我认为你对 mailstats 的看法是错误的。如果你使用“-p”标志,它将重置统计信息,因此你可以每小时从 cron 运行一次,如下所示:
/usr/sbin/邮件统计-p
...并开始下一个小时的新统计数据。希望这能有所帮助。
答案2
我不太熟悉 sendmail,因为我更喜欢 postfix,但您可以使用 pflogsum 获取每日统计数据,或者通过 /var/log/maillog 查找临时类型的问题。示例:
grep 'Sep 28 09:' /var/log/maillog | grep 250 | wc -l
应该可以得到 9 月 28 日 09:00 至 09:59 期间成功投递的电子邮件数量。
答案3
供参考 - 这是我最终得到的脚本(设置为每小时通过 cron 运行):
#!/usr/bin/php
<?php
// Get time in sendmail format for last hour.
$dateMonth = date("M", strtotime("-1 hour"));
$dateDay = date("j", strtotime("-1 hour"));
if ($dateDay < 10)
$dateDay = " $dateDay";
$dateHour = date("H", strtotime("-1 hour"));
$numSent = shell_exec("grep '{$dateMonth} {$dateDay} {$dateHour}:' /var/log/maillog | grep 'Message accepted for delivery' | wc -l");
// Log value
$logFile = "whereEverYouWant.log";
if(($fh = fopen($logFile,'a')) === FALSE)
die("Failed to open \"$logFile\" for appending!\n");
fwrite($fh, date('Y-m-d, H:i:s') . ", $numSent");
fclose($fh);
?>