IIS ログ ファイル ストレージの管理

作成者: Jim van de Erve

圧縮、リモート ストレージ、スクリプトによる削除を使用して、インターネット インフォメーション サービス (IIS) ログ ファイルが消費するサーバー ディスク領域の量を管理できます。

概要

IIS が生成するログ ファイルは、時間の経過とともに大量のディスク領域を消費する可能性があります。 ログによってハード ドライブ全体がいっぱいになる可能性があります。 この問題を軽減するために、多くのユーザーはログ記録を完全にオフにします。 幸いなことに、次のような代替手段があります。

上記の軽減策について、以下のセクションで説明します。 ディスクの使用量を制御するために、次の操作を行うこともできます。

  • 不要なプロパティ フィールドを省略してログ サイズを制限する
  • Web サイトとアプリケーションに個別のログを作成する
  • 一元化されたバイナリ ログを使用してメモリ リソースを保持する

詳細については、「IIS でログを構成する」を参照してください。

フォルダーの圧縮を有効にする

IIS ログ ファイルは、元のサイズの約 2% に圧縮されます。 次の手順に従って、ログ ファイルの圧縮を有効にします。 この手順を実行するには、管理者である必要があります。

  1. アイコン バーの [ファイル マネージャー] アイコンをクリックします。
  2. IIS ログ ファイルを含むフォルダーに移動します (既定では、 %SystemDrive%\inetpub\logs\LogFiles)。
  3. フォルダーを右クリックし、[プロパティ] をクリックします。
  4. [プロパティ] ページの [全般] タブで、[詳細設定] をクリックします。
  5. [内容を圧縮してディスク領域を節約する] をクリックし、[OK] をクリックします。 圧縮の有効化
  6. [適用] をクリックし、フォルダーのみを圧縮するか、フォルダー、そのサブフォルダー、およびそのファイルを圧縮するかを選択します。
  7. OK をクリックします。 フォルダーの内容が圧縮されていることを確認します。 フォルダーと各ファイルの名前が青字で表示されており、圧縮ファイルのサイズが小さくなっているはずです。

これは、ディスク使用量を削減する簡単な方法です。 ただし、ディスク使用量は時間の経過とともに増加し、最終的にハード ドライブがいっぱいになる可能性があるため、これは最終的な解決策ではありません。

フォルダーに既に大量のデータが含まれている場合は、フォルダーの内容の圧縮に時間がかかる可能性があります。 また、この 1 回限りのプロセスでは、初期圧縮中にコンピューターの速度が低下する可能性があるため、運用サーバーの場合は、サービスの低下を防ぐために、オフピーク時にこの操作を実行してください。

ログ フォルダーをリモート システムに移動する

IIS ログ ファイルは、既定で IIS サーバーの %SystemDrive%\inetpub\logs\LogFiles フォルダーに格納されます。 フォルダーは、サーバーまたは個々のサイトの [ログ] ページの [ディレクトリ] プロパティで構成されます。 ログ ディスクの使用量の問題を軽減するために、より多くの領域を持つ別のサーバー上のフォルダーに IIS ログ ファイルを移動することができます。 このサーバーは、ローカル IIS サーバーと同じドメイン内に存在していても、別のドメイン内に存在していてもかまいません。 サーバー全体のログ ファイルまたは個々の Web サイトのログ ファイルをリモートに保存できます。

ローカル ハード ドライブがクラッシュしても、リモート ストレージでログ データを引き続き使用できるため、この解決策はシステム セキュリティの強化に役立ちます。 さらに、ログ ファイルは、分析システムで使用することができます。

次の手順で、IIS ログ ファイルの場所をリモート共有に変更します。

  1. IIS を実行しているローカル Web サーバーと同じドメイン内のリモート サーバー上にログ ファイル ディレクトリを作成します。

  2. フォルダーの [プロパティ] ページの [共有] タブで、[共有] をクリックし、ディレクトリが共有されるようにします。 [セキュリティ] タブで、適切なアクセス許可を持つグループとユーザーを割り当てます。 適切なグループとユーザーがログ ファイルの読み取りと書き込みを行えるようにします。 ログ フォルダーのプロパティ

    詳細については、「リモート ログのアクセス許可の構成」を参照してください。

    注: 別のドメイン内のリモート サーバーにログ ファイルを書き込む場合は、「クロスドメイン ログの Null セッションの設定」を参照してください。

  3. ローカル Web サーバーで IIS マネージャーを開きます。

  4. IIS マネージャー[接続] ペインで、サーバーまたは Web サイトをクリックします。

  5. [ログ記録] をダブルクリックします。 ログ 記録アイコン

  6. [ディレクトリ] テキスト ボックスに、リモート サーバーで作成したディレクトリの完全な UNC パスを入力します。 たとえば、「\servername\Logs」と入力します。"servername" はリモート サーバーの名前を表し、"Logs" はログ ファイルが格納されている共有の名前を表します。 [ログ記録] ページ

  7. [操作] ペインで、[適用] をクリックし、[OK] をクリックします。 ディレクトリ内のすべての Web サイトがリモート共有へのデータのログ記録を開始するはずです。

    詳細については、「リモート ログ」を参照してください。

スクリプトによる古いログ ファイルの削除

特定の保存期間より古いログ ファイルを自動的に削除するスクリプトを実行することで、ログ ファイルのディスク使用量を制御することができます。 スケジュールされたタスクでこのスクリプトを実行することで、定期的なメンテナンスを行わなくても、ディスクがいっぱいになる問題を制御できます。

次の VBScript は、フォルダー内の各ログ ファイルの保存期間をチェックし、指定された保存期間より古いログ ファイルをすべて削除します。 目的に合わせてスクリプトをカスタマイズするには、スクリプトの 1 行目でフォルダーの名前とパスを変更し、2 行目で最大保存期間を目的の日数に変更します。

sLogFolder = "c:\inetpub\logs\LogFiles"
iMaxAge = 30   'in days
Set objFSO = CreateObject("Scripting.FileSystemObject")
set colFolder = objFSO.GetFolder(sLogFolder)
For Each colSubfolder in colFolder.SubFolders
        Set objFolder = objFSO.GetFolder(colSubfolder.Path)
        Set colFiles = objFolder.Files
        For Each objFile in colFiles
                iFileAge = now-objFile.DateCreated
                if iFileAge > (iMaxAge+1)  then
                        objFSO.deletefile objFile, True
                end if
        Next
Next

上記のスクリプトは、すべてのサブフォルダーをスキャンするため、指定されたフォルダー内とその下のすべてのサイトのログが処理されます。 プロセスを 1 つのサイトのみに制限する場合は、パスを適切に変更します。

スクリプトを手動で実行するには、管理者コマンド ラインで次のスクリプトを実行します: cscript.exe c:\scripts\retentionscript.vbs

スクリプトを使用してログ ファイルを削除することは、ディスク領域を消費するログ ファイルの問題に対する長期的で信頼性の高い解決策です。 次に示すようにプロセスを自動化すると、定期的なメンテナンスが不要になります。

スケジュールされたタスクとしてスクリプトを実行する

スクリプトを定期的に実行する Windows タスク スケジュールを作成することで、スクリプトによるログ ファイルの削除タスクを自動化できます。 Windows タスク スケジューラを使用して、スクリプトを任意の時間に実行するようにスケジュールすることができます。 スケジュールされたタスクの構成方法を、ログ ファイルのロールオーバー オプションの構成に合わせる必要があります。

  1. サーバー マネージャーを開き、[ツール] メニューをクリックして、[タスク スケジューラ] をクリックします。
  2. [タスク スケジューラ] ダイアログ ボックスの [操作] ペインで、[タスクの作成] をクリックします。 タスク コントロールの作成
  3. [タスクの作成] ダイアログ ボックスの [全般] タブで、「ログ ファイルの削除」などのタスクの名前を入力します。 セキュリティ プロパティを設定し、スクリプトを実行するのに十分な特権を持つユーザー アカウントを選択します。 [タスクの作成] ダイアログ ボックス
  4. [トリガー] タブをクリックし、[新規] をクリックします。 [新しいトリガー] ダイアログ ボックスで、[タスクの開始][スケジュールに基づく] に設定します。 [毎日] などの周期性を選択します。 [開始日] を入力し、より高度な設定を選択します。スケジュールを開始する準備ができている場合は [有効] が選択されていることを確認します。 OK をクリックします。 [新しいトリガー] ダイアログ ボックス
  5. [操作] タブをクリックし、[新規] をクリックします。 [新しいアクション] ダイアログ ボックスで、[アクション] の値を選択します。この場合は、[プログラムの開始] を選択します。 [プログラム/スクリプト] に「cscript」と入力し、[引数の追加 (省略可能)] にスクリプト ファイルのパスと名前を入力します (例: C:\iis\Log\_File\_Deletion.vbs)。 OK をクリックします。 [新しいアクション] ダイアログ ボックス
  6. OK をクリックします。
  7. タスクが [アクティブなタスク] ペインに追加されていることを確認します。
  8. 新しいタスクを右クリックし、[実行] を選択します。 [タスク スケジューラ] ダイアログ ボックス
  9. スクリプトが実行されたフォルダーに移動し、適切なログ ファイルが削除されたことを確認します。
  10. タスク スケジューラに戻り、タスクを右クリックして [終了] をクリックすると、状態が [準備完了] に戻り、スケジュールされた実行に向けたタスクの準備が整います。