标准 Postfix 日志格式如下
Feb 4 15:03:53 mail postfix/smtp[31148]: xyz
31148 似乎是进程 ID,因此如果我再发送一封邮件,这不一定会改变。至少在我的日志中,我得到了远不止一封具有该 ID 的邮件的输出行。
我怎样才能将日志行映射到发送的每条消息上?谢谢!
附言:我看到过 Postfix 日志片段,其中在进程 ID 后面有一个消息或队列 ID,但是我找不到在 Debian 9.5 标准 Postfix 安装中打印该片段的方法。
答案1
这里有一个标准的 syslog 前缀,其中包含方括号中的时间、主机名、进程名称和进程 ID。您简要介绍的xyz
是来自 Postfix 的实际日志消息。对于排队消息,Postfix 的日志消息以消息 ID 开头。
邮件 ID 是每封邮件的唯一 ID,可用于搜索与邮件传递相关的所有日志行(除connect
、disconnect
和 TLS 连接详细信息外)。此外,例如,OpenDKIM 和 OpenDMARC 会为邮件添加相同的 ID 前缀,因此您也可以从相同的邮件日志中找到它们。
awk
使用& 缩短标准 syslog 前缀的示例tr
:
$ grep 123456789A /var/log/mail.log | awk '{$1=$2=""; print $0}' | tr -d ' '
postfix/smtpd[136943]: 123456789A: client=mail.example.com[198.51.100.5]
postfix/cleanup[136949]: 123456789A: message-id=<[email protected]>
opendkim[785]: 123456789A: mail.example.com [198.51.100.5] not internal
opendkim[785]: 123456789A: not authenticated
opendkim[785]: 123456789A: message has signatures from example.com, example.com
opendkim[785]: 123456789A: signature=JkaxE6J1 domain=example.com selector=s1 result="no signature error"; signature=Ra0RqB6n domain=example.com selector=s2 result="no signature error"
opendkim[785]: 123456789A: DKIM verification successful
opendkim[785]: 123456789A: s=s1 d=example.com a=rsa-sha256 SSL
opendmarc[815]: 123456789A: SPF(mailfrom): mail.example.com pass
opendmarc[815]: 123456789A: mail.example.com pass
postfix/qmgr[127294]: 123456789A: from=<[email protected]>, size=3527, nrcpt=1 (queue active)
postfix/local[136950]: 123456789A: to=<[email protected]>, orig_to=<[email protected]>, relay=local, delay=17, delays=2.4/0.01/0/15, dsn=2.0.0, status=sent (delivered to command: procmail -a "$EXTENSION")
postfix/qmgr[127294]: 123456789A: removed