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