查找Exchange 2010 SP3的IIS节流日志(Budget Snapshots)路径
首先,你找对方向了——Budget Snapshots确实是记录在IIS日志里,但可能你没定位到EWS所属IIS站点的实际日志存储路径,或者日志配置没正确开启所需字段。下面是一步步的排查和解决方法:
1. 定位EWS对应的IIS站点及日志路径
默认情况下,Exchange 2010的EWS虚拟目录属于Default Web Site,但如果你的环境有自定义站点,先确认这一点:
- 打开IIS管理器(运行
inetmgr.exe),展开服务器节点,查看Sites下的站点列表。 - 找到包含
EWS虚拟目录的站点(右键站点 -> 查看虚拟目录,确认EWS存在)。 - 右键该站点,选择日志(Windows Server 2012 R2的IIS里是“日志”功能面板):
- 查看“目录”字段,这里就是该站点日志的实际存储路径,可能不是默认的
%SystemDrive%\inetpub\logs\LogFiles(比如自定义了路径,或者站点用了独立的日志文件夹)。 - 确认日志格式是W3C——Budget Snapshots只会写入W3C格式的日志,其他格式(比如IIS、NCSA)不会包含这些信息。
- 查看“目录”字段,这里就是该站点日志的实际存储路径,可能不是默认的
2. 确保日志记录了cs-uri-query字段
Budget Snapshots是附加在请求的查询字符串里,所以必须确保IIS日志启用了cs-uri-query字段:
- 在站点的日志设置里,点击“选择字段”(或“日志字段”),检查是否勾选了URI查询(对应字段名
cs-uri-query)。如果没勾选,勾选后保存,等待新的日志生成后再查看。
3. 验证EWS虚拟目录的日志继承设置
有时候EWS虚拟目录可能单独配置了日志,没有继承站点的设置:
- 找到
EWS虚拟目录,右键 -> 日志,确认它的日志配置是否和站点一致,尤其是路径和格式。如果是单独配置的,以虚拟目录的设置为准。
4. 检查日志滚动策略
如果你的IIS日志是按天滚动的,可能你查看的是旧日志文件,新的请求还没写入到你正在看的文件里。可以查看日志文件夹里最新生成的日志文件(文件名通常包含日期,比如u_exYYYYMMDD.log)。
解析找到的Budget Snapshots日志
一旦找到正确的日志,你会看到类似你提供的条目,其中cs-uri-query部分包含Init>>和End(...)>>的快照信息:
2010-03-09 15:15:12 XX.XXX.XX.X POST /ews/Exchange.asmx ;RC:bfe35012-30fd-499e-90d6-552d0ca89fab; Init>>Conn:0,AD:30000/30000/0%,CAS:54000/54000/0%,AB:30000/30000/0%,RPC:36000/36000/0%,FC:1000/0,Hash:14366112,Sub:20/0; SoapAction=m:GetDelegate;Version=1;RpcC=14;RpcL=687;LdapC=0;LdapL=0; End(17156.25ms)>>Conn:3,AD:30000/30000/0%,CAS:54000/36907/28%,AB:30000/30000/0%,RPC:36000/35985/0%,FC:1000/0,Hash:14366112,Sub:20/0; 443 Domain\User XX.XX.XXX.XX - 200 0 0 17468
这里的关键指标:
Init>>:请求开始时的资源预算状态End(...)>>:请求结束时的资源预算状态,括号里是请求耗时AD/CAS/AB/RPC:对应不同组件的预算上限/已使用/使用率,比如CAS:54000/36907/28%表示CAS组件预算上限54000,已使用36907,使用率28%
补充说明
你提到开启了节流相关诊断日志并查看事件查看器,其实Exchange的节流诊断日志主要记录节流触发的事件(比如用户被限流),而Budget Snapshots是专门写入IIS日志的,所以不用在事件查看器里找。
内容的提问来源于stack exchange,提问作者mattyb

