0

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

我的计划是提取每个请求的持续时间并将其发送到石墨,以便实时了解网络服务器的性能。我想出的想法是将 poweshell 与它的 webadministration 模块一起使用。例如,如果您运行 get-item IIS:\AppPools\DefaultAppPool | Get-WebRequest,您会在该应用程序池上获得所有请求,其中包含大量信息,包括时间信息。

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

4

2 回答 2

0

我不知道 IIS 上是否有这样的功能,但我通过在 Internet 和 iis 服务器(如 nginx)之间使用反向代理做了同样的事情(将 iis 页面时间发送到石墨)。

来自 nginx的代理模块允许您在后端生成页面的时间登录每个请求。

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

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

于 2012-11-01T22:28:17.870 回答
0

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

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

我选择了这种方法,因为我认为使用最少的正则表达式处理会更好。下一步是擦除累积日志的第一个文件,并按照已擦除的第一个文件的速度移动第二个文件并再次运行脚本,以便始终有一种比较方法。此外,日志翻转为一小时,之后日志将被删除。

于 2012-11-20T11:12:08.600 回答