2012-11-01 140 views
0

我很好奇,是否有方法监视iis服务器上的请求持续时间。就个人而言,我提出了一个解决方案,但它确实是资源密集型的,这就是为什么我问这个问题,只是为了收集更多意见。IIS 7请求持续时间监视

我的计划是提取每个请求的持续时间并将其发送到石墨,以便实时了解Web服务器的性能。我想到的想法是使用Poweshell和它的web管理模块。例如,如果您运行的是get-item IIS:\AppPools\DefaultAppPool | Get-WebRequest,则可以在该应用程序池中获取包含时间信息在内的大量信息的所有请求。

事情是,我应该有一个脚本运行每100毫秒来获取所有请求,这是有点浪费。有没有办法告诉iis在日志中放置请求持续时间(以毫秒为单位)?因为那样获取我需要的信息会容易得多。

+0

您是否尝试过使用'Get-WebRequest'? https://powershell.org/forums/topic/selectively-kill-a-specific-request-under-an-app-pool/ – Kiquenet

回答

0

我不知道在IIS上是否有这样的功能,但我通过使用互联网和iis服务器之间的反向代理(如nginx)完成相同的操作(将iis页面时间发送给石墨)。

来自nginx的proxy module允许您在每个请求上登录后端用于生成页面的时间。

此外,在IIS中使用像nginx这样的代理可能会非常有用,如果您必须处理访问速度较慢的连接,nginx将存储来自后端的回复,并放弃后端连接,并等待访问者获取所有内容。强烈推荐。

如果你走这条路线,你应该使用logster(也来自etsy guys)或logstash来解析你想要的每个时间段(可能是每分钟)的nginx日志。

0

似乎有一个基于正则表达式记录请求的功能,它被称为高级记录模块。您可以从多个字段中指定您想要的内容,并符合W3C标准。在我的情况下,我有时间作为一个可以指定的领域,这正是我期待的。之后,我在powershell中编写了一个脚本,用于解析日志并获取我需要的信息,构建一个度量并将其发送到statsd,然后将其发送到powershell。

我为日志分析选择的方法如下:在脚本中,我使用powershell中的get-content comandlet将所有日志收集到一个文件中(是​​的,iis将多个日志分成多个文件,我猜测日志的数量取决于你的工作进程的数量,但我不确定)。这是第二次迭代中的第一次迭代,我将所有日志收集到另一个文件中,并在第一个文件和后一个文件之间进行差异化处理,只处理差异。

我选择了这种方法,因为它是我认为最好是有最小的正则表达式处理。下一步是清除累积日志的第一个文件,并将第二个文件移动到第一个删除的文件并再次运行脚本,以便总是有一个比较方法。此外,日志翻转时间为一小时,之后日志将被删除。