Sun logo      上一个      目录      索引      下一个     

Sun ONE Messaging Server 6.0 管理员指南

第 17 章
日志记录和日志分析

Messaging Server 可以创建日志文件,该日志文件记录与服务器的管理、使用服务器支持的任何协议(SMTP、POP、IMAP 和 HTTP)的通信以及服务器使用的其它进程相关的事件。通过检查日志文件,您可以监视服务器操作的很多方面。

由于 MTA 使用了有别于其它服务的独立日志记录工具,所以您无法使用 Console 来配置日志记录服务以及查看日志。而是通过指定配置文件中的信息来配置 MTA 日志记录。因此本章分为三个部分。第一部分描述一般介绍性信息;第二部分描述邮件存储和管理服务的日志记录;第三部分描述 MTA 服务的日志记录。

第 1 部分:介绍

第 2 部分:服务日志(Message Store、Administration Server 和 MTA)

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


第 1 部分:介绍

您可以自定义创建和管理 Messaging Server 日志文件的策略。本章描述了日志文件的类型和结构,并讨论了如何管理以及如何查看日志文件。本章由以下各节组成:

日志记录服务

Messaging Server 为其支持的每个主要协议或服务都创建了独立的日志文件集。这些日志文件位于 msg_svr_base/data/log 中。您可以分别自定义和查看每种日志文件类型。表 17-1 列出了可以记录的服务,并说明了每种服务的日志文件。

表 17-1 日志记录服务

服务

日志文件说明

Admin

包含与 Console 和 Messaging Server 之间通信(大多数通过几个 CGI 进程)相关的日志事件,通过其 Administration Server 进行。

SMTP

包含与此服务器的 SMTP 活动相关的日志事件。

IMAP

包含与此服务器的 IMAP4 活动相关的日志事件。

POP

包含与此服务器的 POP3 活动相关的日志事件。

HTTP

包含与此服务器的 HTTP 活动相关的日志事件。

Default

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

使用第三方工具分析日志

对于超出 Messaging Server 功能范围的日志分析和报告生成,您需要使用其它工具。您可以自行使用文本编辑器或标准系统工具处理日志文件。

使用支持正则表达式分析的可编写文本编辑器,您可以搜索和提取基于本章中讨论的任何标准的日志条目,并可以对结果进行排序,甚至还可以生成总数或其它统计信息。

在 UNIX 环境中,您还可以修改和使用现有报告生成工具,这些工具是为处理 UNIX syslog 文件而开发的。如果您希望使用公共域 syslog 处理工具,请记住您可能需要修改此工具以解释不同的日期/时间格式,以及出现在 Messaging Server 日志条目中但未出现在 syslog 条目中的两个附加的组件(facilitylogLevel)。


第 2 部分:服务日志(Message Store、Administration Server 和 MTA)

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

对于这些服务,您可以使用 Console 来指定日志设置和查看日志。您指定的设置将影响所记录的事件以及事件的数目。分析日志文件时,您可以使用这些设置和其它特性来完善日志事件的搜索。有关 MTA 的服务日志的其它信息,请参见第 3 部分:服务日志 (MTA)

第 2 部分包含以下各节:

日志特性

本节描述了邮件存储和管理服务的以下日志特性:日志记录级别、日志事件的类别、日志文件名惯例和日志文件目录。

日志记录级别

日志记录的级别或优先级定义了日志记录活动的详细程度或冗长度。高优先级意味着较简略,仅记录具有高优先级(高严重程度)的事件。低级别意味着更为详细,将在日志文件中记录更多事件。

通过设置 logfile.service.loglevel 配置参数,您可以为每种服务(POP、IMAP、HTTP、Admin 和 Default)单独设置日志记录级别(请参见定义和设置日志记录选项)。您还可以使用日志记录级别来过滤日志事件的搜索。表 17-2 对可用级别进行了说明。这些日志记录级别是 UNIX syslog 工具定义的那些级别的子集。

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

级别

说明

Critical

最少的日志记录信息。发生严重问题或紧急情况时(例如服务器无法访问邮箱或需要其运行的库),一个事件将被写入日志。

Error

发生错误情况时(例如尝试连接到客户机或其它服务器失败),一个事件将被写入日志。

Warning

发生警告情况时(例如服务器无法理解客户机所发送的通信),一个事件将被写入日志。

Notice

发生通知(正常但重要的情况)时(例如用户登录失败或会话关闭),一个事件将被写入日志。

Information

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

Debug

最冗长的日志记录。仅供调试使用。执行每个进程或任务中的单个步骤时都将事件写入日志,用以确定问题。

当选择一个特定日志记录级别时,与该级别以及高于该级别(较低冗长度)的所有级别相对应的事件都将包括在日志记录内。日志记录的缺省级别为 Notice


指定的日志记录越冗长,日志文件将占用的磁盘空间就越大;有关指导原则,请参见定义和设置日志记录选项


日志事件的类别

在每个支持的服务或协议中,Messaging Server 将根据日志事件所发生的设备或功能区进一步对日志事件进行分类。每个日志事件都包含生成日志事件的设备的名称。这些类别将有助于在搜索过程中过滤事件。表 17-3 列出了 Messaging Server 为日志记录目的所标识的类别。

表 17-3 日志事件的发生类别 

设备

说明

General

与此协议或服务相关的无明显特征的操作

LDAP

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

Network

与网络连接相关的操作(套接字错误归入此类别)

Account

与用户帐户相关的操作(用户登录归入此类别)

Protocol

与特定于协议的命令相关的协议级操作(由 POP、IMAP 或 HTTP 函数返回的错误归入此类别)

Stats

与收集服务器统计信息相关的操作

Store

与访问邮件存储相关的低级操作(读/写错误归入此类别)

有关在日志搜索中将类别用作过滤器的示例,请参见搜索并查看日志

邮件存储和管理日志文件名惯例

POP、IMAP、HTTP、Admin 和 Default 服务的日志文件使用同一命名惯例。每个日志文件都具有以下格式的文件名:

service.sequenceNum.timeStamp

表 17-4 列出了邮件存储日志文件名惯例。

表 17-4 存储和管理日志文件名惯例

组件

定义

service

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

sequenceNum

一个整数,它指定了此日志文件相对于日志文件目录中的其它日志文件的创建顺序。具有较高序列号的日志文件相对于具有较低编号的日志文件而言,属于较新的文件。序列号无法翻滚,而只能在服务器的生命期(从安装服务器开始)内单调增加。

timeStamp

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

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

开放式的序列号与时间戳的组合让您在旋转、终止和选择用于分析的文件时具有了更大的灵活性。有关更为具体的建议,请参见定义和设置日志记录选项

日志文件目录

每项日志记录服务均被指定了单独的目录,其中存储了服务的日志文件。所有 IMAP 日志文件均存储在一起,所有 POP 日志文件及其它服务的日志文件也是如此。您可以定义每个目录的位置,也可以定义目录中允许存在的日志文件的最大大小和数目。

请确保存储容量足够所有日志文件使用。日志数据可能量很大,尤其在较低(较冗长)的日志记录级别中。

同时,定义适当的日志记录级别、日志旋转、日志过期和服务器备份策略也很重要,以便备份所有日志文件目录并使这些目录都不会过载;否则,就可能丢失信息。请参见定义和设置日志记录选项

日志文件格式

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

dateTime hostName processName[pid]:category logLevel:eventMessage

表 17-5 列出了日志文件组件。请注意,除了日期/时间格式不同以及此格式包括两个附加组件(categorylogLevel)以外,此事件说明的格式与 UNIX syslog 工具定义的格式相同。

表 17-5 存储和管理日志文件组件

组件

定义

dateTime

记录事件时的日期和时间,以 dd/mm/yyyy hh:mm:ss 格式表示,时区字段以来自 GMT 的 +/-hhmm 表示。例如:
02/Jan/1999:13:08:21 -0700

hostName

服务器在其上运行的主机名:例如,showshoe

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

processName

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

pid

生成事件的进程 ID:例如,18753

category

事件所属的种类:例如,General(请参见表 17-3)。

logLevel

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

eventMessage

可为任意长度的特定于事件的解释消息:例如,Log created (894305624)

以下是使用 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)。

在“日志查看器”窗口中查看日志文件时,您可以通过搜索事件中的任意特定组件(例如特定的日志记录级别或种类或特定的进程 ID)来限制显示的事件。有关详细信息,请参见搜索并查看日志

每个日志条目事件消息的格式都特定于所记录事件的类型,即每个服务都定义了出现在其任何事件消息中的内容。许多事件消息都简单明了,有些事件消息则复杂一些。

定义和设置日志记录选项

您可以定义能最好地满足管理需要的邮件存储和管理服务日志记录配置。本节讨论了可帮助您决定最佳配置和策略的问题,并解释了如何实现这些配置和策略。

灵活的日志记录体系结构

日志文件的命名模式 (service.sequenceNum.timeStamp) 有助于您设计灵活的日志旋转和备份策略。将不同服务的事件写入不同的文件便于您快速隔离问题。同时,由于文件名中的序列号持续增长,并且时间戳始终是唯一的,因此当有限的序列号集用尽后,以后的日志文件也不会简单地覆写早期的日志文件。而是仅在达到更灵活的生存期限制、文件数目或存储总数时,才会覆写或删除较旧的日志文件。

Messaging Server 支持日志文件的自动旋转,此功能简化了管理,也使备份变得更容易。不必手动删除当前日志文件并创建新日志文件以保留后续日志事件。您可以随时备份目录中除当前日志文件之外的所有日志文件,而不必停止服务器或手动通知服务器启动新日志文件。

设置日志记录策略的过程中,您可以针对每种服务设置选项,这些选项控制着日志存储总数、最大日志文件数、单个文件大小、最大文件生存期和日志文件旋转的速度等限制。

规划所需的选项

请记住,您必须设置若干个限制,超过其中一个限制可能会导致日志文件的旋转或删除。最先到达的限制为控制限制。例如,如果最大日志文件大小是 3.5 MB,并且您指定每天创建一个新日志,如果每 24 小时建立的日志数据不止 3.5 MB,那么每天实际创建的日志文件则不止一个。而且,如果最大日志文件数目是 10 个并且最大生存期是 8 天,则可能永远不会达到日志文件的生存期限制,因为较快的日志旋转将意味着在不到 8 天之内便已创建 10 个文件。

为 Messaging Server 管理日志提供的以下缺省值可能是规划的合理起始点:

目录中日志文件的最大数目: 10
最大日志文件大小:2 MB
所有日志文件允许的最大大小总计:20 MB
允许的最小可用磁盘空间:5 MB
日志翻滚时间:1 天
过期之前的最大生存期:7 天
日志记录的级别:Notice

您可以看到此配置假设预计服务器管理日志数据每天累积大约 2 MB,每周备份,分配给管理日志的存储空间总数至少是 25 MB。(如果日志记录级别更冗长,则这些设置可能不足。)

对于 POP、IMAP 或 HTTP 日志,相同的值可能是合理的启动值。如果所有服务具有大致相同的日志存储要求(如此处所示的缺省值),您可能期望初始规划总计约 150 MB 的日志存储容量。(请注意,这仅意味着存储要求的一般指示;实际的要求可能会显著不同。)

设置日志记录选项

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

这些选项的最优设置取决于日志数据积累的速度。可能需要 4,000 到 10,000 个日志条目以占用 1 MB 存储。在较冗长的日志记录级别(例如 Notice),一般忙碌的服务器每周可能生成成百上千兆字节的日志数据。可遵循以下方法:

请注意,您可以选择将日志信息发送给系统日志设备而非服务器提供的日志文件。如下所示,您可以通过设置 syslogfacility 选项来将日志信息发送至系统日志:

configutil -o logfile.service.syslogfacility -v value

其中 serviceadminpopimapimtahttpvalueusermaildaemonlocal0local7 或 none。

如果设置了值,则系统会将消息记录到与设置值相应的系统日志设备并忽略所有其它日志文件服务选项。如果未设置选项或值为 none,则日志记录将使用 Messaging Server 日志文件。

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

  1. 打开要设置其日志文件选项的 Messaging Server。
  2. 单击“配置”选项卡,打开左窗格中的“日志文件”文件夹,并选择某一服务(例如 IMAP、HTTP 或 Admin)的日志文件。
  3. 从“详细程度”下拉列表中选择日志记录级别。
  4. 在“日志文件的目录路径”字段中,输入将保留日志文件的目录名称。
  5. 在“每个日志的文件大小”字段中,输入最大日志文件大小。
  6. 在“创建一个新日志,每隔”字段中,输入日志旋转时间安排的数目。
  7. 在“每个目录的日志数目”和“如果日志超过生存期”字段中,输入与备份时间安排相协调的最大日志文件数目和最大生存期。
  8. 在“如果超出总日志大小”字段中,输入期望的存储限制总数。
  9. 在“如果可用磁盘空间小于”字段中,输入希望保留的最小可用磁盘空间量。

命令行     要在命令行设置日志记录选项,请使用以下示例中所示的 configutil 命令。

如果系统不支持 http 邮件访问(即 Web 邮件),则可以通过设置以下变量来禁用 http 日志记录。如果系统要求 Web 邮件支持(例如 Messenger Express),请勿设置这些变量。

configutil -o service.http.enable -v no
configutil -o service.http.enablesslport -v no

设置日志记录级别:

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 指定了一个以秒为单位的数目。

搜索并查看日志

Console 提供了用于查看邮件存储和管理日志数据的基本界面。它允许选择单个日志文件,并允许在那些文件中执行灵活的日志条目的过滤搜索。

对于给定的服务,日志文件以时间先后次序列出。选择要搜索的日志文件后,您可以通过指定搜索参数来缩小对单个事件的搜索范围。

搜索参数

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

注意:搜索区分大小写。

查看日志时,组合日志记录级别和设备的示例可能包括以下几种:

指定搜索和查看结果

请按以下步骤使用给定服务所属的特定的特性来搜索日志事件:

  1. 在 Console 中,打开希望检查其日志文件的 Messaging Server。
  2. 请执行以下任一步骤以显示给定日志记录服务的日志文件“内容”选项卡:
    • 单击“任务”选项卡,然后单击“查看服务日志”,其中服务是日志记录服务的名称(例如“IMAP 服务”或“管理”)。
    • 单击“配置”选项卡,然后打开左窗格中的“日志文件”文件夹并选择某一服务(例如 IMAP 或 Admin)的日志文件。然后单击右窗格中的“内容”选项卡。
  3. 系统将显示该日志记录服务的“内容”选项卡。
  4. 在“日志文件名”字段中,选择您要检查的日志文件。
  5. 单击“查看所选日志”按钮将打开“日志查看器”窗口。
  6. 在“日志查看器”窗口中,指定所需的搜索参数(已在上一节搜索参数中描述)。
  7. 单击“更新”将执行搜索并将结果显示在“日志条目”字段中。


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

MTA 提供了记录每封入队列和出队列的邮件的功能。还提供了分发程序错误和调试输出。第 3 部分包含以下各节:

您可以控制每个频道上的日志记录,也可以指定要记录的所有频道上的邮件活动。在初始配置中,所有频道上均禁用日志记录。

启用日志记录使得 MTA 在邮件每次通过 MTA 频道时,都将一个条目写入 mail.log* 文件。如果您希望获得有关正在通过 MTA(或通过特定频道)的邮件数目的统计信息,或者调查其它问题(例如是否及何时发送或传送邮件)时,此类日志条目会很有用。

如果仅对收集有关通过少数特定 MTA 频道的邮件数目的统计信息感兴趣,则可能希望仅启用主要感兴趣的那些 MTA 频道上的日志频道关键字。许多站点倾向于启用所有 MTA 频道上的日志记录。特别是,如果您要尝试跟踪问题,诊断某些问题的第一步是注意到邮件未进入您期望或想要的频道,启用所有频道的日志记录将有助于您调查此类问题。


注意

如果启用了日志记录,mail.log 将稳定地增长,同时如果不进行检查,将消耗所有可用磁盘空间。监视此文件的大小并定期地删除不必要的内容。按照要求将创建此文件的另一版本时,还可以删除整个文件。


启用 MTA 日志记录

要启用特定频道的日志记录,请将关键字 logging 添加到 MTA 配置文件中的频道定义,如以下示例所示:

channel-name keyword1 keyword2 logging

此外,您还可以设置一些配置参数,例如日志文件的目录路径、日志级别等等。请参见第 2 部分:服务日志(Message Store、Administration Server 和 MTA)

如果您希望将所有频道日志消息活动都记录到日志文件中,则只需将关键字 logging 添加到 MTA 配置文件的频道块区域的缺省频道(请参见配置频道缺省值)即可。例如:

defaults logging notices 1 2 4 7 copywarnpost copysendpost postheadonly noswitchchannel immnonurgent maxjobs 7 defaulthost siroe.com

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

每封邮件入队列和出队列都做了记录。所有日志条目均被写入 msg_svr_base/data/logmail.log_current

邮件将返回作业(每晚午夜时分运行),将所有现有 mail.log_yesterday 都附加到累积日志文件 mail.log,将当前 mail.log_current 文件重命名为 mail.log_yesterday,然后开始一个新的 mail.log_current 文件。它还对所有 connection.log* 文件执行相似的操作。

通过将 LOG_MESSAGES_SYSLOG 选项设置为 1,您可以将 MTA 日志消息发送给系统日志 (UNIX)。0 为缺省值,表示未执行系统日志(事件日志)记录。

指定附加 MTA 日志记录选项

除了启用日志记录时通常提供的基本信息之外,您还可以通过设置 MTA 选项文件中的各种 LOG_* MTA 选项来指定要包含的附加、可选信息字段。有关选项文件的完整详细信息,请参见 Messaging Server Reference Manual

MTA 日志条目格式

MTA 日志文件以 ASCII 文本书写。缺省情况下,每个日志文件条目都包含八个或九个字段,如下面示例中所示。

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

日志条目显示:

  1. 创建条目的日期和时间(示例:19-Jan-1998 19:16:57.64)。
  2. 源频道的频道名称(在此示例中为 l)。
  3. 目标频道的频道名称(在此示例中为 tcp_local)。(对于 SMTP 频道,当启用 LOG_CONNECTION 时,加号“+”表示入站到 SMTP 服务器;减号“-”表示通过 SMTP 客户机出站。)
  4. 条目的类型 (E);请参见表 17-6
  5. 邮件的大小 (1)。缺省表示为千字节(使用 MTA 选项文件中的 BLOCK_SIZE 关键字可以更改此缺省值)。
  6. 信封 From: 地址 (adam@sesta.com)。请注意带有空信封 From:地址的邮件(例如通知邮件),此字段将为空白。
  7. 信封 To: 地址 (marlowe@siroe.com) 的原始格式。
  8. 信封 To: 地址 (marlowe@siroe.com) 的活动(当前)格式。
  9. 传送状态(仅适用于 SMTP 频道)。

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

表 17-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_PROCESSLOG_USERNAME 全部启用后,格式将发生变化,如下面示例中所示。(此样例日志条目行已因版式原因而换行;实际日志条目将显示在一个物理行。)

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 定期返回作业将执行站点提供的 msg_svr_base/bin/daily_cleanup 程序(如果存在)。因此,某些站点可能选择提供他们自己的清除程序,例如每周重命名一次(或每月一次)旧的 mail.log 文件等。

MTA 邮件日志记录示例

记录在 MTA 邮件文件中的确切字段格式和字段列表将根据您设置的日志记录选项而有所不同。本节将描述一些解释典型日志条目类别的示例。有关附加、可选字段的说明,请参见指定附加 MTA 日志记录选项


由于版式原因,日志文件条目被折叠成多行显示 — 实际日志文件条目是每个条目一行。


查看日志文件时,请记住在典型系统上会一次处理多封邮件。通常,与特定邮件相关的条目将散布在与其它同时正在处理的邮件相关的条目中。基本日志记录信息适用于收集通过 MTA 移动的邮件总体数目。

如果您希望将与同一邮件相关的特定条目和相同的收件人相关联,则可能要启用 LOG_MESSAGE_ID。如果您希望将特定邮件与 MTA 队列区域中的特定文件相关联,或希望从条目查看已尝试传送特定的尚未成功出队列的邮件的次数,则可能要启用 LOG_FILENAME。对于 SMTP 邮件(通过 TCP/IP 频道处理),如果您希望将 TCP 连接与已发送邮件的远程系统相互关联,则可能要启用 LOG_PROCESSLOG_CONNECTION 的某一级别。

下面的示例显示了如果本地用户通过外发 TCP/IP 频道发送邮件(例如发送到 Internet),而可能看到的日志条目类别的相当基本的示例。在本示例中,启用了 LOG_CONNECTION。标有 (1) 和 (2) 的行是一个条目 - 它们在实际日志文件中将显示为一个物理行。类似地,标有 (3) - (7) 的行是一个条目并将显示为一个物理行。

代码示例 17-1 日志记录:本地用户发送外发邮件

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. 此行显示了一 (1) 块邮件从 l 频道到 tcp_local 频道入队列 (E) 的日期和时间。
  2. 这是与 (1) 位于同一日志文件物理行的一部分,因排版方便而在此处分行显示。显示了信封 From: 地址(在本例中为 adam@sesta.com)以及原始版本和当前版本的信封 To: 地址(在本例中为 marlowe@siroe.com)。
  3. 显示了一 (1) 块邮件从 tcp_local 频道出队列 (D) 的日期和时间 - 即,由 tcp_local 频道成功发送到某一远程 SMTP 服务器。
  4. 显示了信封 From: 地址、原始信封 To: 地址和信封 To: 地址的当前格式。
  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 状态代码和某一附加文本进行响应。

代码示例 17-2 显示了类似于代码示例 17-3 中所示的日志记录条目,但通过设置 LOG_FILENAME=1 和显示文件名和消息 ID 的 LOG_MESSAGE_ID=1 记录了附加信息;请参见 (1) 和 (2)。特别是邮件 ID 可用于将条目与邮件相关联。

代码示例 17-2 日志记录:包括可选日志记录字段

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.

代码示例 17-3 对启用 LOG_FILENAME=1LOG_MESSAGE_ID=1LOG_CONNECTION=1 将邮件发送给多个收件人进行了说明。此处已将用户 adam@sesta.com 发送给 MTA 邮递列表 test-list@sesta.com,此邮递列表已扩展到 bob@sesta.comcarol@varrius.comdavid@varrius.com。请注意每个收件人的原始信封 To: 地址是 test-list@sesta.com,尽管当前信封 To: 地址是每个收件人各自的地址。请注意邮件 ID 是如何一致的,尽管涉及了两个单独的文件(一个用于 l 频道而另一个用于出 tcp_local 频道)。

代码示例 17-3 日志记录:发送到列表

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.

代码示例 17-4 对尝试发送到不存在的域(此处为 very.bogus.com)进行了说明;即,发送到未由 MTA 的重写规则发现其不存在的,并且 MTA 与外发 TCP/IP 频道相匹配的域名。此示例假定了 MTA 选项设置 LOG_FILENAME=1LOG_MESSAGE_ID=1

TCP/IP 频道在 DNS 中运行并检查域名时,DNS 返回一个错误,指示该名称不存在。请注意“拒绝”条目 (R)(如 (5) 中所示),同时 DNS 返回错误,指示该域名是非法域名(如 (6) 中所示)。

由于提交邮件后地址被拒绝,MTA 将生成弹回信息给原发送人。MTA 将新拒绝邮件入队给原发送人 (1),并在删除原出站邮件((5) 中所示的 R 条目)之前,将一份副本发送给邮寄主管 (4)。

通知邮件(例如弹回邮件)具有空信封 From:地址 - 例如,如 (2) 和 (8) 中所示 - 其中信封 From:字段显示为空白。由 MTA 生成的弹回邮件的初始排队显示了新通知邮件的邮件 ID 和紧随其后的原始邮件的邮件 ID (3)。(此类信息对于 MTA 不是总可以使用,但可用于记录时,它允许对应于出站失败的邮件的日志条目与对应于结果通知邮件的日志条目相关联。)此类通知邮件入队到进程频道,该频道转而又将这些邮件排队到相应的目标频道 (7)。

代码示例 17-4 日志记录:发送到不存在的域

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>

代码示例 17-5 对尝试发送到远程系统上的错误地址进行了说明。此示例假设 MTA 选项设置为 LOG_FILENAME=1LOG_MESSAGE_ID=1,频道选项设置为 LOG_BANNER=1LOG_TRANSPORTINFO=1。请注意拒绝条目 (R),如 (1) 中所示。但与代码示例 17-4 中的拒绝条目不同,请注意此处的拒绝条目显示了已建立到远程系统的连接,并显示了远程 SMTP 服务器发布的 SMTP 错误代码,(2) 和 (3)。(2) 中所示的信息是设置频道选项 LOG_BANNER=1LOG_TRANSPORTINFO=1 的结果。

代码示例 17-5 日志记录:发送给不存在的远程用户

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>

代码示例 17-6 对 MTA 拒绝远程端提交邮件的尝试时所产生的 日志文件条目进行了说明。(本示例假设未启用 LOG_* 可选项,因此条目中仅记录了基本字段。请特别注意,启用 LOG_CONNECTION 选项将导致在此类 J 条目中产生附加信息字段。)在此例中,示例是对已设置 SMTP 中继阻塞(请参见配置 SMTP 中继阻止)的 MTA 而言的,带有 ORIG_SEND_ACCESS 映射,该映射包括:

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 遭到拒绝。

代码示例 17-6 日志记录:拒绝远程端提交邮件的尝试

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 记录表示,如代码示例 17-4代码示例 17-5 所示)。
  2. 显示了尝试的信封 From: 和 To: 地址。在此示例中,无可用的原始信封 To: 信息,因此该字段为空。
  3. 此条目包括 MTA 发给远程端(尝试的发件人)的 SMTP 错误消息。

代码示例 17-7 对在第一次尝试时不能发送邮件所产生的日志文件条目进行了说明,因此 MTA 将多次尝试发送该邮件。本示例假设选项设置为 LOG_FILENAME=1LOG_MESSAGE_ID=1

代码示例 17-7 日志记录:多次传送尝试

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 软件包找不到至远程端的路由时,此传送尝试将失败。与代码示例 17-4 不同,DNS 并非针对目标域名 some.org;相反,“no route to host”错误表示在发送端和接收端之间存在网络问题。
  5. 下一次 MTA 定期作业运行时,它重新尝试传送,再次不成功。
  6. 此文件名现在是 ZY*,表示这是第二次尝试。
  7. 第三次未成功的尝试的文件名是 ZX*
  8. 下一次周期性作业重新尝试传送,传送失败,尽管这一次 TCP/IP 软件包未对无法进入远程 SMTP 服务器表示不满,但其实是远程 SMTP 服务器不接受连接。(可能远程端修复了其网络问题,但尚未备份其 SMTP 服务器 — 或其 SMTP 服务器正忙于处理其它消息而无法在 MTA 尝试连接时接受连接。)
  9. 最终邮件出了队列。

代码示例 17-8 对通过转换频道路由邮件的例子进行了说明。假设此站点具有 CONVERSIONS 映射表,例如:

CONVERSIONS

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

本示例假设选项设置为 LOG_FILENAME=1LOG_MESSAGE_ID=1

代码示例 17-8 日志记录:通过转换频道路由外来 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 频道使邮件出队(传送)。

代码示例 17-9 说明了通过 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 收件人被存储在另一邮件文件中。

代码示例 17-9 日志记录:出站连接日志记录

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 表示此条目对应于连接的开口。同时请注意尽管此开口由线程 2 和线程 3 来执行,但由于多线程的 TCP/IP 频道使用同一进程来处理这些不同的连接开口,因此此处的进程 ID 相同(均为 1f625)。
  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 所表示。

代码示例 17-10 说明了通过 LOG_CONNECTION=3 启用连接日志记录后外来 SMTP 邮件的日志输出。

代码示例 17-10 日志记录:入站连接日志记录

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 地址均被记录下来;有关对影响此性能的频道关键字的讨论,请参见第 10 章“配置频道定义”
  4. 关闭入站连接。字符 C 表示此条目与连接关闭有关;字符 + 表示此条目与外来连接有关。

分发程序调试和日志文件

分发程序错误和调试输出(如果已启用)将被写入 MTA 日志目录中的 dispatcher.log 文件。

可以使用分发程序配置文件中的 DEBUG 选项启用调试输出,或在每个进程级别上使用 IMTA_DISPATCHER_DEBUG 环境变量 (UNIX)。

DEBUG 选项或 IMTA_DISPATCHER_DEBUG 环境变量 (UNIX) 将以十六进制定义 32 位调试掩码。通过将选项设置为 -1,或通过在系统范围内将逻辑变量或环境变量定义为值 FFFFFFFF,来启用所有调试。表 17-7 中说明了每个位的实际意义。

表 17-7 分发程序调试位 

 

十六进制值

十进制值

用法

 

0

x 00001

1

基本服务分发程序主模块调试。

1

x 00002

2

附加服务分发程序主模块调试。

2

x 00004

4

服务分发程序配置文件日志记录。

3

x 00008

8

基本服务分发程序杂项调试。

4

x 00010

16

基本服务调试。

5

x 00020

32

附加服务调试。

6

x 00040

64

进程相关服务调试。

7

x 00080

128

未使用。

8

x 00100

256

基本服务分发程序和进程通信调试。

9

x 00200

512

附加服务分发程序和进程通信调试。

10

x 00400

1024

软件包级别通信调试。

11

x 00800

2048

未使用。

12

x 01000

4096

基本工作进程调试。

13

x 02000

8192

附加工作进程调试。

14

x 04000

16384

附加工作进程调试,特别是连接切换。

15

x 08000

32768

未使用。

16

x 10000

65536

基本工作进程到服务分发程序 I/O 调试。

17

x 20000

131072

附加工作进程到服务分发程序 I/O 调试。

20

x 100000

1048576

基本统计信息调试。

21

x 200000

2097152

附加统计信息调试。

24

x 1000000

16777216

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

Solaris 上的系统参数

系统的堆大小 (datasize) 必须能够满足分发程序的线程堆栈使用。对每个分发程序服务计算 STACKSIZE*MAX_CONNS,然后把每项服务计算的值相加。系统的堆大小必需至少是此数目的两倍。

分发程序配置文件中提供的分发程序服务将影响各种系统参数的要求。

要显示堆大小(即缺省的 datasize),请使用 csh 命令:

# limit

ksh 命令

# ulimit -a

或实用程序

# sysdef



上一个      目录      索引      下一个     


版权所有 2003 Sun Microsystems, Inc.。保留所有权利。