Postfix

Postfix 記錄失去的傳遞狀態資訊(postfix/smtp 消息)

  • June 6, 2012

我注意到後綴日誌存在問題,缺少有關某些電子郵件傳遞狀態的資訊。該問題影響了大約 1% 的電子郵件。

“健康”日誌:

<server># grep 8EB992EFBB44 postfix_log/mail04.log
Jun  5 03:09:29 mail04 postfix/smtpd[8537]: 8EB992EFBB44: client=xxx.xxx.xxx[xxx.xxx.xxx.xxx]
Jun  5 03:09:29 mail04 postfix/cleanup[34349]: 8EB992EFBB44: message-id=<20120605010929.123.456@xxx.xxx.xxx>
Jun  5 03:12:02 mail04 postfix/qmgr[76377]: 8EB992EFBB44: from=<xxx@xxx.xxx>, size=48845, nrcpt=1 (queue active)
Jun  5 03:15:12 mail04 postfix/smtp[35058]: 8EB992EFBB44: to=<foo@baz.com>, relay=mx.baz.com[xxx.xxx.xxx.xxx]:25, conn_use=70, delay=343, delays=153/190/0/0.24, dsn=2.0.0, status=sent (250 ok)
Jun  5 03:15:12 mail04 postfix/qmgr[76377]: 8EB992EFBB44: removed

“破碎”日誌:

<server># grep F3C362EF37CA postfix_log/mail04.log
Jun  5 04:03:27 mail04 postfix/smtpd[39666]: F3C362EF37CA: client=xxx.xxx.xxx[xxx.xxx.xxx.xxx]
Jun  5 04:03:27 mail04 postfix/cleanup[41287]: F3C362EF37CA: message-id=<20120605020327.449.100@xxx.xxx.xxx>
Jun  5 04:03:28 mail04 postfix/qmgr[76377]: F3C362EF37CA: from=<xxx@xxx.xxx>, size=48892, nrcpt=1 (queue active)
** here should be a log line from postfix/smtp but there is none **
Jun  5 04:03:29 mail04 postfix/qmgr[76377]: F3C362EF37CA: removed

背景資料:

系統:FreeBSD xxx.xxx.xxx 8.2-RELEASE FreeBSD 8.2-RELEASE #0: Thu Feb 17 02:41:51 UTC 2011 root@mason.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC amd64

Postfix 安裝在監獄中。日誌在同一台機器上,日誌目錄通過 nullfs 掛載。該站點具有高負載峰值,導致磁碟(本地)以 100% 執行。

更新

日誌每天輪換一次,目前大小約為 500MB。

我通過將 99000 條消息排隊到同一目的地進行了測試(以排除 dns/network/mx 問題)。5715 郵件沒有任何 DSN 記錄。失敗的消息隊列時間隨著時間的推移均勻分佈,我沒有看到任何有時限的問題。

一些未送達的電子郵件:

 envelopeid  |       processed_time
--------------+----------------------------
8D7652EF3BAE | 2012-06-06 13:19:11.072715
DD53A2EF3C5C | 2012-06-06 13:33:24.374783
8C52F2EF4E3F | 2012-06-06 13:39:15.810616
BBC572EF525C | 2012-06-06 13:44:22.762812
E95822EF54D1 | 2012-06-06 13:52:01.134533
839DD2EF4FBB | 2012-06-06 14:13:48.511236
017EE2EF6234 | 2012-06-06 15:04:48.618963

這些是一些選擇,幾乎每秒都會發生這種未送達電子郵件的記錄。

<server># egrep '(8D7652EF3BAE|BBC572EF525C|017EE2EF6234)' mail04.log
Jun  6 13:19:10 mail04 postfix/smtpd[20350]: 8D7652EF3BAE: client=xxx.xxx.xxx[xxx.xxx.xxx.xxx]
Jun  6 13:19:10 mail04 postfix/cleanup[21024]: 8D7652EF3BAE: message-id=<20120606111910.674@xxx.xxx.xxx>
Jun  6 13:19:10 mail04 postfix/qmgr[7939]: 8D7652EF3BAE: from=<xxx@xxx.xxx.xxx>, size=63718, nrcpt=1 (queue active)
Jun  6 13:19:11 mail04 postfix/qmgr[7939]: 8D7652EF3BAE: removed
Jun  6 13:44:22 mail04 postfix/smtpd[20346]: BBC572EF525C: client=xxx.xxx.xxx[xxx.xxx.xxx.xxx]
Jun  6 13:44:22 mail04 postfix/cleanup[24811]: BBC572EF525C: message-id=<20120606114422.674@xxx.xxx.xxx>
Jun  6 13:44:22 mail04 postfix/qmgr[7939]: BBC572EF525C: from=<xxx@xxx.xxx.xxx>, size=63758, nrcpt=1 (queue active)
Jun  6 15:04:49 mail04 postfix/smtpd[20344]: 017EE2EF6234: client=xxx.xxx.xxx[xxx.xxx.xxx.xxx]
Jun  6 15:04:49 mail04 postfix/cleanup[35585]: 017EE2EF6234: message-id=<20120606130448.674@xxx.xxx.xxx>
Jun  6 15:04:49 mail04 postfix/qmgr[7939]: 017EE2EF6234: from=<xxx@xxx.xxx.xxx>, size=63706, nrcpt=1 (queue active)
<server>#
<server># find /var/spool/postfix/active/ -type f -print | wc -l
      1
<server>#

重要提示:正如您在上面看到的,一些電子郵件沒有事件removed線。

這是哪個後綴版本?

您是否嘗試過調整 syslog ?

如果磁碟達到或接近其 I/O 容量,系統日誌的延遲時間可能比您預期的要長。

另外,什麼是“mail04.log”?它有多大 ?您確定該消息的全部內容都記錄在該文件中嗎?

使用 UDP 或(更好的)TCP 遠端系統日誌將日誌發送到異地,並檢查所有日誌中是否缺少消息。

如果任何 Postfix 程序被配置為在 chroot 監獄中執行,則除了預設套接字之外$config_directory/master.cf,您還需要配置 syslogd 以偵聽(以便 chroot 程序可以訪問內部 chroot)。如果您不這樣做,最初似乎一切正常,但是當 syslogd 由於某種原因(可能在日誌輪換期間發生)重新啟動時,來自 chroot 程序的日誌記錄會中斷。$queue_directory/dev/log``/dev/log``/dev/log

引用自:https://serverfault.com/questions/395986