上一页    目录    索引    下一页
iPlanet Messaging Server 5.2 管理员指南

第 13 篇 日志记录和日志分析


iPlanet Messaging Server 可创建用来记录有关事件的日志文件,这些事件涉及管理、用服务器所支持的任何一种协议(SMTP、POP、IMAP 和 HTTP)的通信、以及由服务器所进行的其他处理。通过检查日志文件,可以监控服务器运行的许多方面。

因为 MTA 使用一个区别于其他服务的单独的日志工具,所以不能用 iPlanet Console 配置日志服务和查看日志。但是可以通过在配置文件中指定信息来配置 MTA 日志记录。因此,本章共分为三部分。第一部分提供总的介绍性信息;第二部分介绍邮件存储库与管理服务的日志记录问题;第三部分介绍 MTA 服务的日志记录问题。

第一部分:绪论

第二部分:服务日志(邮件存储库、Administration Server 和 MTA)

第三部分:服务日志(MTA)


第一部分:绪论



您可自定义创建和管理 Messaging Server 日志文件的策略。本章介绍日志文件的类型和结构,并讨论如何管理和如何查看日志文件。这一部分由下列分节组成:


日志服务

Messaging Server 可为每一种所支持的主要协议或服务分别创建一组日志文件。这样就可单独制定、查看每一种类型日志文件。表 13-1 列出了可记录的服务,并对每一项服务的日志文件进行了说明。


表 13-1 日志服务


服务

日志文件说明

Admin

以 Administration Server 的方式,包含与 iPlanet Console 和 Messaging Server 之间通信有关的日志事件(主要通过几个 CGI 进程)。

SMTP

包含与服务器的 SMTP 活动有关的日志事件

IMAP

包含与服务器的 IMAP4 活动有关的日志事件

POP

包含与服务器的 POP3 活动有关的日志事件

HTTP

包含与 HTTP 服务器活动有关的日志事件

Default

包含与服务器的其他活动有关的日志事件,例如命令行实用程序和其他进程


用第三方工具分析日志

对于超出了 iPlanet Messaging Server 能力的日志分析和报告生成事项,需要使用其他的工具。可以借助于文本编辑器或标准的系统工具自己操纵日志文件。

通过使用一种支持正则表达式分析的可使用脚本语言的文本编辑器,可以做到在本章所讨论的任何标准的基础上搜索和抽取日志条目,并可对结果进行分类,甚至生成合计或其他统计数据。

在 UNIX 环境下,您还能够修改和使用已有的、被开发来操纵 UNIX syslog 文件的报告生成工具。如果希望使用一个不受版权限制的 syslog 操纵工具,切记需要修改该工具以解决不同日期/时间格式问题和两个额外组件(facilitylogLevel)的问题,这两个组件在 Messaging Server 日志条目中显示,而不在 syslog 条目中显示。


第二部分:服务日志(邮件存储库、Administration Server 和 MTA)



本节对以下服务的日志记录进行了说明:POP、IMAP、HTTP、MTA、Admin 和 Default(参见表 13-1)。

对于这些服务,您可使用 iPlanet Console 指定日志设置并查看日志文件。所指定的设置影响到日志事件的种类和数量。当分析日志文件时,可使用这些设置和其他特性来改善对日志事件的搜索。有关 MTA 使用的服务日志方面的附加说明,请见“第三部分:服务日志(MTA)”

第二部分包含下面各节:


日志特性

本节说明了下面这些邮件存储库和管理服务的日志特性:日志记录级别、日志事件的种类、日志文件名约定和日志文件目录。


日志记录级别

日志记录的级别,或称为优先级,定义了日志记录活动的详细程度(冗长度)。优先级较高意味着详细程度较低;这也意味着只有较高优先级(高重要性等级)的事件才记录到日志中。级别较低意味着详细程度较高;这也就意味着日志文件中记录了更多的事件。

您可分别为每一项服务 - 即 POP、IMAP、HTTP、Admin 和 Default - 分别设置日志记录的等级,方法是通过设置 logfile.service.loglevel 配置参数(见“定义和设置日志记录选项”)。您还可用日志记录等级筛选通过搜索获得的日志事件。表 13-2 说明了这些可用的等级。这些日志记录级别是 UNIX syslog 功能的一个子集。


表 13-2 存储和管理服务的日志记录级别


级别

说明

Critical(致命)

最少细节的日志记录。每当发生严重问题或致命错误(如服务器无法访问邮箱或需要调入并运行的程序库)时,可将事件写入日志。

Error(错误)

每当发生错误情况(如在连接一个客户或另一个服务器时失败)时,可将事件写入日志。

Warning(警告)

每当发生警告情况(如服务器无法理解来自客户的通信)时,可将事件写入日志。

Notice(通知)

每当产生一个通知(一种普通但很重要的情况,如用户登录失败或一对话关闭)时,可将事件写入日志。

Information(信息)

每当进行重大操作(如用户成功地登录、注销,或创建或重命名一个邮箱)时,可将事件写入日志。

Debug(调试)

最冗长的日志记录。仅对调试目的有用。对于每个进程或任务中的每一个单独的步骤,都可将事件写入日志,以用于查明问题。

一旦选择了一个特定的日志记录级别,对应于该级别,以及所有更高(较不冗长)级别的事件都将记录到日志中。日志记录的默认级别为 Notice


备注: 设置的日志记录越冗长,日志文件所占用的磁盘空间就越大;关于这一问题的指导方针,参见“定义和设置日志记录选项”




日志事件的种类

在每一个所支持的服务或协议中,Messaging Server 依据工具或事件所发生的功能区对日志事件进一步分类。所有记录事件都包含了生成该事件的工具的名字。依据这样的分类可在搜索时过滤事件。表 13-3 列出了 Messaging Server 能识别的日志事件种类。


表 13-3 日志事件种类 


工具

说明

General(一般)

与本协议或服务相关的无差别操作

LDAP

与 Messaging Server 访问 LDAP 目录数据库有关的操作

Network(网络)

与网络连接(套接字操作错误即属此类)有关的操作

Account(帐户)

与用户帐户(用户登录即属此类)有关的操作

Protocol(协议)

与具体协议的命令(由 POP、IMAP 或 HTTP 等功能返回的错误即属此类)有关的协议级操作

Stats(统计)

与收集服务器统计数据有关的操作

Store(存储库)

与访问邮件存储库(读/写错误即属此类)有关的低级操作

有关在日志搜索中将事件种类用作过滤器的范例,请参见“搜索并查看日志”


邮件存储库与管理日志的文件名约定

POP、IMAP、HTTP、Admin 和 Default 服务的日志文件使用相同的命名约定。每一个文件具有如下形式的文件名:

service.sequenceNum.timeStamp

表 13-4 列出了邮件存储库日志文件名的约定。


表 13-4 存储库与管理日志的文件名约定


组件

定义

service(服务)

记录的服务项:POP、IMAP、HTTP、Admin、Default。

sequenceNum(顺序号)

指定此日志文件创建顺序的整数,这是相对于日志文件目录中的其他日志文件而言的。较高顺序号的日志文件相对于较低顺序号的日志文件要更新一些。顺序号不循环使用,在服务器生命周期(从服务器安装开始)内单调增长。

timeStamp(时间戳)

指定文件创建的日期与时间的整数。(其数值以标准的 UNIX 时间表示:从 1970 年 1 月 1 日午夜开始的秒数。)

例如,一个名为 imap.63.915107696 的日志文件应该是 IMAP 日志文件目录中创建的第 63 个日志文件,它创建于 1998 年 12 月 31 日下午 12:34:56。

将末端开放的顺序计数方式与时间戳相结合,使得为分析而轮换、终止和选择文件更为便利。关于更多的相关建议,参见“定义和设置日志记录选项”


日志文件目录

每一项日志服务被分配到一单个目录中,它的日志文件即存储于该目录中。如同所有的 POP 日志文件和其他服务中的日志文件一样,所有的 IMAP 日志文件存储在一起。要为每一个目录定义位置,还须定义目录的最大空间以及该空间中允许存储的日志文件的最大数量。

须确保存储容量足够容纳所有的日志文件。日志数据可占有相当大的空间,在较低的日志记录级别(更冗长)情况下更是如此。

定义日志记录级别、日志轮换、日志终止以及服务器备份策略等也是很重要的。这可使所有的日志文件目录都能备份,而且不会出现超载情况;否则,会丢失信息。请参阅“定义和设置日志记录选项”


日志文件格式

所有由 Messaging Server 创建的邮件存储库和管理服务日志文件具有相同的内容格式。日志文件为多行文本文件,其中的每一行中描述一个日志事件。对于每一种所支持的服务,所有事件描述都具有如下所示的通用格式:

dateTime hostName processName[pid]:category logLevel:eventMessage

表 13-5 列出了日志文件的各个组件。注意,除了日期/时间格式不同以及格式中包含了两个额外的组件(categorylogLevel)外,这里的事件描述格式与 UNIX 的 syslog 工具所定义的格式相同。


表 13-5 存储与管理日志文件组件


组件

定义

dateTime(日期时间)

事件被记录到日志的日期和时间,表示为 dd/mm/yyyy hh:mm:ss 格式,并有一时区字段,表示为 +/-hhmm,相对于 GMT。例如:
02/Jan/1999:13:08:21 -0700

hostName(主机名)

运行服务器的主机的名字:例如,showshoe

注意:如果主机中有一个以上的 Messaging Server 实例,您则可用进程 ID(pid)将不同实例的日志事件分隔开。

processName(进程名)

生成事件的进程名字:例如,cgi_store

pid

生成事件的进程之标识:例如,18753

category(种类)

事件所属类别:例如,General(参见表 13-3)。

logLevel(日志记录级别)

事件所表现的日志记录级别:例如,Notice(参见表 13-2)。

eventMessage(事件消息)

可以是任何长度的针对一事件的解释性信息:例如,Log created(894305624)

下面是三个可用 iPlanet Console 查看的日志事件的例子:

02/May/1998:17:37:32 -0700 showshoe cgi_store[18753]:
General Notice:
  Log created (894155852)

04/May/1998:11:07:44 -0400 xyzmail cgi_service[343]: General Error:
  function=getserverhello|port=2500|error=failed to connect

03/Dec/1998:06:54:32 +0200 SiroePost imapd[232]: Account Notice:
  close [127.0.0.1] [unauthenticated] 1998/12/3 6:54:32
  0:00:00 0 115 0

IMAP 和 POP 事件条目的结尾可有三个数。上面的例子中有0 115 0。第一个数是客户机发送的字节,第二个数是服务器发送的字节,第三个数是所选的邮箱(POP 永远是 1)。

通过“日志查看器”(Log Viewer)窗口查看一日志文件时,通过搜索事件中的任何指定的组件(例如一个指定的日志记录级别、种类或一个指定的进程 ID),可限制显示出的事件的数量。有关详情,请参见“搜索并查看日志”

每个日志条目的事件消息的格式都是该日志事件类型所特有的格式:也即,每一项服务定义了什么内容将出现在它的事件消息中。许多事件消息是简单明了的;但也有较复杂的消息。


定义和设置日志记录选项

可定义邮件存储库和和管理服务的日志记录配置以更好地满足管理上的需要。本节讨论的问题有助于就最佳配置和策略做出决策,并解释如何实现。


灵活的日志记录体系

日志文件(service.sequenceNum.timeStamp)的命名方案有助于设计一个灵活的日志轮换和备份策略。事实上,由于不同服务的事件被写入不同的文件中,使得快速分离问题变得更容易。另外,由于文件名中的顺序号总是递增的,而且时间戳总是唯一的,因此后创建的日志文件不会因耗尽了有限数量的顺序号而简单地覆盖先创建的日志文件。反之,只有到达时限、文件数量或总存储空间这些更为灵活的限制时,老日志文件才被覆盖或删除。

Messaging Server 支持日志文件的自动轮换,这简化了管理,方便了备份。无须手工废除当前日志文件并创建一个新日志文件以容纳随后的日志事件。可随时对目录中除当前日志文件以外的所有文件进行备份,而无须停止服务器或手工通报服务器去启动一个新的日志文件。

在确立了日志记录策略后,可设置选项(对于每一项服务而言)以控制总日志存储空间、日志文件的最大数量、单个文件大小、文件最大时限以及日志文件轮换频率等限制。


规划所需的选项

需要注意的是,必须设置若干种限制,而且其中不止一个可使日志文件被轮换或被删除。哪个限量先到达,哪个限量就是起控制作用的限制条件。例如,若最大日志文件空间为 3.5MB,而且指定每天创建一个新日志文件,则当日志数据增长速率大于每 24 小时 3.5MB 时,实际创建日志文件的速率大于每天一个。因此,若日志文件的最大数量为 10,日志文件的最大时限为 8 天,就有可能永远无法达到该时限。这是因为,较快的日志文件轮换速率意味着在不到 8 天的时间内要创建 10 个日志文件。

为 Messaging Server 的管理日志提供的下列默认值,可能是规划的一个合理的出发点:

目录中日志文件的最大数量: 10
最大日志文件空间:2 MB
所有日志文件总的最大空间:20 MB
最小可用磁盘空间:5 MB
日志轮换时间:1 天
最大时限:7 天
日志记录级别:Notice(通知)

可以看出,这种配置是基于这样的假定:服务器管理日志数据预计以每天 2MB 的速率积累,备份为每周一次,而分配给总管理日志的存储空间至少为 25MB。(若日志记录级别更为冗长,这些设置可能不够充分。)

对于 POP、IMAP 或 HTTP 日志而言,采用与默认同样的值也许是合理的开端。如果所有服务都具有与前面列出的默认值几乎相同的日志存储需求,则一开始可按 150MB 的估计值安排总日志存储空间。(需要注意的是,这仅仅是一个大概的存储空间需求;实际存储空间需求可能有很大的不同。)


设置日志记录选项

您可用 iPlanet Console 或命令行来设置选项以控制邮件存储库日志记录配置文件。

这些选项的最优设置取决于日志数据累积的速率。这个速率可能是每 4000 到 10000 个日志条目占用 1MB 存储空间。在更冗长的日志记录级别(如 Notice)情况下,一个适度繁忙的服务器每周可生成几百兆字节的日志数据。下面是一个可采用的方案:

需要注意的是,可以选择将日志信息发送给 syslog 工具,而非服务器所支持的日志文件。通过按如下方式设置 syslogfacility 选项以将日志信息发送到 syslog:

configutil -o logfile.service.syslogfacility -v value

其中,serviceadminpopimapimtahttpvalueusermaildaemonlocal0local7,或为无。

若设置了“值”,邮件被记录到对应与设置值的 syslog 工具,而其他日志文件服务选项均被忽略。若没有设置选项,或值被设置为 none,日志记录将使用 Messaging Server 的日志文件。

Console 使用 iPlanet Console 设置日志记录选项:

  1. 打开要设置其日志文件选项的 Messaging Server。

  2. 单击“配置”选项卡,打开左面板中的 Log Files 文件夹,选择一项服务(例如 IMAP、HTTP 或 Admin 等)的日志文件。

  3. 从“详细程度”下拉列表中挑选一日志记录级别。

  4. 在“日志文件目录路径”字段中输入保存日志文件目录的名称。

  5. 在“每个日志的文件大小”字段中,输入最大日志文件大小。

  6. 在“创建一个新日志,每隔:”字段中,为日志轮换计划输入一个数。

  7. 在“每个目录的日志数量”和“如果一个日志生成时间超过”这两个字段中,输入与备份时间安排相协调的最大日志文件数和最大时限。

  8. 在“如果超出总日志大小”字段中输入您需要的总的存储限量。

  9. 在“如果磁盘空间小于”字段中,输入所需保留的最小自由磁盘空间的大小。

命令行 在命令行中设置选项须使用 configutil 命令,如下例所示:

设置日志记录级别:

configutil -o logfile.service.loglevel -v level

其中,serviceadminpopimapimtahttploglevelNologCriticalErrorWarningNoticeInformationDebug

指定日志文件目录路径:

configutil -o logfile.service.logdir -v dirpath

指定每个日志文件的最大空间:

configutil -o logfile.service.maxlogfilesize -v size

这里的 size 用于指定字节数。

指定日志轮转时间安排:

configutil -o logfile.service.rollovertime -v number

这里的 number 用于指定秒数。

指定每目录中日志文件的最大数量:

configutil -o logfile.service.maxlogfiles -v number

指定存储空间限制:

configutil -o logfile.service.maxlogsize -v number

这里的 number 用于指定字节数。

指定所需保留的最小自由磁盘空间:

configutil -o logfile.service.minfreediskspace -v number

这里的 number 用于指定字节数。

指定日志文件存活的时限:

configutil -o logfile.service.expirytime -v number

这里的 number 用于指定秒数。


搜索并查看日志

iPlanet Console 提供了一个查看邮件存储和管理日志数据的基本界面。通过它可以选择单个日志文件,并可对文件中的日志条目进行灵活的带过滤的搜索。

对于一个给定的服务,日志文件是按日期时间顺序列出的。一旦选定一个日志文件进行搜索,通过指定搜索参数,可缩小单个事件的搜索范围。


搜索参数

下面是可用于指定来查看日志数据的搜索参数:

注释:搜索须区分大小写的。

关于将日志记录级别与工具相结合以查看日志,请参见下面的例子:


指定搜索项和查看结果

遵循以下步骤,用属于一个给定服务的指定特性来搜索日志事件:

  1. 在 iPlanet Console 中,打开要对其日志文件进行检查的 Messaging Server。

  2. 按两种步骤中的任何一种,显示一给定日志服务中的日志文件内容选项卡:

    • 单击“任务”选项卡,然后单击“查看服务日志”选项,这里的服务与是日志记录服务的名称(如“IMAP 服务”或“管理”)。

    • 单击“配置”选项卡,然后打开左面板中的 Log Files 文件夹,选择一项服务的日志文件(例如 IMAP 或 Admin)。然后单击右面板中的“内容”选项卡。

  3. 该日志服务的“内容”选项卡完整显示出来。

  4. 在“日志文件名”字段中,选择要检查的日志文件。

  5. 单击“查看选中日志”按钮,打开日志查看窗口。

  6. 在“日志阅读器”窗口中,指定所需的搜索参数(在前节已有说明,“搜索参数”)。

  7. 单击“更新”执行搜索并通过“日志条目”字段显示结果。


第三部分:服务日志(MTA)

MTA 提供的工具可记录每一封入队和出队的邮件。此外,它还可提供调度程序出错和调试输出。第二部分包含以下各节:

可逐个通道控制日志记录,也可设定对所有通道上活动的邮件都进行日志记录。在初次配置中,日志记录在所有通道上都被禁用。

启用了日志记录后,每当邮件通过 MTA 通道时,MTA 都会把一个条目写入 mail.log* 文件中。若希望获得有多少邮件通过 MTA(或特定的通道)的统计数据,或者调查一邮件是否或何时被发送或传递之类的问题时,这些日志条目是很有用的。

如果您感兴趣的只是在若干特定 MTA 通道上通过的邮件数这样的统计数据,则可以只在那些感兴趣的 MTA 通道上启用日志记录通道关键字。许多站点更喜欢在所有 MTA 通道上启用日志记录。特别地,如果试图跟踪问题,则诊断问题的第一步就是注意到邮件并没有通过预期的或预定的通道,而针对所有通道启用日志记录有助于调查此类问题。


注意:

如果启用了记录功能,mail.log 会逐渐增大,若任其增大而不管,该文件会消耗所有可用磁盘空间。因此,必须监控这个文件的大小,定期删除不需要的内容。您也可删除整个文件,然后根据需要创建另一个版本。




启用 MTA 的日志记录功能

若需为一特定通道启用日志记录,须将关键字 logging 添加到 MTA 配置文件的通道定义中,如下例所示:

channel-name keyword1 keyword2 logging

此外,您还可设置一些配置参数,如日志文件的目录路径、日志级别等。请参阅“第二部分:服务日志(邮件存储库、Administration Server 和 MTA)”

如果希望所有通道的日志消息对日志文件都是活动的,则只需简单地将一 defaults 通道块添加在 MTA 配置文件的通道块节的开头部分即可。例如:

defaults logging

l defragment charset7 us-ascii charset8 iso-8859-01
siroe.com

defaults 通道将紧跟在 MTA 配置文件中的在第一个空白行后出现。defaults logging 所在行的前一行和后一行都应当是空白行,这一点十分重要。

每个邮件都按入、出队列的方式记入日志。所有的日志条目都放在 MTA 日志目录的 mail.log_current 文件中:msg-instance/log/imta/mail.log_current

邮件退回工作,主要在半夜时分运行,将任何存在的 mail.log_yesterday 添加到累积日志文件 mail.log 中,再将当前的 mail.log_current 文件更名为 mail.log_yesterday,然后启用一个新的 mail.log_current 文件。系统对任何 connection.log* 文件也执行类似的操作。

您可将 MTA 邮件记录发送到 syslog (UNIX) 或 event log (Windows NT),方法是将 LOG_MESSAGES_SYSLOG 选项设置为 1。0 是默认设置,用于指示系统不进行 syslog (event log) 记录。


指定其它 MTA 日志记录选项

除了当日志记录被启用时总是提供的基本信息以外,通过设置 MTA 选项文件中的各种 LOG_* MTA 选项,还可将指定额外的、可选的信息字段包含于其中。关于选项文件的完整细节,请参见 iPlanet Messaging Server Reference Manual


MTA 日志条目格式

MTA 日志文件以 ASCII 码文本写入。在默认状态下,每一个日志文件条目包含八九个字段,如图 13-1 所示。

图 13-1 MTA 日志条目格式

19-Jan-1998 19:16:57.64 l tcp_local E 1 adam@sesta.com
 rfc822;marlowe@siroe.com marlowe@siroe.com


日志条目显示:

  1. 生成条目的日期和时间。

  2. 源通道的通道名(例中的 l)

  3. 目标通道的通道名(例中的 tcp_local)。(对于 SMTP 通道,当 LOG_CONNECTION 被启用时,用加号 + 表示入站到 SMTP 服务器;用减号 - 表示经由 SMTP 客户机出站)。

  4. 条目类型(E);参见表 13-6

  5. 邮件大小(1)。默认单位为千字节,可通过使用 MTA 选项文件中的 BLOCK_SIZE 关键字改变这个默认单位。

  6. 信封发件人:地址(adam@sesta.com)。注意有的邮件其信封发件人:地址是空的,例如通知邮件,该字段就是空的。

  7. 信封收件人:地址的原格式(marlowe@siroe.com)。

  8. 信封发件人:地址的现用(当前)格式(marlowe@siroe.com)。

  9. 传递状态(只对 SMTP 通道而言)。

表 13-6 说明日志记录条目代码。

表 13-6 日志记录条目代码


条目

说明

D

成功出列

DA

通过 SASL(认证)成功出列

DS

通过 TLS(安全)成功出列

DSA

通过 TLS 和 SASL(安全与认证)成功出列

E

入列

EA

通过 SASL(认证)成功入列

ES

通过 TLS(安全)成功入列

ESA

通过 TLS 和 SASL(安全与认证)成功入列

J

拒收入列尝试(通过从属通道程序拒收)

Q

出列暂时失败

R

拒收出列尝试的收件人地址(通过主通道程序拒收),或一个失败/退回邮件的生成。

W

针对一尚未传递邮件而生成的警告消息。

Z

有些是成功的收件人中,但此收件人暂时不成功;所有收件人原邮件文件出列,取而代之的是,一个为此受件人以及其他不成功收件人而创建的新邮件文件将立即入列。

SMTP 通道的 LOG_CONNECTION + 或 - 条目

C

连接已关闭

O

连接已打开

X

连接已拒收

Y

在建立连接之前,连接尝试失败

I

ETRN 命令已收到

LOG_CONNECTIONLOG_FILENAMELOG_MESSAGE_IDLOG_NOTARYLOG_PROCESS 以及 LOG_USERNAME 都启用的情况下,格式改变情况如图 13-2 所示。(由于印刷上的原因,日志条目行被折行;实际的日志条目应显示在一个物理行上。)

图 13-2 带附加字段的日志格式

19-Jan-1998 13:13:27.10 HOSTA 2e2d.2.1 tcp_local l
 E 1 service@siroe.com rfc822;adam@sesta.com
 adam 276 /imta/queue/l/ZZ01IWFY9ELGWM00094D.00
 <01IWFVYLGTS499EC9Y@siroe.com> inetmail
 siroe.com (siroe.com [192.160.253.66])


除了上面已经讨论过的字段外,这些附加字段是:

  1. 通道进程得以运行的节点的名称(例中的 HOSTA)。

  2. 进程 ID(以十六进制表示),后跟一逗号(点)和一计数。如果它是一个多线程通道条目(例如,tcp_* 通道条目),就会在进程 ID 和计数之间出现一个线程 ID。在示例中,进程 ID 为 2e2d.2.1。

  3. 邮件的 NOTARY(传递收到的请求)标记,以整数表示(例中的 276)。

  4. MTA 队列区中的文件名(例中的 /imta/queue/l/ZZ01IWFY9ELGWM00094D.00)。

  5. 邮件 ID(例中的 <01IWFVYLGTS499EC9Y@siroe.com>)。

  6. 执行中的进程名(例中的 inetmail)。在 UNIX 系统中,对于象 SMTP 服务器这样的调度程序进程,这个进程名通常为 inetmail(除非使用了 SASL)。

  7. 连接信息(例中的 siroe.com (siroe.com [192.160.253.66]))。连接信息包含发送系统或通道名,例如由发送系统在 HELO/EHLO 行中呈现的名字(对于到访 SMTP 邮件),或入列通道的正式主机名(对于其他类型的通道)。对于 TCP/IP 通道而言,发送系统的“真”名,即通过 DNS 反向查找发现的象征性名字和/或 IP 地址,也可在通道关键字 ident* 的控制下呈现在括弧内;参见“IDENT 查找”。在这个例子中,假定使用其中的一个关键字,以默认关键字 identnone 为例,它意味着显示从 DNS 中找到的名字和 IP 地址。


管理 MTA 日志文件

邮件退回工作,主要在半夜时分运行,将任何存在的 mail.log_yesterday 添加到累积日志文件 mail.log 中,再将当前的 mail.log_current 文件更名为 mail.log_yesterday,然后启用一个新的 mail.log_current 文件。对于任何 connection.log* 文件也执行类似的操作。

MTA 自动执行轮换以维护当前文件,但必须针对备份文件、截断文件、删除文件等等任务确定一个策略,以便管理累积文件 mail.log

在考虑如何管理日志文件的问题时,需要注意的是,MTA 的周期性回复工作将执行网站提供的 server-instance/imta/bin/daily_cleanup 程序,如果存在的话。因此,某些站点可能选择提供自己的清理程序更名旧的 mail.log 文件,例如每周一次(或每月一次,等等)。


MTA 邮件日志记录示例

作为日志记录在 MTA 邮件文件中的字段格式和字段列表是多样化的,确切情况完全取决于对日志记录选项所做的设置。本节展示一些解释典型的日志条目类型的例子。对于其它可选的字段的说明,参见“指定其它 MTA 日志记录选项”


备注: 由于印刷上的原因,日志文件条目会呈现在多行中。在实际环境中,每个日志文件条目只占用一行。



检查日志文件时需要注意的是,在一个典型的系统中,许多邮件会被同时处理。具有代表性的是,与一个特定邮件有关的条目会散布于与其他邮件有关的条目中,而这些“其他邮件”也正在相同的时间里被处理。通过基本日志信息可获得经由 MTA 移动的邮件总数的大致情况。

如果希望将与同一邮件有关的特定条目与同一收件人相关联,可能需要启用 LOG_MESSAGE_ID。如果希望将 MTA 队列区内的特定邮件与特定文件相关联,或希望通过查看条目了解某尚未成功出队的邮件尝试传递的次数,可能需要启用 LOG_FILENAME。对于(通过 TCP/IP 通道进行处理的)SMTP 邮件,如果需要将往来于远程系统的 TCP 连接与发送的邮件相关联,可能需要启用 LOG_PROCESS 以及 LOG_CONNECTION 的某些级别。

图 13-3 展示了一个相当基本的涉及某些类型的日志条目的例子。如果一个本地用户通过一个外发 TCP/IP 通道发送一邮件到 Internet,即可见到例子中的条目类型。在本例中,LOG_CONNECTION 被启用。标有(1)和(2)的行是一个条目,在实际的日志文件中该条目出现在一个物理行中。类似地,标有(3)-(7)的行也是一个条目,也应出现在一个物理行中。

图 13-3 日志记录:一本地用户发送一外发邮件

19-Jan-1998 19:16:57.64 l tcp_local E 1 (1)
 adam@sesta.com rfc822;marlowe@siroe.com marlowe@siroe.com (2)

19-Jan-1998 19:17:01.16 tcp_local D 1 (3)
 adam@sesta.com rfc822;marlowe@siroe.com marlowe@siroe.com (4)
 dns;thor.siroe.com
 (TCP|206.184.139.12|2788|192.160.253.66|25) (5)
 (THOR.SIROE.COM -- Server ESMTP [iMS V5.0 #8694]) (6)
 smtp;250 2.1.5 marlowe@siroe.com and options OK. (7)


  1. 此行表明,从 l 通道到 tcp_local 通道的入列(E)日期和时间。

  2. 这是(1)中日志文件的同一物理行的一部分,只是为了印刷上的方便才另行显示。它显示了信封发件人:地址,在此例中为 adam@sesta.com,以及原始版本和当前版本的收件人:地址,在此例中为 marlowe@siroe.com

  3. 此行表明,一组(1)邮件从 tcp_local 通道出列(D),即由 tcp_local 通道成功发送到远程 SMTP 服务器的日期与时间。

  4. 此行表明,信封发件人:地址,原信封收件人:地址,以及当前格式的收件人:地址。

  5. 此行表明,连接得以建立的 DNS 中的实际系统被命名为 thor.siroe.com;本地发送系统具有 IP 地址 206.184.139.12,发送端口为 2788;远程目标系统具有 IP 地址 192.160.253.66,远程目标系统上的连接端口为 25。

  6. 此行显示了远程 SMTP 服务器的 SMTP 标志区行。

  7. 此行表明了为此地址返回的 SMTP 状态码;250 是基本的 SMTP 成功代码,而且,这个远程 SMTP 服务器以扩展 SMTP 状态码和一些附加文本加以响应。

图 13-4 所示为类似于图 13-3 中的日志记录条目,不同的是,通过设置 LOG_FILENAME=1LOG_MESSAGE_ID=1 而显示文件名和邮件 ID 等附加的日志信息;参见(1)和(2)。特别是邮件 ID 可用于建立条目与邮件的关联。

图 13-4 日志记录:包含可选日志记录字段

19-Jan-1998 19:16:57.64 l tcp_local E 1
 adam@sesta.com rfc822;marlowe@siroe.com marlowe@siroe.com
 /imta/queue/tcp_local/ZZ01ISKLSKLZLI90N15M.00
   <01ISKLSKC2QC90N15M@sesta.com> (1)

19-Jan-1998 19:17:01.16 tcp_local D 1
 adam@sesta.com rfc822;marlowe@siroe.com marlowe@siroe.com
 /imta/queue/tcp_local/Z01ISKLSKLZLI90N15M.00
   <01ISKLSKC2QC90N15M@sesta.com> (2)
 dns;thor.siroe.com (TCP|206.184.139.12|2788|192.160.253.66|25)
 (THOR.SIROE.COM -- Server ESMTP [iMS V5.0 #8694])
 smtp;250 2.1.5 marlowe@siroe.com and options OK.


图 13-5 说明了如何通过启用 LOG_FILENAME=1LOG_MESSAGE_ID=1LOG_CONNECTION=1 而发送给多个收件人。在此处,用户 adam@sesta.com 已发送到 MTA 邮件列表 test-list@sesta.com 中,该列表扩展到 bob@sesta.comcarol@varrius.comdavid@varrius.com 中。需要注意的是,对于每个收件人,原信封收件人:地址都是 test-list@sesta.com,尽管当前信封收件人:地址是各不相同的地址。注意,尽管涉及到两个不同的文件(一个针对 l 通道,而另一个针对外发的 tcp_local 通道),邮件 ID 却始终保持不变。

图 13-5 日志记录:发送到列表

19-Jan-1998 20:01:44.10 l l E 1
 adam@sesta.com rfc822;test-list@sesta.com bob
 imta/queue/l/ZZ01ISKND3DE1K90N15M.00
 <01ISKND2H8MS90N15M@sesta.com>

19-Jan-1998 20:01:44.81 l tcp_local E 1
 adam@sesta.com rfc822;test-list@sesta.com carol@varrius.com
 imta/queue/tcp_local/ZZ01ISKND2WS1I90N15M.00 
 <01ISKND2H8MS90N15M@sesta.com>

19-Jan-1998 20:01:44.81 l tcp_local E 1
 adam@sesta.com rfc822;test-list@sesta.com david@varrius.com
 imta/queue/tcp_local/ZZ01ISKND2WS1I90N15M.00
 <01ISKND2H8MS90N15M@sesta.com>

19-Jan-1998 20:01:50.69 l D 1
 adam@sesta.com rfc822;test-list@sesta.com bob
 imta/queue/l/ZZ01ISKND3DE1K90N15M.00
 <01ISKND2H8MS90N15M@sesta.com>

19-Jan-1998 20:01:57.36 tcp_local D 1
 adam@sesta.com rfc822;test-list@sesta.com carol@varrius.com
 imta/queue/tcp_local/ZZ01ISKND2WS1I90N15M.00
 <01ISKND2H8MS90N15M@sesta.com>
 dns;gw.varrius.com (TCP|206.184.139.12|2788|192.160.253.66|25)
 (gw.varrius.com -- SMTP Sendmail)
 smtp;250 OK.

19-Jan-1998 20:02:06.14 tcp_local D 1
 adam@sesta.com rfc822;test-list@sesta.com david@varrius.com
 imta/queue/tcp_local/ZZ01ISKND2WS1I90N15M.00
 <01ISKND2H8MS90N15M@sesta.com>
 dns;gw.varrius.com (TCP|206.184.139.12|2788|192.160.253.66|25)
 (gw.varrius.com -- SMTP Sendmail)
 smtp;250 OK.


图 13-6 说明了试图向一个不存在的域(在此为 very.bogus.com)发送邮件;也即,发送到一个未被 MTA 重写规则宣布为不存在的域名而且 MTA 匹配到一个外发 TCP/IP 通道。此例假定 MTA 选项设置为 LOG_FILENAME=1LOG_MESSAGE_ID=1

当 TCP/IP 通道运行并检查 DNS 中的域名时,DNS 返回的错误讯息表明该名字不存在。请注意“rejection”条目(R),见(5),以及 DNS 返回的出错讯息,说明此乃一非法域名,见(6)。

由于地址被拒收是发生在邮件被提交后,所以 MTA 生成一个退回到原发件人的邮件。MTA 将新的拒收邮件入列到原发件人(1)处,在删除原出站邮件(显示于(5)中的 R 条目)之前,发送给 Postmaster(4)一个副本。

通知类邮件,如退回邮件,具有空的信封发件人:地址,如(2)和(8)中所见到的,其中的信封发件人:字段显示为空白。由 MTA 生成的退回邮件的初始入列显示新通知邮件的邮件 ID,后跟一个原邮件(3)的邮件 ID。(这样的信息对于 MTA 并不总是可用的,但当可被日志记录时,可用于建立对应于出站失败邮件的日志条目与对应于结果通知邮件的条目之间的关联。)这样的通知邮件入列到进程通道中,然后再次入列到适当的目标通道(7)中。

图 13-6 日志记录:发送到不存在的域

19-JAN-1998 20:49:04 l tcp_local E 1
 adam@sesta.com rfc822;user@very.bogus.com user@very.bogus.com
 imta/queue/tcp_local/ZZ01ISKP0S0LVQ94DU0K.00
 <01ISKP0RYMAS94DU0K@SESTA.COM>

19-JAN-1998 20:49:33 tcp_local process E 1 (1)
 rfc822;adam@sesta.com adam@sesta.com (2)
 imta/queue/process/ZZ01ISKP0S0LVQ94DTZB.00
 <01ISKP22MW8894DTAS@SESTA.COM>,<01ISKP0RYMAS94DU0K@SESTA.COM> (3)

19-JAN-1998 20:49:33 tcp_local process E 1 (4)
 rfc822;postmaster@sesta.com postmaster@sesta.com
 imta/queue/process/ZZ01ISKP0S0LVQ94DTZB.00
 <01ISKP22MW8894DTAS@SESTA.COM>,<01ISKP0RYMAS94DU0K@SESTA.COM>

19-JAN-1998 20:50:07 tcp_local R 1 (5)
 adam@sesta.com rfc822;user@very.bogus.com user@very.bogus.com
 imta/queue/tcp_local/ZZ01ISKP0S0LVQ94DU0K.00
 <01ISKP0RYMAS94DU0K@SESTA.COM>
 Illegal host/domain name found (6)

19-JAN-1998 20:50:08 process l E 3 (7)
 rfc822;adam@sesta.com adam (8)
 imta/queue/l/ZZ01ISKP23BUQS94DTYL.00
 <01ISKP22MW8894DTAS@SESTA.COM>

19-JAN-1998 20:50:08 process l E 3
 rfc822;postmaster@sesta.com postmaster
 imta/queue/l/ZZ01ISKP23BUQS94DTYL.00
 <01ISKP22MW8894DTAS@SESTA.COM>

19-JAN-1998 20:50:12 l D 3
 rfc822;adam@sesta.com adam
 imta/queue/l/ZZ01ISKP23BUQS94DTYL.00
 <01ISKP22MW8894DTAS@SESTA.COM>

19-JAN-1998 20:50:12 l D 3
 rfc822;postmaster@sesta.com postmaster
 imta/queue/l/ZZ01ISKP23BUQS94DTYL.00
 <01ISKP22MW8894DTAS@SIROE.COM>


图 13-7 说明了试图发送错误的地址到远程系统。这个例子假定 MTA 选项设置为 LOG_FILENAME=1LOG_MESSAGE_ID=1,通道选项设置为 LOG_BANNER=1LOG_TRANSPORTINFO=1。注意拒收条目(R),参见(1)。相对于图 13-6 中的拒收条目,对这里的拒收条目需要注意的是,它表明到远程系统的连接已建立,并显示了远程 SMTP 服务器所生成的 SMTP 错误码,参见(2)和(3)。显示在(2)中的信息内容是由通道选项设置 LOG_BANNER=1LOG_TRANSPORTINFO=1 决定的。

图 13-7 日志记录:发送到不存在的远程用户

20-JAN-1998 13:11:05 l tcp_local E 1
 adam@sesta.com rfc822;nonesuch@siroe.com nonesuch@siroe.com
 imta/queue/tcp_local/ZZ01ISLNBB1JOE94DUWH.00
 <01ISLNBAWV3094DUWH@sesta.com>

20-JAN-1998 13:11:08 tcp_local process E 1
 rfc822;adam@sesta.com adam@sesta.com
 imta/queue/process/ZZ01ISLNBB1JOE94DSGB.00
 <01ISLNBFKIDS94DUJ8@sesta.com>,<01ISLNBAWV3094DUWH@sesta.com>

20-JAN-1998 13:11:08 tcp_local process E 1
 rfc822;postmaster@sesta.com postmaster@sesta.com
 imta/queue/process/ZZ01ISLNBB1JOE94DSGB.00
 <01ISLNBFKIDS94DUJ8@sesta.com>,<01ISLNBAWV3094DUWH@sesta.com>

20-JAN-1998 13:11:11 tcp_local R 1  (1)
 adam@sesta.com rfc822;nonesuch@siroe.com nonesuch@siroe.com
 imta/queue/tcp_local/ZZ01ISLNBB1JOE94DUWH.00 
 <01ISLNBAWV3094DUWH@sesta.com>
 dns;thor.siroe.com
 (TCP|206.184.139.12|2788|192.160.253.66|25)         (2)
 (THOR.SIROE.COM -- Server ESMTP [iMS V5.0 #8694])
 smtp; 553 unknown or illegal user: nonesuch@siroe.com  (3)

20-JAN-1998 13:11:12 process l E 3
 rfc822;adam@sesta.com adam
 imta/queue/l/ZZ01ISLNBGND1094DQDP.00
 <01ISLNBFKIDS94DUJ8@sesta.com>

20-JAN-1998 13:11:12 process l E 3
 rfc822;postmaster@sesta.com postmaster
 imta/queue/l/ZZ01ISLNBGND1094DQDP.00
 <01ISLNBFKIDS94DUJ8@sesta.com>

20-JAN-1998 13:11:13 l D 3
 rfc822;adam@sesta.com adam@sesta.com
 imta/queue/l/ZZ01ISLNBGND1094DQDP.00
 <01ISLNBFKIDS94DUJ8@sesta.com>

20-JAN-1998 13:11:13 l D 3
 rfc822;postmaster@sesta.com postmaster@sesta.com
 imta/queue/l/ZZ01ISLNBGND1094DQDP.00
 <01ISLNBFKIDS94DUJ8@sesta.com>


图 13-8 说明了当 MTA 拒收一远程端试图 提交的一邮件时,所产生的那一类日志文件条目。(在这个例子中,假定没有任何可选的 LOG_* 选项被启用,因此仅有基本字段被记录到日志条目中。应特别注意,启用 LOG_CONNECTION 选项,会导致在这样的 J 条目中包函额外的信息字段。)在这种情况之下,这个例子是为了说明已经以 ORIG_SEND_ACCESS 映射设置了 SMTP 转发阻塞的 MTA(参见“配置 SMTP 转发阻塞”),该映射包含:

ORIG_SEND_ACCESS

! ...numerous entries omitted...
!
   tcp_local|*|tcp_local|* $NRelaying$ not$ permitted

且该处的 alan@very.bogus.com 不是内部地址。因此,远程用户 harold@varrius.com 通过 MTA 系统向远程用户 alan@very.bogus.com 转发的尝试被拒收。

图 13-8 日志记录:拒收远程端提交邮件的尝试

28-May-1998 12:02:23 tcp_local J 0     (1)
 harold@varrius.com rfc822; alan@very.bogus.com       (2)
 550 5.7.1 Relaying not permitted: alan@very.bogus.com (3)


  1. 这个日志显示了 MTA 拒收一远程端试图提交一邮件的日期和时间。拒收是通过一个 J 记录标明的。(对于 MTA 通道试图发送一个被拒收的邮件的情况,由 R 记录表明,如图 13-6图 13-7 所示)。

  2. 显示试图提交邮件的信封发件人:地址和收件人:地址。在这种情况下,没有原始信封收件人:信息,因此字段是空的。

  3. 该条目中包含 MTA 发往远程(试图发件的人)端的 SMTP 错误消息。

图 13-9 说明了这样因下面的原因而产生的那一类日志文件条目:一邮件在初次尝试时不能传递,所以 MTA 试图多次发送该邮件。这个例子假定选项设置为 LOG_FILENAME=1LOG_MESSAGE_ID=1

图 13-9 日志记录:多次传递尝试

15-Jan-1998 10:31:05.18 tcp_internal tcp_local E 3 (1)
 adam@hosta.sesta.com rfc822;user@some.org user@some.org
 imta/queue/tcp_local/ZZ01IS3D2ZP7FQ9UN54R.00 
 <01IRUD7SVA3Q9UN2D4@sesta.com>

15-Jan-1998 10:31:10.37 tcp_local Q 3 (2)
 adam@hosta.sesta.com rfc822;user@some.org user@some.org
 imta/queue/tcp_local/ZZ01IS3D2ZP7FQ9UN54R.00         (3)
 <01IRUD7SVA3Q9UN2D4@sesta.com>
 TCP active open: Failed connect() Error: no route to host (4)

 ...several hours worth of entries...

15-Jan-1998 12:45:39.48 tcp_local Q 3 (5)
 adam@hosta.sesta.com rfc822;user@some.org user@some.org
 imta/queue/tcp_local/ZY01IS3D2ZP7FQ9UN54R.00         (6)
 <01IRUD7SVA3Q9UN2D4@sesta.com>
 TCP active open: Failed connect() Error: no route to host

 ...several hours worth of entries...

15-Jan-1998 16:45:24.72 tcp_local Q 3
 adam@hosta.sesta.com rfc822;user@some.org user@some.org
 imta/queue/tcp_local/ZX01IS67NY4RRK9UN7GP.00         (7)
 <01IRUD7SVA3Q9UN2D4@sesta.com>
 TCP active open: Failed connect() Error: connection refused (8)

 ...several hours worth of entries...

15-Jan-1998 20:45:51.55 tcp_local D 3 (9)
 adam@hosta.sesta.com rfc822;user@some.org user@some.org
 imta/queue/tcp_local/ZX01IS67NY4RRK9UN7GP.00
 <01IRUD7SVA3Q9UN2D4@sesta.com>
 dns;host.some.org (TCP|206.184.139.12|2788|192.1.1.1|25)
 (All set, fire away)
 smtp; 250 Ok


  1. 进入 tcp_internal 通道的邮件,无论来自 POP 或 IMAP 客户,还是来自使用 MTA 作为 SMTP 转发的组织内的另一个主机,MTA 均将之入列到外发的 tcp_local 通道中。

  2. 如 Q 条目所示,初次传递尝试失败。

  3. 可从 ZZ* 文件名中看出这是初次传递尝试。

  4. 当 TCP/IP 包无法找到一个通往远程用户的路由时这次传递尝试失败。与图 13-6 不同的是,DNS 并不拒绝目标域名 some.org;相反,“no route to host”错误表明,是在发送方和接收方之间出现了一个网络方面的问题。

  5. 当 MTA 作为定期工作下一次运行它时,再次尝试传递,但再次失败。

  6. 文件名现在是 ZY*,表明这是第二次尝试。

  7. 对于这第三次不成功的尝试,文件名是 ZX*

  8. 下一次定期工作再次尝试传递时,传递又失败,尽管这次 TCP/IP 包没有抱怨它不能通往远程 SMTP 服务器,而实际原因是远程 SMTP 服务器没有接受连接。(或许远程端已经确定了问题之所在,但他们的 SMTP 服务器尚未恢复;或者该 SMTP 服务器正忙于处理其他邮件而没有在 MTA 试图连接时接受连接。)

  9. 最终邮件出列。

图 13-10 说明邮件经过转换通道而进行路由选择的情况。站点假定有一个如下所示的 CONVERSIONS 映射表:

CONVERSIONS

  IN-CHAN=tcp_local;OUT-CHAN=l;CONVERT Yes

这个例子假定选项的设置为 LOG_FILENAME=1LOG_MESSAGE_ID=1

图 13-10 日志记录:到访 SMTP 邮件通过转换通道路由

04-Feb-1998 00:06:26.72 tcp_local conversion E 9 (1)
 amy@siroe.edu rfc822;bert@sesta.com bert@sesta.com
 imta/queue/conversion/ZZ01IT5UAMZ4QW98518O.00
 <01IT5UALL14498518O@siroe.edu>

04-Feb-1998 00:06:29.06 conversion l E 9 (2)
 amy@siroe.edu rfc822;bert@sesta.com bert
 imta/queue/l/ZZ01IT5UAOXLDW98509E.00  <01IT5STUMUFO984Z8L@siroe.edu>

04-Feb-1998 00:06:29.31 conversion D 9 (3)
 amy@siroe.edu rfc822;bert@sesta.com bert
 imta/queue/conversion/ZZ01IT5UAMZ4QW98518O.00
 <01IT5UALL14498518O@siroe.edu>

04-Feb-1998 00:06:32.62 l D 9 (4)
 amy@siroe.edu rfc822;bert@siroe.com bert
 imta/queue/l/ZZ01IT5UAOXLDW98509E.00
 <01IT5STUMUFO984Z8L@siroe.edu>


  1. 来自外部用户 amy@siroe.edu 的邮件到达,所标注的地址是 l 通道收件人bert@sesta.com。然而,CONVERSIONS 的映射条目致使邮件初始入列到转换通道(而不是直接到 l 通道)。

  2. 转换通道运行并将邮件入列到 l 通道。

  3. 接着,转换通道可将邮件出列(删除老邮件文件)。

  4. 最后 l 通道将邮件出列(传递)。

图 13-11 说明了当连接日志记录通过选项设置 LOG_CONNECTION=3 而被启用时,一外发邮件的日志输出。本例还假定 LOG_PROCESS=1LOG_MESSAGE_ID=1LOG_FILENAME=1。本例显示了这样一种情况:用户 adam@sesta.com 发送同一邮件(注意,所有邮件副本的邮件 ID 都是相同的)给三个收件人的情况,这三个收件人是 bobby@hosta.sesta.comcarl@hosta.sesta.comdave@hostb.sesta.com。本例假定邮件输出到一个标有(正如这类通道的通常情况那样)single_sys 通道关键字的 tcp_local 通道中。因此,磁盘上将为每一个不同主机名上的收件人分别创建一个邮件文件,如(1)、(2)以及(3)所示,其中收件人 bobby@hosta.sesta.comcarl@hosta.sesta.com 存储于同一邮件文件中,但收件人 dave@hostb.sesta.com 则存储于另一个邮件文件中。

图 13-11 日志记录:出站连接日志记录

19-Feb-1998 10:52:05.41 1e488.0 l tcp_local E 1
 adam@sesta.com rfc822;bobby@hosta.sesta.com bobby@hosta.sesta.com
 imta/queue/tcp_local/ZZ01ITRF7BO388000FCN.00  (1)
  <01ITRF7BDHS6000FCN@SESTA.COM>

19-Feb-1998 10:52:05.41 1e488.0 l tcp_local E 1
 adam@sesta.com rfc822;carl@hosta.sesta.com carl@hosta.sesta.com
 imta/queue/tcp_local/ZZ01ITRF7BO388000FCN.00  (2)
  <01ITRF7BDHS6000FCN@SESTA.COM>

19-Feb-1998 10:52:05.74 1e488.1 l tcp_local E 1
 adam@sesta.com rfc822;dave@hostb.sesta.com dave@hostb.sesta.com
 imta/queue/tcp_local/ZZ01ITRF7C11FU000FCN.00  (3)
  <01ITRF7BDHS6000FCN@SESTA.COM>

19-Feb-1998 10:52:10.79 1f625.2.0 tcp_local - O (4)
 TCP|206.184.139.12|5900|206.184.139.66|25
 SMTP/hostb.sesta.com/mailhub.sesta.com         (5)

19-Feb-1998 10:52:10.87 1f625.3.0 tcp_local - O (6)
 TCP|206.184.139.12|5901|206.184.139.70|25
 SMTP/hosta.sesta.com/hosta.sesta.com          (7)

19-Feb-1998 10:52:12.28 1f625.3.1 tcp_local D 1
 adam@sesta.com rfc822;bobby@hosta.sesta.com bobby@hosta.sesta.com
 imta/queue/tcp_local/ZZ01ITRF7BO388000FCN.00
  <01ITRF7BDHS6000FCN@SESTA.COM>
 hosta.sesta.com dns;hosta.sesta.com          (8)
 (TCP|206.184.139.12|5901|206.184.139.70|25)
 (hosta.sesta.com -- Server ESMTP [iMS V5.0 #8790])
 (TCP|206.184.139.12|5901|206.184.139.70|25)
 smtp;250 2.1.5 bobby@hosta.sesta.com and options OK.

19-Feb-1998 10:52:12.28 1f625.3.1 tcp_local D 1
 adam@sesta.com rfc822;carl@hosta.sesta.com carl@hosta.sesta.com
 imta/queue/tcp_local/ZZ01ITRF7BO388000FCN.00
  <01ITRF7BDHS6000FCN@SESTA.COM>
 hosta.sesta.com dns;hosta.sesta.com
 (TCP|206.184.139.12|5901|206.184.139.70|25)
 (hosta.sesta.com -- Server ESMTP [iMS V5.0 #8790])
 (TCP|206.184.139.12|5901|206.184.139.70|25)
 smtp;250 2.1.5 carl@hosta.sesta.com and options OK.

19-Feb-1998 10:52:12.40 1f625.3.2 tcp_local - C (9)
 TCP|206.184.139.12|5901|206.184.139.70|25
 SMTP/hosta.sesta.com/hosta.sesta.com

19-Feb-1998 10:52:13.01 1f625.2.1 tcp_local D 1
 adam@sesta.com rfc822;dave@hostb.sesta.com dave@hostb.sesta.com
 imta/queue/tcp_local/ZZ01ITRF7C11FU000FCN.00
  <01ITRF7BDHS6000FCN@SESTA.COM>
 mailhub.sesta.com dns;mailhub.sesta.com
 (TCP|206.184.139.12|5900|206.184.139.66|25)
 (MAILHUB.SESTA.COM -- Server ESMTP [iMS V5.0 #8694])
 (TCP|206.184.139.12|5900|206.184.139.66|25)
 smtp;250 2.1.5 dave@hostb.sesta.com and options OK.

19-Feb-1998 10:52:13.05 1f625.2.2 tcp_local - C (10)
 TCP|206.184.139.12|5900|206.184.139.66|25
 SMTP/hostb.sesta.com/mailhub.sesta.com


  1. 邮件入列到第一个收件人

  2. ....和第二个收件人...

  3. ....以及第三个收件人。

  4. 设置 LOG_CONNECTION=3 使 MTA 写入该条目。减号 - 表示该条目涉及到一个外发连接。O 意味着该条目对应连接的打开操作。还需注意的是,这里的进程 ID 是相同的,即 1f625,这是因为针对这些不同连接的打开操作,多线程 TCP/IP 通道所使用的是同一个进程,尽管这里的打开操作是由线程 2 及线程 3 所实施。

  5. 由于有两个不同的远程系统需要连接,在不同线程中的多线程 SMTP 客户机分别打开一个每个系统的连接,第一个在此条目中,第二个见 7 中所示。条目这部分显示了发送方和目标方的 IP 地址和端口号,同时也显示了初始主机名,以及通过执行 DNS 查寻找到的主机名。在 SMTP/initial-host/dns-host 子句中,注意初始主机名和在初始主机名上执行 DNS MX 记录查询找到的主机名的显示:mailhub.sesta.com 显然是 hostb.sesta.com 处的 MX 服务器。

  6. 在不同的线程(通过同一个进程)中,多线程 SMTP 客户打开到第二个系统的连接。

  7. 由于有两个不同的远程系统需要连接,在不同线程中的多线程 SMTP 客户机分别打开一个与每个系统的连接,第二个在此条目中,第一个见 5 中所示。条目这部分显示了发送方和目标方的 IP 地址和端口号,同时也显示了初始主机名,以及通过执行 DNS 查寻找到的主机名。在本例中,系统 hosta.sesta.com 显然是直接收邮件的。

  8. 除了产生具体的连接条目中外,LOG_CONNECTION=3 也使与连接有关的信息包含在常规邮件条目中,如例中所示。

  9. LOG_CONNECTION=3 致使 MTA 写入此条目。在所有邮件(本例中的 bobby 和 carl)出列后,连接被关闭,如此条目中的 C 所示。

  10. LOG_CONNECTION=3 致使 MTA 写入此条目。在所有邮件(本例中的 dave)出列后,连接被关闭,如此条目中的 C 所示。

图 13-12 说明了通过 LOG_CONNECTION=3 启用连接日志记录时,到访 SMTP 邮件的日志输出情况。

图 13-12 日志记录:入站连接日志记录

19-Feb-1998 17:02:08.70 tcp_local    +            O   (1)
 TCP|206.184.139.12|25|192.160.253.66|1244 SMTP       (2)

19-Feb-1998 17:02:26.65 tcp_local    l             E 1
 service@siroe.com rfc822;adam@sesta.com adam
 THOR.SIROE.COM (THOR.SIROE.COM [192.160.253.66])      (3)

19-Feb-1998 17:02:27.05 tcp_local    +             C   (4)
 TCP|206.184.139.12|25|192.160.253.66|1244 SMTP

19-Feb-1998 17:02:31.73 l                          D 1
 service@siroe.com rfc822;adam@sesta.com adam


  1. 远程系统打开一个连接。字符 O 表明此条目与打开的连接有关;字符 + 表明此条目与一个到访的连接有关。

  2. 显示了连接的 IP 地址和端口号。在此条目中,接收系统(生成日志文件条目的系统)的 IP 地址为 206.184.139.12,连接到端口 25;发送系统的 IP 地址为 192.160.253.66,从端口 1244 发送。

  3. 在此条目中,对于从到访 TCP/IP 通道(tcp_local)到 l 通道收件人的邮件入列,由于启用了 LOG_CONNECTION=3,故包括有默认以外的信息,应注意。特别是,发送系统在 HELO 或 EHLO 行中声明的名字,基于连接的 IP 地址的 DNS 反向查找所发现的发送系统名,以及发送系统 IP 地址,均有记录;参见第 8 篇 “配置通道定义”中关于影响此行为的通道关键字的讨论。

  4. 入站连接关闭。字符 C 表明此条目与连接的关闭有关;字符 + 表明此条目与到访连接有关。


Dispatcher 调试和日志文件

Dispatcher 的错误和调试输出(如果启用的话)将被写入 MTA 日志记录目录中的 dispatcher.log 文件。

调试输出可用 Dispatcher 配置文件中的 DEBUG 选项启用,或用 IMTA_DISPATCHER_DEBUG 环境变量(UNIX)在每一进程上启用。

DEBUG 选项或 IMTA_DISPATCHER_DEBUG 环境变量(UNIX)以十六进制定义了 32 位的调试掩码。若需启用所有调试项,可将该选项设置为 -1,或将全系统的逻辑或环境变量定义为值 FFFFFFFF。每一比特的实际意义请见表 13-7

表 13-7 Dispatcher 调试比特 


比特

十六进制值

十进制值

用途

0

x 00001

1

基本服务 Dispatcher 主模块调试。

1

x 00002

2

附加服务 Dispatcher 主模块调试。

2

x 00004

4

服务 Dispatcher 配置文件记录。

3

x 00008

8

基本服务 Dispatcher 其它调试。

4

x 00010

16

基本服务调试。

5

x 00020

32

附加服务调试。

6

x 00040

64

与进程有关的服务调试。

7

x 00080

128

未用。

8

x 00100

256

基本服务 Dispatcher 和进程通信调试。

9

x 00200

512

附加服务 Dispatcher 和进程通信调试。

10

x 00400

1024

信息包级通信调试。

11

x 00800

2048

未用。

12

x 01000

4096

基本 Worker Process 调试。

13

x 02000

8192

附加 Worker Process 调试。

14

x 04000

16384

其它 Worker Process 调试,特别是连接跨区转接

15

x 08000

32768

未用。

16

x 10000

65536

基本 Worker Process 至 Service Dispatcher I/O 调试。

17

x 20000

131072

附加 Worker Process 至 Service Dispatcher I/O 调试。

20

x 100000

1048576

基本统计调试。

21

x 200000

2097152

附加统计调试。

24

x 1000000

16777216

将 PORT_ACCESS 拒绝情况记录到 dispatcher.log 文件。


Solaris 上的系统参数

系统的堆大小(datasize)必须足以容纳 Dispatcher 的线程栈用量。因为每项 Dispatcher 服务都计算 STACKSIZE*MAX_CONNS,然后总计每项服务的计算值。系统的堆大小至少需为此数的两倍。

Dispatcher 配置文件中提供的 Dispatcher 服务可影响对各种系统参数的要求。

若需显示堆大小(即默认的 datasize),可用 csh 命令:

# limit

或用 ksh 命令

# ulimit -a

或实用程序

# sysdef


上一页    目录    索引    下一页
(c) 2002 年 Sun Microsystems, Inc. 版权所有。

更新日期:2002 年 2 月 27 日