0

iis サーバーで要求の継続時間を監視する方法があるかどうか知りたいです。個人的に私は解決策を思いつきましたが、それは本当にリソースを大量に消費するため、より多くの意見を集めるために質問をしています.

私の計画は、各リクエストの継続時間を抽出してグラファイトに送信し、ウェブサーバーのパフォーマンスの概要をリアルタイムで把握することです。私が思いついたアイデアは、webadministration モジュールで poweshell を使用することです。get-item IIS:\AppPools\DefaultAppPool | Get-WebRequestたとえば、実行する と、時間情報を含む多くの情報とともに、そのアプリ プールのすべてのリクエストが取得されます。

問題は、すべてのリクエストを取得するために 100 ミリ秒ごとに実行されるスクリプトが必要であり、それは無駄なことです。ログにリクエストの継続時間 (ミリ秒単位) を記録するように iis に指示する方法はありますか? そうすれば、必要な情報を簡単に入手できるからです。

4

2 に答える 2

0

正規表現に基づいてリクエストをログに記録する機能があるようで、Advanced Logging Module と呼ばれます。ログに記録する内容を多数のフィールドから指定でき、W3C に準拠しています。私の場合、指定できるファイルとして時間がかかり、それが私が探していたものでした。その後、ログを解析して必要な情報を取得し、メトリックを構築してそれを statsd に送信するスクリプトを powershell で作成しました。

ログの解析に選択した方法は次のとおりです。スクリプトでは、powershell の get-content コマンドレットを使用して、すべてのログを 1 つのファイルに収集しました (はい、iis はログを複数のファイルに分割し、ログの数を推測しています)作業プロセスの数に依存しますが、わかりません)。これは、別のファイルにすべてのログを収集し、最初のファイルと後者のファイルの差分を作成し、差分のみが処理される 2 回目の繰り返しの最初の繰り返しでした。

この方法を選択したのは、正規表現の処理を最小限に抑えた方がよいと考えたからです。次のステップは、蓄積されたログの最初のファイルを消去し、消去された最初のファイルのペースで 2 番目のファイルを移動し、スクリプトを再度実行して、常に比較方法を確保することです。また、ログのロールオーバーは 1 時間で、その後ログは消去されます。

于 2012-11-20T11:12:08.600 に答える
0

IISにそのような機能があるかどうかはわかりませんが、nginxなどのインターネットとiisサーバー間のリバースプロキシを使用して、同じことを行いました(iisページ時間をグラファイトに送信します)。

nginxのプロキシ モジュールを使用すると、バックエンドがページを生成するのにかかった時間を各リクエストに記録できます。

また、IIS の前にnginxのようなプロキシを配置すると、接続が遅い訪問に対処する必要がある場合に非常に役立ちます。nginx はバックエンドからの応答を保存し、バックエンド接続をドロップして、訪問者がすべてのコンテンツを取得するまで待機します。強くお勧めします。

このルートに進む場合は、logster (これも etsy から) またはlogstashを使用して、必要な期間 (おそらく毎分) ごとに nginx ログを解析する必要があります。

于 2012-11-01T22:28:17.870 に答える