背景: #EDF0F5 #FAFBE6 #FFF2E2 #FDE6E0 #F3FFE1 #DAFAF3 #EAEAEF 默认  
阅读新闻

18 sendmail的统计信息、测试和调试(十四)

[日期:2008-04-30] 来源:人民邮电出版社  作者:Evi Nemeth Garth Snyder Trent R.Hein [字体: ]

sendmail可以收集有关它所处理消息的数量和大小的统计信息。您可以用mailstats命令显示这些数据,数据是按邮寄程序(mailer)进行组织的。sendmail的confSTATUS_FILE选项(在OSTYPE文件中)指定了应该保存统计信息的文件名称。如果指定的文件存在,则将打开记账(accounting)功能。

sendmail统计信息文件的默认位置是/etc/mail/statistics,但有些厂商把这个文件叫做sendmail.st,放在/var/log中。mailstats给出的总计值是从创建统计信息文件以来的累计。如果希望周期的统计信息,可以用cron轮换并重新初始化此文件。

下面是一个例子:

 

如果所有人都可以读取邮件统计文件,那么就不必由root来运行mailstats命令。
这条命令显示了6个值:收到的消息和收到的千字节数(msgsfr、bytes_from),发送的消息和发送的千字节数(msgsto、bytes_to),拒收的消息数(msgsrej),以及丢弃的消息数(msgsdis)。第一列的数字标识出邮寄程序(mailer),最后一列列出了邮寄程序的名字。T开头的行是所有的消息和字节数,C开头的行是连接数。这些值中包括了本地和中继转发的邮件。

18.14.1  测试和调试

基于m4的配置要经过某种程度上的预先测试。如果要用它们,可能并不需要进行底层的调试。有一样东西是调试标志不能测试的,那就是您的设计方案。在研究本章时,我们在所检查的好几个配置文件和设计中发现了错误。这些错误小到调用某项功能时没带上必要的宏(例如,使用masquerade_envelope时没有用MASQUERADE_AS打开伪装),大到sendmail配置和防火墙的设计之间发生全面冲突,而防火墙控制着是否允许邮件进入以及进入的条件有哪些。

您不能设计一个在真空中的邮件系统。邮件系统必须与DNS MX记录和防火墙策略同步(或者至少不会相冲突)。

sendmail提供了世界上已知最丰富的调试辅助程序集之一,它的调试标志不是简单的布尔值或整数,而是二维量x.y,其中x选定主题,而y选定要显示的信息量。值为0表示不调试,为127表示如果您打印输出的话,会造成纸张的浪费。主题的范围是0~99,目前定义了大约80个。
sendmail软件发布中的文件sendmail/TRACEFLAGS列出了正在使用的值和使用它们的文件和函数。所有对调试的支持都处在原始配置文件的层次上。在许多情况下,把调试输出和sendmail源代码一起看看是会有帮助的。

如果调用sendmail时带上一个-dx.y标志,调试输出将送到屏幕(标准错误输出)。表18.18显示了几个重要的x值和一些y的建议值。如果您打开了作为守护进程(-bd)运行的sendmail的调试功能,那么就要小心了,因为调试输出可能最终会卡住SMTP对话,在sendmail和远程主机进行通信时造成奇怪的故障。

表18.18 调试主题

   

含义和建议

0

显示编译标志和系统身份(请试试y = 1 或者 10

8

显示DNS名字解析(试试 y=8

续表

   

含义和建议

11

跟踪邮件的投递(显示邮寄程序的调用)

12

显示本地到远程的名字转换过程

17

列出MX主机

21

跟踪重写规则(要了解详情,可以使用 y=2或者y=12

27

显示别名和转发机制(试试 y= 4

44

显示如果发生故障,尝试打开文件的次数(y=4

60

显示数据库映射的查找

Gene Kim和Rob Kolstad写过一个叫checksendmail的Perl脚本,它用地址测试模式调用sendmail,在包含由您提供的测试地址的文件上运行。它将结果与期望值相比较。这个脚本让您能够根据站点上典型地址的测试集,对新版的配置文件进行测试,确保自己不会在无意间破坏以往一直工作正常的任何地方。

18.14.2   嗦的投递


许多在命令行上调用sendmail的用户代理程序都能接受一个-v标志,它传递给了sendmail,让sendmail显示出投递消息所采取的步骤。下面的例子使用了mail命令。粗体字是从键盘向用户代理输入的内容,其余的内容是sendmail的啰嗦输出。

 
 
 

anchor上的sendmail连接上了toadranch.com上的sendmail。两台机器都使用ESMTP协议来协商交换消息。

18.14.3  用SMTP通信

在调试邮件系统时可以直接使用SMTP。为了发起一次SMTP会话,可以telnet至TCP端口25或者使用Sendmail-bs命令。默认情况下,这是sendmail在守护进程模式(-bd)下运行时进行监听的端口,它以邮件提交代理身份运行时使用端口587。表18.19显示了最重要的SMTP命令。

表18.19 SMTP命令

    

   

HELO hostname

如果采用SMTP通信,标识正在连接的主机

EHLO hostname

如果采用ESMTP通信,标识正在连接的主机

MAIL From: revpath

发起一次邮件事务(信封发件人)

RCPT To: fwdpatha

标识信封收件人

VRFY address

验证地址是否有效(可投递)

EXPN address

显示别名和.forward映射的展开结果

DATA

开始消息的主体b

QUIT

结束交换并关闭连接

RSET

重置连接状态

HELP

打印SMTP命令的汇总信息

a.一则消息可以用多条RCPT命令。
b.您可以在消息主体内的一行上输入一个点(.)来结束消息主体。

SMTP整个语言只有14条命令,所以它非常容易学习和使用。它不区分大小写。SMTP的规范可以在RFC2821中找到。

包括sendmail在内的大多数传输代理都支持SMTP和ESMTP,smap是现如今唯一的例外。遗憾的是,许多提供主动过滤机制的防火墙设备并不支持ESMTP。

支持ESMTP协议的进程将以EHLO命令而不是HELO发起通信。如果另一端的进程听懂了并答复OK,那么双方便协商它们能支持的扩展,最后达到进行交流所需的最小公分母。如果返回的是一条错误消息,那么支持ESMTP协议的进程就后退到SMTP。

18.14.4  队列监视

您可以使用mailq命令(等价于sendmail -bp命令)查看队列内消息的状态。消息在被投递时,或者已经尝试过投递但没有成功的时候,它们就被排入“队列”。

mailq打印出当时/var/spool/mqueue下文件的汇总信息,这些信息普通人就可以直接阅读。它的输出对于判断一则消息为什么被拖延非常有帮助。如果信息显示出正在形成积压邮件的现象,那么您就可以监视sendmail尝试消除卡壳的状态。

注意,sendmail在8.12及以后的版本上,有两个默认的队列:一个用于端口25上接收到的消息,另一个用于在端口587上接收到的消息(客户机提交队列)。您可以调用mailq-Ac以看到客户机队列。

下面是mailq的一种典型输出。这个例子显示出有3条消息在等候投递:

  

如果您认为自己比sendmail还了解情况,或者您只是想要sendmail尝试立即重新投递排队的消息,那么可以运行命令sendmail -q迫使队列开始运行。如果您使用sendmail -q -v命令,那么sendmail会一次一次地显示每次投递的情况,这往往能够帮助进行调试工作。如果让sendmail自己自行处理的话,它会每隔一段时间(一般是30分钟)重新尝试一次投递。

18.14.5  日志机制

sendmail使用syslog(系统日志)来记录错误和状态消息,它所采用的系统日志设备是“mail”,级别可以从“debug”到“crit”,这些消息都以字符串“sendmail”作标记。可以用命令行的选项-L覆盖这个日志字符串“sendmail”,如果您正在调试sendmail的一个副本,而其他副本正在完成正常的邮件处理事务时,采取这个办法就很方便了。有关系统日志的更多信息请参见第10章。

在命令行或配置文件中指定confLOG_LEVEL选项,就能决定sendmail用作日志阈值的严重性级别。日志级别的值越高,表示严重性级别越低,也使得被记录的信息越多。

回想一下,系统日志中记录某个级别的消息,将要报告给该级别以及所有高于它的级别。/etc/syslog.conf文件决定了每则消息最终的目的地。

在Red Hat和Fedora系统上,sendmail的日志默认记录在/var/log/maillog里。对于SUSE来说,这个日志文件是/var/log/mail,而对于Debian和Ubuntu而言,它是/var/log/mail.log。如果Linux的标准化工作能够整顿这些随机而且显然没有意义的差异,那么我们脚本的可移植性不就会更好吗?

表18.20给出了sendmail日志级别和syslog(系统日志)严重性级别之间大致的对照关系。
表18.20 sendmail日志级别和syslog日志级别的对照

L

   

L

   

0

不作日志

4

notice

1

alert或者crit

5~11

info

2

crit

>=12

debug

3

err或者warning

 

 

一个更好的程序是mreport,它是由Jason Armstrong编写的。


它可以用来汇总由sendmail写下来的日志文件。只要运行make,然后再运行make install立即就能编好它。下面是从一个Red Hat系统上取得的mreport输出结果的样本:

  
  

如果您的邮件日志文件只能由root读取(它们应该如此),您必须使用sudo或者成为root来运行mreport。mreport的标志和选项都在它的手册页中有文档说明。在本例中的-f标志表示根据发件人归并和分类;类似的,-t标志则表示根据收件人进行分类。-i参数是输入文件,-o是输出文件。

相关网站:企业邮箱 企业邮局 企业邮箱申请 企业邮箱注册 21cn企业邮箱 上海企业邮箱
阅读:
录入:admin

推荐 】 【 打印
上一篇:18 sendmail的性能(十三)
下一篇:18 Exim邮件系统(十五)
相关新闻      
本文评论       全部评论
发表评论


点评: 字数
姓名:

  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款