我正在嘗試計算我的郵件伺服器成功投遞處理的電子郵件量與來自配置錯誤的郵件伺服器、垃圾郵件等的電子郵件當場丟棄的電子郵件量的粗略百分比...
我首先在 /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 of just 捕獲重複的條目
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
我們可以看出兩者之間有差異。
答案1
這些似乎是單獨的交付嘗試,因此應如此計算。
假設這類事情一定已經解決了,我查看了
munin
postfix_mailstats
腳本是如何完成的。這是一個 perl 腳本,因此正規表示式與 perl 相容:
這些是成功的交付:
/ to=.*, status=sent /
這些是拒絕的:
/postfix\/smtpd.*proxy-reject: \S+ (\S+)/
/postfix\/smtpd.*reject: \S+ \S+ \S+ (\S+)/
/postfix\/cleanup.* reject: (\S+)/
正規表示式的捕獲部分(括號之間)是拒絕代碼,指示訊息如何被拒絕。
delivered to maildir
是本地交付,250 .* from MTA
是遠端交付,即兩種不同類型的交付;所以你計算每個的不同數字並不奇怪。