IIS ウェブサイトでアクティブなユーザーセッションを追跡する方法

Windows Server 上の IIS サイトへのユーザー接続数を、ちょっと雑な方法で簡単に見積もる方法

大量のログや複雑なツールを操作せずに、IIS Webサーバーに実際に何人のユーザーが接続しているのか知りたいと思ったことがあるなら、この記事はまさに役立つかもしれません。基本的には、現在の負荷、つまり現在何人のユーザーがサイトを閲覧しているのかを把握することで、更新計画を立てたり、速度低下の原因を診断したり、サーバーが過負荷になりそうかどうかを把握したりしたいはずです。幸いなことに、Windowsにはこれらの数値をリアルタイムまたはスクリプトで確認できる組み込みツールが用意されており、使い方に慣れてしまえばそれほど難しくはありません。

パフォーマンスモニターやPowerShellを使えば、アクティブなセッション数や接続数の適切なスナップショットを取得できます。これは非常に正確な負荷テストではありませんが、簡単な概算には十分です。例えば、「現在の接続数」カウンターが急上昇している場合は、多くの人がブラウジングしていることを意味します。もし安定しているか低い場合は、トラフィックが少ない可能性があります。一方で、WindowsやIISの動作が不安定な場合もあるため、頻繁に確認する場合は、異なる時間に確認したり、スクリプトを設定したりすることをお勧めします。

Windows Server で IIS ユーザー接続を修正または監視する方法

方法1: パフォーマンスモニターを使用して現在のユーザーセッションを確認する

これは、アクティブなセッションのリアルタイムビューを取得する最も簡単な方法です。perfmonについては既にご存知かもしれませんが、perfmon実行ボックス(Windowsキー+R )またはコマンドプロンプトで入力するだけで実行できます。起動したら、「監視ツール」→「パフォーマンスモニター」に進みます。最初は機能が少し少ないですが、実際のIIS接続を追跡するカウンターを追加できるのが大きなメリットです。

カウンターを追加するには、緑色の「追加」ボタンをクリックするか、 を押しCtrl + Nてリストを表示します。「Webサービス」セクション(通常は「パフォーマンスカウンター」の下)を見つけて展開します。いくつか追加したいものがあれば、クリックしてください。

  • 現在の匿名ユーザー– ログインせずに匿名で閲覧する訪問者向け。
  • 現在の非匿名ユーザー– ログインしているユーザーまたは資格情報を持つユーザーの場合。
  • 現在の接続– IIS へのアクティブな接続の合計。

カウンターを選択すると、ドロップダウンから参照するIISサイトを選択できます。ドロップダウンには_Totalや個々のサイト名などのオプションがあります。「追加 >>」をクリックし、「OK」をクリックします。基本的に、この設定では接続のリアルタイムグラフが表示され、特定のカウンターをクリックすると、現在の値、最小値、最大値、平均値を時系列で確認できます。簡単なチェックに非常に便利です。ただし、設定によっては、最初の数分間はカウンターの更新が遅かったり、動作がおかしかったりすることがあります。これはパフォーマンスカウンターではよくあることで、時々途切れることがあるようです。

方法2: PowerShellを使用して接続統計を素早く取得する

スクリプトを使いたい場合、こちらの方がより柔軟です。PowerShellには、Get-Counterパフォーマンスモニターと同じカウンターを照会できるコマンドレットがあり、簡単に自動化できます。利用可能なWebサービスカウンターを確認するには、次のコマンドを実行します。

(Get-Counter -ListSet 'Web Service').Counter

これにより、接続数、送受信バイト数など、IIS サーバーのカウンターのリストが出力されます。現在のアクティブな接続の総数を取得するには、次のコマンドを実行します。

Get-Counter -Counter "\Web Service(_total)\Current Connections"

このコマンドは通常、IISの設定に応じて、全サイトへの接続数の合計とサイトごとの詳細情報の両方を返します。数値を確認するには、| Select-Object -ExpandProperty CounterSamplesを追加し、CookedValueを選択します。例えば、次のように試してください。

((Get-Counter -Counter 'Web Service(_total)\Current Connections') | Select-Object -ExpandProperty CounterSamples).CookedValue

これにより、現在アクティブな接続の数が表示されます。複数のサイトの接続を一度に取得したい場合は、WebAdministrationモジュールをロードして、次のような簡単なスクリプトを作成してください。

Import-Module WebAdministration Function Get-CurrentConnections($Site) { Get-Counter "Web Service($Site)\Current Connections" -ComputerName $env:COMPUTERNAME } $IISsites = (Get-ChildItem IIS:\Sites).Name $Results = @() foreach ($site in $IISsites) { $Connections = Get-CurrentConnections $site $Results += [PSCustomObject] { Site = $site Connections = $Connections. CookedValue } } $Results | Out-GridView 

この簡単なスクリプトは、すべてのIISサイトの現在の接続数を取得し、シンプルなグリッドビューを表示します。少し粗雑ですが、簡単な確認には十分です。また、理由は不明ですが、一部のマシンではカウンターの更新に1分ほどかかったり、古いデータが表示されたりします。完全な正確性は期待できませんが、あくまでも目安としてご利用ください。

ボーナス: 接続をテストするために負荷をシミュレートする

負荷が増加したときにカウンターがどのように変化するかを確認するには、複数のブラウザ タブを開くか、次のようなスクリプトを実行します。

$Counter = 20 for ($i=1; $i -le $Counter; $i++) { Start-Process "http://localhost:9666/" }

これにより、複数のリクエストが発行され、接続数が増加します。その後、パフォーマンスモニターまたはPowerShellに戻り、接続数が増加しているかどうかを確認してください。WindowsまたはIISは、特に負荷が高い場合、新しい接続の登録に時間がかかることがあります。そのため、すぐに登録されなくても慌てる必要はありません。

まとめ

  • パフォーマンス モニターを使用して、リアルタイムの IIS 接続カウンターを監視します。
  • PowerShell コマンドを活用してチェックをスクリプト化したり、レポートを自動化したりします。
  • 複数のサイトの場合は、ユーザーフレンドリーな方法でデータを取得して表示するスクリプトを作成します。

まとめ

まとめ:IIS でユーザーセッションを追跡するのはそれほど難しいことではありませんが、最初は必ずしも分かりにくいものです。パフォーマンスカウンターと PowerShell は、ログや複雑なツールを使わずに、すぐに分析情報を提供してくれる頼りになるツールです。ただし、カウンターは時々少し不安定だったり、実際のトラフィック量より遅れたりすることがあるので、超高精度な分析には頼らず、あくまでも概算値として捉えるようにしてください。全体として、この方法はほとんどの簡単な確認や計画には十分です。誰かの時間を節約できたり、少なくとも良い出発点になったりすることを願っています。お役に立てれば幸いです。