Sun Java System Messaging Server 6 2004Q2 管理指南 |
第 20 章
日志记录和日志分析Messaging Server 可以创建日志文件,该日志文件记录与服务器的管理、使用服务器支持的任何协议(SMTP、POP、IMAP 和 HTTP)的通信以及服务器使用的其他进程相关的事件。通过检查日志文件,您可以监视服务器操作的很多方面。
由于 MTA 使用了有别于其他服务的独立日志记录工具,所以您无法使用 Console 来配置日志记录服务以及查看日志。而是通过指定配置文件中的信息来配置 MTA 日志记录。因此本章分为三个部分。第一部分描述一般介绍性信息;第二部分描述邮件存储和管理服务的日志记录;第三部分描述 MTA 服务的日志记录。
第 2 部分:服务日志(Message Store、Administration Server 和 MTA)
第 1 部分:介绍您可以自定义创建和管理 Messaging Server 日志文件的策略。本章描述了日志文件的类型和结构,并讨论了如何管理以及如何查看日志文件。其中包括以下各节:
记录的服务
Messaging Server 为其支持的每个主要协议或服务都创建了独立的日志文件集。这些日志文件位于 msg_svr_base/data/log 中。您可以分别自定义和查看每种日志文件类型。表 20-1 列出了可以记录的服务,并说明了每种服务的日志文件。
使用第三方工具分析日志
对于超出 Messaging Server 功能范围的日志分析和报告生成,您需要使用其他工具。您可以自行使用文本编辑器或标准系统工具处理日志文件。
使用支持正则表达式分析的可编写文本编辑器,您可以搜索和提取基于本章中讨论的任何标准的日志条目,并可以对结果进行排序,甚至还可以生成总数或其他统计信息。
在 UNIX 环境中,您还可以修改和使用现有报告生成工具,这些工具是为处理 UNIX syslog 文件而开发的。如果您希望使用公共域 syslog 处理工具,请记住您可能需要修改此工具以解释不同的日期/时间格式,以及出现在 Messaging Server 日志条目中但未出现在 syslog 条目中的两个附加的组件(facility 和 logLevel)。
第 2 部分:服务日志(Message Store、Administration Server 和 MTA)本节说明了以下服务的日志记录:POP、IMAP、HTTP、MTA、Admin 和 Default(请参见表 20-1)。
对于这些服务,您可以使用 Console 来指定日志设置和查看日志。您指定的设置将影响所记录的事件以及事件的数目。分析日志文件时,您可以使用这些设置和其他特性来完善日志事件的搜索。有关 MTA 的服务日志的其他信息,请参见第 3 部分:服务日志 (MTA)。
第 2 部分包含以下各节:
日志特性
本节描述了邮件存储和管理服务的以下日志特性:日志记录级别、日志事件的类别、日志文件名惯例和日志文件目录。
日志记录级别
日志记录的级别或优先级定义了日志记录活动的详细程度或冗长度。高优先级意味着较简略,仅记录具有高优先级(高严重程度)的事件。低级别意味着更为详细,将在日志文件中记录更多事件。
您可以通过设置 logfile.service.loglevel 配置参数来为每种服务(POP、IMAP、HTTP、Admin 和 Default)单独设置日志记录级别(请参见定义和设置日志记录选项)。您还可以使用日志记录级别来过滤日志事件的搜索。表 20-2 对可用级别进行了说明。这些日志记录级别是 UNIX syslog 工具定义的那些级别的子集。
当选择一个特定日志记录级别时,与该级别以及高于该级别(较低冗长度)的所有级别相对应的事件都将包括在日志记录内。日志记录的缺省级别为 Notice。
注
指定的日志记录越冗长,日志文件将占用的磁盘空间就越大;有关指导原则,请参见定义和设置日志记录选项。
日志事件的类别
在每个支持的服务或协议中,Messaging Server 将根据日志事件所发生的设备或功能区进一步对日志事件进行分类。每个日志事件都包含生成日志事件的设备的名称。这些类别将有助于在搜索过程中过滤事件。表 20-3 列出了 Messaging Server 为日志记录目的所标识的类别。
有关在日志搜索中将类别用作过滤器的实例,请参见搜索并查看日志。
邮件存储和管理日志文件名惯例
POP、IMAP、HTTP、Admin 和 Default 服务的日志文件使用同一命名惯例。每个日志文件都具有以下格式的文件名:
service.sequenceNum.timeStamp
表 20-4 列出了邮件存储日志文件名惯例。
例如,名为 imap.63.915107696 的日志文件是指 IMAP 日志文件目录中创建的第 63 个日志文件,创建于 1998 年 12 月 31 日中午 12:34:56。
开放式的序列号与时间戳的组合让您在旋转、终止和选择用于分析的文件时具有了更大的灵活性。有关更为具体的建议,请参见定义和设置日志记录选项。
日志文件目录
每项日志记录服务均被指定了单独的目录,其中存储了服务的日志文件。所有 IMAP 日志文件均存储在一起,所有 POP 日志文件及其他服务的日志文件也是如此。您可以定义每个目录的位置,也可以定义目录中允许存在的日志文件的最大大小和数目。
请确保存储容量足够所有日志文件使用。日志数据可能量很大,尤其在较低(较冗长)的日志记录级别中。
同时,定义适当的日志记录级别、日志旋转、日志过期和服务器备份策略也很重要,以便备份所有日志文件目录并使这些目录都不会过载;否则,就可能丢失信息。请参见定义和设置日志记录选项。
日志文件格式
所有由 Messaging Server 创建的邮件存储和管理服务日志文件都具有相同的内容格式。日志文件是多行文本文件,其中每行描述一个日志事件。对于每项支持的服务,所有事件说明都具有通用格式:
dateTime hostName processName[pid]:category logLevel: eventMessage
表 20-5 列出了日志文件组件。请注意,除了日期/时间格式不同以及此格式包括两个附加组件(category 和 logLevel)以外,此事件说明的格式与 UNIX syslog 工具定义的格式相同。
表 20-5 存储和管理日志文件组件
组件
定义
dateTime
记录事件时的日期和时间,以 dd/mm/yyyy hh:mm:ss 格式表示,时区字段以来自 GMT 的 +/-hhmm 表示。例如:
02/Jan/1999:13:08:21 -0700hostName
服务器在其上运行的主机名:例如,showshoe。
注:如果主机上有多个 Messaging Server 实例,则可以使用进程 ID (pid) 将不同实例的日志事件相互分开。
processName
生成事件的进程名称:例如,cgi_store。
pid
生成事件的进程 ID:例如,18753。
category
事件所属的种类:例如,General(请参见表 20-3)。
logLevel
事件所表示的日志记录级别:例如,Notice(请参见表 20-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 connect03/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 0IMAP 和 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
其中 service 是 admin、pop、imap、imta 或 http,value 是 user、mail、daemon、local0 至 local7 或 none。
如果设置了值,则系统会将消息记录到与设置值相应的系统日志设备并忽略所有其他日志文件服务选项。如果未设置选项或值为 none,则日志记录将使用 Messaging Server 日志文件。
- 打开要设置其日志文件选项的 Messaging Server。
- 单击“配置”选项卡,打开左窗格中的“日志文件”文件夹,并选择某一服务(例如 IMAP、HTTP 或 Admin)的日志文件。
- 从“详细程度”下拉列表中选择日志记录级别。
- 在“日志文件的目录路径”字段中,输入将保留日志文件的目录名称。
- 在“每个日志的文件大小”字段中,输入最大日志文件大小。
- 在“创建一个新日志,每隔”字段中,输入日志旋转时间安排的数目。
- 在“每个目录的日志数目”和“如果日志超过生存期”字段中,输入与备份时间安排相协调的最大日志文件数目和最大生存期。
- 在“如果超出总日志大小”字段中,输入期望的存储限制总数。
- 在“如果可用磁盘空间小于”字段中,输入希望保留的最小可用磁盘空间量。
命令行 要在命令行设置日志记录选项,请使用以下实例中所示的 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
其中 service 是 admin、pop、imap、imta 或 http,loglevel 是 Nolog、Critical、Error、Warning、Notice、Information 或 Debug。
指定日志文件的目录路径:
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 提供了用于查看邮件存储和管理日志数据的基本界面。它允许选择单个日志文件,并允许在那些文件中执行灵活的日志条目的过滤搜索。
对于给定的服务,日志文件以时间先后次序列出。选择要搜索的日志文件后,您可以通过指定搜索参数来缩小对单个事件的搜索范围。
搜索参数
以下是可以指定用于查看日志数据的搜索参数:
- 时间段。您可以指定从其中检索事件的特定时间段的开始和结束时间,也可以指定要搜索的天数(当前日期之前)。通常,您可以指定一个范围以查看导致服务器崩溃的日志事件或在已知时间发生的其他事件。或者,您可以指定一天的范围以仅查看在当前日志文件中的今天的事件。
- 日志记录的级别。您可以指定日志记录级别(请参见日志记录级别)。您可以选择特定的级别来揭露特定的问题;例如,选择“Critical”以查看服务器关闭的原因,或选择“Error”以查找失败的协议调用。
- 设备。您可以指定设备(请参见日志事件的类别)。如果您知道包含问题的功能区,则可以选择特定的设备;例如,如果确信服务器崩溃涉及磁盘错误,则选择“Store”,或如果问题在于 IMAP 协议命令错误,则选择“Protocol”。
- 文本搜索模式。您可以提供文本搜索模式以进一步缩小搜索范围。您可以包括可表示为通配符类型搜索的事件的任何组件(请参见日志文件格式),例如已知定义要检索的某个事件或多个事件的事件时间、进程名称、进程 ID 和事件消息的任何部分(例如远程主机名、函数名、错误编号等等)。
注:搜索区分大小写。
查看日志时,组合日志记录级别和设备的实例可能包括以下几种:
指定搜索和查看结果
请按以下步骤使用给定服务所属的特定的特性来搜索日志事件:
- 在 Console 中,打开希望检查其日志文件的 Messaging Server。
- 请执行以下任一步骤以显示给定日志记录服务的日志文件“内容”选项卡:
- 系统将显示该日志记录服务的“内容”选项卡。
- 在“日志文件名”字段中,选择您要检查的日志文件。
- 单击“查看所选日志”按钮将打开“日志查看器”窗口。
- 在“日志查看器”窗口中,指定所需的搜索参数(已在上一节“搜索参数”中描述)。
- 单击“更新”将执行搜索并将结果显示在“日志条目”字段中。
第 3 部分:服务日志 (MTA)MTA 提供了记录每封入队列和出队列的邮件的功能。还提供了分发程序错误和调试输出。第 3 部分包含以下各节:
您可以控制每个通道上的日志记录,也可以指定要记录的所有通道上的邮件活动。在初始配置中,所有通道上均禁用日志记录。
启用日志记录使得 MTA 在邮件每次通过 MTA 通道时,都将一个条目写入 mail.log* 文件。如果您希望获得有关正在通过 MTA(或通过特定通道)的邮件数目的统计信息,或者调查其他问题(例如是否及何时发送或传送邮件)时,此类日志条目会很有用。
如果仅对收集有关通过少数特定 MTA 通道的邮件数目的统计信息感兴趣,则可能希望仅启用主要感兴趣的那些 MTA 通道上的日志通道关键字。许多站点倾向于启用所有 MTA 通道上的日志记录。特别是,如果您要尝试跟踪问题,诊断某些问题的第一步是注意到邮件未进入您期望或想要的通道,启用所有通道的日志记录将有助于您调查此类问题。
启用 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。
- LOG_MESSAGE_ID。此选项允许哪些条目与哪封邮件相关。
- LOG_FILENAME。此选项便于立即发现特定邮件文件传送的重试次数,并在了解 MTA 是否将传送给多个收件人的邮件分割为磁盘上独立的邮件文件副本时会很有用。
- LOG_CONNECTION。此选项可使 MTA 记录 TCP/IP 连接以及邮件通信流量。缺省情况下,系统将连接日志条目写入 mail.log* 文件中,或者可以选择将其写入 connection.log* 文件中;请参见 SEPARATE_CONNECTION_LOG 选项。
- SEPARATE_CONNECTION_LOG。此选项可用于指定将连接日志条目写入 connection.log 文件中。
- LOG_PROCESS。与 LOG_CONNECTION 结合使用时,此选项允许连接条目与对应的邮件条目通过进程 ID 相关联。
- LOG_USERNAME。此选项控制是否将与使邮件入队的进程关联的用户名保存在 mail.log 文件中。对于使用了 SASL (SMTP AUTH) 的 SMTP 提交,用户名字段将是经过验证的用户名(带有星号字符前缀)。
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
日志条目显示:
- 创建条目的日期和时间(示例:19-Jan-1998 19:16:57.64)。
- 源通道的通道名称(在此实例中为 l)。
- 目标通道的通道名称(在此实例中为 tcp_local)。(对于 SMTP 通道,当启用 LOG_CONNECTION 时,加号“+”表示入站到 SMTP 服务器;减号“-”表示通过 SMTP 客户机出站。)
- 条目的类型 (E);请参见表 20-6。
- 邮件的大小 (1)。缺省表示为千字节(使用 MTA 选项文件中的 BLOCK_SIZE 关键字可以更改此缺省值)。
- 信封 From: 地址 (adam@sesta.com)。请注意带有空信封 From:地址的邮件(例如通知邮件),此字段将为空白。
- 信封 To: 地址 (marlowe@siroe.com) 的活动(当前)格式。
- 信封 To: 地址 (marlowe@siroe.com) 的活动(当前)格式。
- 传送状态(仅适用于 SMTP 通道)。
表 20-6 说明了日志记录条目代码。
LOG_CONNECTION、LOG_FILENAME、LOG_MESSAGE_ID、LOG_NOTARY、LOG_PROCESS 和 LOG_USERNAME 全部启用后,格式将发生变化,如下面实例中所示。(此样例日志条目行已因版式原因而换行;实际日志条目将显示在一个物理行。)
除了上面已讨论的那些字段外,其中的附加字段是:
- 运行通道进程的节点的名称(在本实例中为 HOSTA)。
- 进程 ID(以十六进制表示),其后是句号(点)字符和计数。如果这是多线程通道条目(例如 tcp_* 通道条目),则在进程 ID 和计数之间还会显示线程 ID。在本实例中,进程 ID 是 2e2d.2.1。
- 邮件的 NOTARY(传送收件人请求)标志,表示为整数(在本实例中为 276)。
- MTA 队列区域中的文件名(在本实例中为 /imta/queue/l/ZZ01IWFY9ELGWM00094D.00)。
- 邮件 ID(在本实例中为 <01IWFVYLGTS499EC9Y@siroe.com>)。
- 正在执行的进程的名称(在本实例中为 inetmail)。在 UNIX 上,对于分发程序进程(例如 SMTP 服务器),此名称通常为 inetmail(除非已使用 SASL)。
- 连接信息(在本实例中为 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_PROCESS 和 LOG_CONNECTION 的某一级别。
下面的实例显示了如果本地用户通过外发 TCP/IP 通道发送邮件(例如发送到 Internet),而可能看到的日志条目类别的相当基本的实例。在本实例中,启用了 LOG_CONNECTION。标有 (1) 和 (2) 的行是一个条目 它们在实际日志文件中将显示为一个物理行。类似地,标有 (3) - (7) 的行是一个条目并将显示为一个物理行。
代码示例 20-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) 块邮件从 l 通道到 tcp_local 通道入队列 (E) 的日期和时间。
- 这是与 (1) 位于同一日志文件物理行的一部分,因排版方便而在此处分行显示。显示了信封 From: 地址(在本例中为 adam@sesta.com)以及原始版本和当前版本的信封 To: 地址(在本例中为 marlowe@siroe.com)。
- 显示了一 (1) 块邮件从 tcp_local 通道出队列 (D) 的日期和时间 - 即,由 tcp_local 通道成功发送到某一远程 SMTP 服务器。
- 显示了信封 From: 地址、原始信封 To: 地址和信封 To:地址。
- 显示了连接到 DNS 中的名为 thor.siroe.com 的实际系统,本地发送系统具有 IP 地址 206.184.139.12 并从端口 2788 发送,远程目标系统具有 IP 地址 192.160.253.66 并且远程目标系统的连接端口是端口 25。
- 显示了远程 SMTP 服务器的 SMTP 标志行。
- 显示了返回的此地址的 SMTP 状态代码;250 是基本的 SMTP 成功代码,而此远程 SMTP 服务器使用扩展的 SMTP 状态代码和某一附加文本进行响应。
代码示例 20-2 显示了类似于代码示例 20-3 中所示的日志记录条目,但通过设置 LOG_FILENAME=1 和显示文件名和消息 ID 的 LOG_MESSAGE_ID=1 记录了附加信息;请参见 (1) 和 (2)。特别是邮件 ID 可用于将条目与邮件相关联。
代码示例 20-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.
代码示例 20-3 对启用 LOG_FILENAME=1、LOG_MESSAGE_ID=1 和 LOG_CONNECTION=1 将邮件发送给多个收件人进行了说明。此处已将用户 adam@sesta.com 发送给 MTA 邮递列表 test-list@sesta.com,此邮递列表已扩展到 bob@sesta.com、carol@varrius.com 和 david@varrius.com。请注意每个收件人的原始信封 To: 地址是 test-list@sesta.com,尽管当前信封 To: 地址是每个收件人各自的地址。请注意邮件 ID 是如何一致的,尽管涉及了两个单独的文件(一个用于 l 通道而另一个用于出 tcp_local 通道)。
代码示例 20-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.
代码示例 20-4 对尝试发送到不存在的域(此处为 very.bogus.com)进行了说明;即,发送到未由 MTA 的重写规则发现其不存在的,并且 MTA 与外发 TCP/IP 通道相匹配的域名。此实例假定了 MTA 选项设置 LOG_FILENAME=1 和 LOG_MESSAGE_ID=1。
TCP/IP 通道在 DNS 中运行并检查域名时,DNS 返回一个错误,指示该名称不存在。请注意“拒绝”条目 ®(如 (5) 中所示),同时 DNS 返回错误,指示该域名是非法域名(如 (6) 中所示)。
由于提交邮件后地址被拒绝,MTA 将生成弹回信息给原发送人。MTA 将新拒绝邮件入队给原发送人 (1),并在删除原出站邮件((5) 中所示的 R 条目)之前,将一份副本发送给邮寄主管 (4)。
通知邮件(例如弹回邮件)具有空信封 From:地址 例如,如 (2) 和 (8) 中所示 其中信封 From:字段显示为空白。由 MTA 生成的弹回邮件的初始排队显示了新通知邮件的邮件 ID 和紧随其后的原始邮件的邮件 ID (3)。(此类信息对于 MTA 不是总可以使用,但可用于记录时,它允许对应于出站失败的邮件的日志条目与对应于结果通知邮件的日志条目相关联。)此类通知邮件入队到进程通道,该通道转而又将这些邮件排队到相应的目标通道 (7)。
代码示例 20-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>
代码示例 20-5 对尝试发送到远程系统上的错误地址进行了说明。此实例假设 MTA 选项设置为 LOG_FILENAME=1 和 LOG_MESSAGE_ID=1,通道选项设置为 LOG_BANNER=1 和 LOG_TRANSPORTINFO=1。请注意拒绝条目 ®,如 (1) 中所示。但与代码示例 20-4 中的拒绝条目不同,请注意此处的拒绝条目显示了已建立到远程系统的连接,并显示了远程 SMTP 服务器发布的 SMTP 错误代码,(2) 和 (3)。(2) 中所示的信息是设置通道选项 LOG_BANNER=1 和 LOG_TRANSPORTINFO=1 的结果。
代码示例 20-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>
代码示例 20-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 遭到拒绝。
代码示例 20-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)
代码示例 20-7 对在第一次尝试时不能发送邮件所产生的日志文件条目进行了说明,因此 MTA 将多次尝试发送该邮件。本实例假设选项设置为 LOG_FILENAME=1 和 LOG_MESSAGE_ID=1。
代码示例 20-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
- 邮件进入 tcp_internal 通道 - 可能来自 POP 或 IMAP 客户机,或可能来自使用 MTA 作为 SMTP 中继的组织中的其他主机;MTA 将其排队到 tcp_local 外发通道。
- 第一次传送尝试失败,由 Q 条目表示。
- 从 ZZ* 文件名可以看出这是第一次传送尝试。
- TCP/IP 软件包找不到至远程端的路由时,此传送尝试将失败。与代码示例 20-4 不同,DNS 并非针对目标域名 some.org;相反,“no route to host”错误表示在发送端和接收端之间存在网络问题。
- 下一次 MTA 定期作业运行时,它重新尝试传送,再次不成功。
- 此文件名现在是 ZY*,表示这是第二次尝试。
- 第三次未成功的尝试的文件名是 ZX*。
- 下一次周期性作业重新尝试传送,传送失败,尽管这一次 TCP/IP 软件包未对无法进入远程 SMTP 服务器表示不满,但其实是远程 SMTP 服务器不接受连接。(可能远程端修复了其网络问题,但尚未备份其 SMTP 服务器 - 或其 SMTP 服务器正忙于处理其他消息而无法在 MTA 尝试连接时接受连接。)
- 最终邮件出了队列。
代码示例 20-8 对通过转换通道路由邮件的例子进行了说明。假设此站点具有 CONVERSIONS 映射表,例如:
CONVERSIONS
IN-CHAN=tcp_local;OUT-CHAN=l;CONVERT Yes
本实例假设选项设置为 LOG_FILENAME=1 和 LOG_MESSAGE_ID=1。
代码示例 20-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>
代码示例 20-9 说明了通过 LOG_CONNECTION=3 启用连接日志记录后外发邮件的日志输出。在本实例中还假设了 LOG_PROCESS=1、LOG_MESSAGE_ID=1 和 LOG_FILENAME=1。本例介绍了用户 adam@sesta.com 将同一邮件发送给(请注意每个邮件副本的邮件 ID 都相同)三个收件人 bobby@hosta.sesta.com、carl@hosta.sesta.com 和 dave@hostb.sesta.com 的例子。本实例假设邮件从标有(如此类通道通常的那样)single_sys 通道关键字的 tcp_local 通道发出。因此,如 (1)、(2) 和 (3) 中所示,系统将在磁盘上为属于独立主机名的每组收件人创建独立的邮件文件,其中 bobby@hosta.sesta.com 和 carl@hosta.sesta.com 收件人被存储在同一邮件文件中,而 dave@hostb.sesta.com 收件人被存储在另一邮件文件中。
代码示例 20-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
- 邮件已排入队列,准备发给第一个收件人...
- ....准备发给第二个收件人...
- ....准备发给第三个收件人。
- 设置 LOG_CONNECTION=3 将使 MTA 写入此条目。减号 (-) 表示此条目指外发连接。O 表示此条目对应于连接的开口。同时请注意尽管此开口由线程 2 和线程 3 来执行,但由于多线程的 TCP/IP 通道使用同一进程来处理这些不同的连接开口,因此此处的进程 ID 相同(均为 1f625)。
- 由于要连接到两个单独的远程系统,独立线程中的多线程 SMTP 客户机将打开与每个系统的连接 第一个显示在本条目中,第二个显示在 7 中。条目的此部分显示了发送和目标 IP 号以及端口号,并显示了初始主机名和通过 DNS 查找到的主机名。在 SMTP/initial-host/dns-host 子句中,请注意初始主机名和在初始主机名上执行 DNS MX 记录查找后所使用的主机名的显示:mailhub.sesta.com 显然是 hostb.sesta.com 的 MX 服务器。
- 多线程的 SMTP 客户机在单独的线程中(尽管进程相同)打开到第二系统的连接。
- 由于要连接到两个单独的远程系统,独立线程中的多线程 SMTP 客户机将打开与每个系统的连接 - 第二个显示在本条目中,第一个显示在上面的 5 中。条目的此部分显示了发送和目标 IP 号以及端口号,并显示了初始主机名和通过 DNS 查找到的主机名。在本实例中,系统 hosta.sesta.com 显然自己直接接收邮件。
- 除了产生特定的连接条目外,LOG_CONNECTION=3 还可将与连接相关的信息包含进常规邮件条目中,如此处所示。
- 设置 LOG_CONNECTION=3 将使 MTA 写入此条目。所有邮件(本实例中的 bobby 和 carl 邮件)出队列后,系统将关闭连接,如此条目中的 C 所表示。
- 设置 LOG_CONNECTION=3 将使 MTA 写入此条目。所有邮件(本实例中的 dave 邮件)出队列后,系统将关闭连接,如此条目中的 C 所表示。
代码示例 20-10 说明了通过 LOG_CONNECTION=3 启用连接日志记录后外来 SMTP 邮件的日志输出。
代码示例 20-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
- 远程系统打开一个连接。字符 O 表示此条目与连接开口有关;字符 + 表示此条目与外来连接有关。
- 显示用于连接的 IP 号和端口。在此条目中,接收系统(创建日志文件条目的系统)具有 IP 地址 206.184.139.12 并且将连接指向端口 25;发送系统具有 IP 地址 192.160.253.66 并从端口 1244 发送。
- 在从外来 TCP/IP 通道 (tcp_local) 到 l 通道收件人的排入的邮件的条目中,请注意由于启用了 LOG_CONNECTION=3 而包含了超过缺省值范围的信息。特别是,发送系统在其 HELO 或 EHLO 线路上具有的名称、在连接 IP 号上由 DNS 反向查找到的发送系统的名称,以及发送系统的 IP 地址均被记录下来;有关对影响此性能的通道关键字的讨论,请参见第 12 章,“配置通道定义”。
- 关闭入站连接。字符 C 表示此条目与连接关闭有关;字符 + 表示此条目与外来连接有关。
分发程序调试和日志文件
分发程序错误和调试输出(如果已启用)将被写入 MTA 日志目录中的 dispatcher.log 文件。
可以使用分发程序配置文件中的 DEBUG 选项启用调试输出,或在每个进程级别上使用 IMTA_DISPATCHER_DEBUG 环境变量 (UNIX)。
DEBUG 选项或 IMTA_DISPATCHER_DEBUG 环境变量 (UNIX) 将以十六进制定义 32 位调试掩码。通过将选项设置为 -1,或通过在系统范围内将逻辑变量或环境变量定义为值 FFFFFFFF,来启用所有调试。表 20-7 中说明了每个位的实际意义。
表 20-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