【问题标题】:IIS 7 request duration monitoringIIS 7 请求持续时间监控
【发布时间】:2012-11-01 20:08:15
【问题描述】:
我很好奇是否有一种方法可以监控 iis 服务器上的请求持续时间。就我个人而言,我想出了一个解决方案,但它确实是资源密集型的,这就是我问这个问题的原因,只是为了收集更多意见。
我的计划是提取每个请求的持续时间并将其发送到石墨,以便实时了解网络服务器的性能。我想出的想法是将 poweshell 与它的 webadministration 模块一起使用。例如,如果您运行 get-item IIS:\AppPools\DefaultAppPool | Get-WebRequest,您将获得该应用程序池上的所有请求,其中包含大量信息,包括时间信息。
问题是我应该有一个每 100 毫秒运行一次的脚本来获取所有请求,这有点浪费。有没有办法告诉 iis 将请求持续时间(以毫秒为单位)放入日志中?因为那样的话,获得我需要的信息会容易得多。
【问题讨论】:
标签:
performance
iis
powershell
monitoring
【解决方案1】:
我不知道 IIS 上是否有这样的功能,但我通过在 Internet 和 iis 服务器之间使用反向代理(如 nginx)做了同样的事情(将 iis 页面时间发送到石墨)。
来自 nginx 的 proxy module 允许您在后端生成页面所用的时间登录每个请求。
此外,如果您必须处理连接速度较慢的访问,在 IIS 前面有一个像 nginx 这样的代理可能会非常有帮助,nginx 将存储来自后端的回复,断开后端连接并等待访问者获得所有内容。强烈推荐。
如果你走这条路,你应该使用logster(也来自 etsy 的家伙)或logstash 在你想要的每个时间段(可能每分钟)解析 nginx 日志。
【解决方案2】:
似乎有一个基于正则表达式记录请求的功能,它被称为高级记录模块。您可以从多个字段中指定要记录的内容,并且它符合 W3C。就我而言,我有时间将其作为可以指定的文件,这就是我想要的。之后,我在 powershell 中编写了一个脚本,它解析日志并获取我需要的信息,构建一个指标并将其发送到 statsd,然后再将其发送到 powershell。
我为日志解析选择的方法如下:在脚本中,我使用了来自 powershell 的 get-content 命令将所有日志收集到一个文件中(是的 iis 会破坏多个文件中的日志,我猜是日志的数量取决于您的工作流程的数量,但我不确定)。这是第二次迭代中的第一次迭代,我将所有日志收集到另一个文件中,并在第一个文件和后者之间进行比较,只处理差异。
我选择这种方法是因为我认为使用最少的正则表达式处理会更好。下一步是擦除累积日志的第一个文件,并按照已擦除的第一个文件的速度移动第二个文件并再次运行脚本,以便始终有一种比较方法。此外,日志翻转为一小时,之后日志将被清除。