我有一个公共的 MS CRM 2011 安装,我的一个远程用户报告使用了来自他们的 Outlook 客户端的大约 10gig 的数据。
是否可以实时查看 IIS 中的连接用户以及他们消耗了多少数据?(专用服务器上没有其他用户)
我无法访问外部防火墙,因此所有监控都必须从本地 IIS 服务器中移除。我认为 Perfmon 可以做到这一点,但我想看看是否还有其他方法可以做到这一点。
答案1
约翰,
您可以使用 Server 2008+ 中的资源监视器实时查看单个连接。在 Server 2008 R2 中(可能与 Server 2008 中相同),网络选项卡中有两个您感兴趣的表:网络活动表和 TCP 连接表。
网络活动表将为您提供本地应用程序、PID、远程地址以及每秒发送和接收的字节数。TCP 连接将告诉您本地地址、本地端口、远程地址、远程端口、数据包丢失、延迟和本地应用程序/服务。
您可以查阅 IIS 日志,准确了解哪些 URL 被访问(不是实时的,但非常接近)。如果您将 IIS 配置为记录该信息,您还可以使用 Log Parser 查看发送和接收的数据量。 互联网信息服务提供了大量有关使用 Log Parser 排除 IIS 故障的不同方法的信息。以下查询示例显示了用户(IP/用户代理)的总带宽:
SELECT TOP 30
c-ip as Client,
SUBSTR(cs(User-Agent), 0, 70) as Agent,
Sum(sc-bytes) AS TotalBytes,
Count(*) as Hits
FROM {filename}
group by c-ip, cs(User-Agent)
ORDER BY TotalBytes desc
找到了这个查询。以及更多示例,这里
答案2
PowerShell:安装 IIS Log Parser v2.2。我在 D 盘中创建了一个名为 LogParser 的新目录,并将 2 个文件(logparser.dll 和 logparser.exe)复制到该目录中。现在让我们看看 Powershell 代码如何将 LogParser v2.2 与 Powershell 结合使用。
Import-Module WebAdministration
Websites = Get-Website *
Foreach ($i in $Websites)
{
$Name = $i.Name
$ID = $i.ID
$PhysicalPath = $i.PhysicalPath
$Date = (Get-Date).AddDays(-1).ToString("yyMMdd") + '.log'
$Bandwidth = &'D:\tools\LogParser\LogParser.exe' "Select Div(Sum(sc-bytes),1048576) As Bandwidth From '$PhysicalPath\W3SVC$ID\u_ex$Date'" -q:ON
$Value = "$Name : $Bandwidth"
Add-Content -Path Bandwidth.txt -Value $Value
}