2012-11-01 75 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將多個日誌分成多個文件,我猜測日誌的數量取決於你的工作進程的數量,但我不確定)。這是第二次迭代中的第一次迭代,我將所有日誌收集到另一個文件中,並在第一個文件和後一個文件之間進行差異化處理,只處理差異。

我選擇了這種方法,因爲它是我認爲最好是有最小的正則表達式處理。下一步是清除累積日誌的第一個文件,並將第二個文件移動到第一個刪除的文件並再次運行腳本,以便總是有一個比較方法。此外,日誌翻轉時間爲一小時,之後日誌將被刪除。