SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

[Web サーバー立ち上げ体験日記]ログ管理 その 1

leave a comment

昨日の投稿から Web サーバー導入キットと LiveSpace に同一の内容を投稿するようにしています。
# 単純に両方に投稿しているだけですが。
ブログは LiveSpace を使い続けようと思うのですが勉強を兼ねて Web サーバー導入キットでも立ち上げています。

今朝から URL を公開してサーバーは運用テストを行っているのですが、IIS のアクセスログ管理に関してそろそろ
考えていこうと思います。

IIS のアクセスログはデフォルトでは [%SystemDrive%inetpublogsLogfiles] に保存されるようになっています。
%SystemDrive% は通常 C ドライブになりますので C ドライブ内にどんどんログが蓄積されていきます。

以前も投稿したのですが私は C ドライブにファイルを置くのが嫌なので場所を移動しています。

[ログファイルの移動]

  1. [インターネット インフォメーション サービス (IIS) マネージャ] を実行します。
  2. サイトを選択し、[ログ記録] をダブルクリックします。
    image
  3. ディレクトリ名を変更ます。
    image
  4. 操作ウィンドウの [適用] をクリックします。
    image

これでログファイルの保存場所の変更は終了です。

デフォルトのログファイルの形式は [W3C] になっているはずですが、デフォルトの状態では [参照者(cs(Referer)] が
取得されていません。

この情報が取得されていないとリンクからページのアクセスされた際にどこから来たのかが出力されません。
この項目も取得するように設定したいと思います。

[取得項目の設定]

  1. [インターネット インフォメーション サービス (IIS) マネージャ] を実行します。
  2. サイトを選択し、[ログ記録] をダブルクリックします。
  3. [フィールドの選択] をクリックします。
    image
  4. [参照者 ( cs(Referer) )] を有効にし、[OK] をクリックします。
    image
  5. 操作ウィンドウの [適用] をクリックします。

これでどのページから遷移されてきたのかが取得できます。
今日半日取得したログでは以下のような内容が取得されていました。

http://engineer-memo.spaces.live.com/blog/
http://engineer-memo.spaces.live.com/blog/cns!DEC1C75BCA0DCEB2!1886.entry
http://engineer-memo.spaces.live.com/default.aspx

公開しましたという記事で URL を公開しましたのでそこから遷移してきたということがこれからわかると思います。

 

IIS 7.0 からは [ファイル名およびロールオーバーに地域設定を使用する] という設定が追加されています。
既定ではログファイルのファイル名と次のログファイルに切り替わるタイミングは UTC (協定世界時) が使用されます。
日本は [+ 9:00] ですのでファイル名とファイルが切り替わるタイミングは実際に使用している時間と差が出ます。
# ファイルの切り替えタイミングは [毎時間] [毎日] [毎週] [毎月] から選択できますが地域設定を使用しないと 
  00:00 には切り替わりません。 (デフォルトでは 15:00 に切り替わるかと)
注意点としては、ファイルの切り替えタイミングは地域設定に基づいて行われますがファイル内の時間については
UTC から変更できませんので、こちらに関しては確認するときは 9 時間プラスする必要があります。

[ファイル名およびロールオーバーに地域設定を使用する]

  1. [インターネット インフォメーション サービス (IIS) マネージャ] を実行します。
  2. サイトを選択し、[ログ記録] をダブルクリックします。
  3. [ファイル名およびロールオーバーに地域設定を使用する] を有効にします。
    image
  4. 操作ウィンドウの [適用] をクリックします。

ファイルのロールオーバーはあくまでもファイルの切り替えだけですのでこのままではファイルは蓄積されます。

PowerShell を使うとサクッとできそうですが私はコマンドプロンプトでバッチを作ることが多かったので、
今回はログファイルを圧縮して削除するバッチを作りたいと思います。

[ログファイルの圧縮 / 削除]

ログファイルの圧縮、削除は以下のバッチファイルで実行することができます。

[IISLogClrear.bat]

@ECHO OFF
SETLOCAL
REM 以下のディレクトリはログファイルの保存場所に応じて変更します。
SET LOGDIR=E:LogFilesW3SVC1

REM ファイルを CAB 形式で圧縮します。 /D –1 で 1 日前までのファイルを 1 ファイルずつ圧縮しています。
forfiles /P %LOGDIR% /M *.log /D -1  /C "cmd /C makecab @path @fname.cab"

REM 圧縮した時と同じ指定でコマンドを del に変更し、圧縮対象となったファイルを削除します。
forfiles /P %LOGDIR% /M *.log /D -1  /C "cmd /C del @path"

このバッチを実行すると 前日分までのログファイルを CAB 形式で圧縮して削除できます。

あとはこのバッチをタスクスケジューラに登録すれば定期的にログのクリアが実行できます。

  1. [管理ツール] → [タスク スケジューラ] をクリックします。
    image
  2. 操作ウィンドウの [基本タスクの作成] をクリックします。
    image
  3. [名前] を入力し、[次へ] をクリックします。
    image
  4. 実行タクトを指定して [次へ] をクリックします。
    ログクリアは毎日実行したいので今回は [毎日] に設定しています。
    image
  5. 実行するタイミングを指定します。
    私は夜間バッチとして実行したいので [0:30] にしています。
    image
  6. [プログラムの開始] を選択し、[次へ] をクリックします。
    image
  7. 先ほど作成したバッチを選択し、[次へ] をクリックします。
    image
  8. [完了] をクリックします。
    image

これでタスク スケジューラ ライブラリに登録したタスクが追加されます。
image 
デフォルトの状態では [ユーザーがログオンしているときのみ実行する] 設定になっています。
タスクを右クリックしてプロパティを開いてログオンしてなくても実行されるように設定しておきます。
# タスクは登録を行ったユーザーで実行するように作成されます。変更時には実行ユーザーのパスワード入力のダイアログが表示されます。

image
image

タスクを右クリックし、[実行する] をクリックしてテストで実行したいと思います。

[実行前]
image

[実行後]
 image

ファイルが圧縮されていることが確認できます。
# この投稿は 5/1 に書いていますので 4/30 が圧縮されています。forfiles はファイルの最終更新日時をもとに処理をします。

登録をコマンドで行う場合はコマンドプロンプトで以下を実行します。

schtasks /create /SC DAILY /TN “IIS ログクリア” /TR “E:ToolsLogIISLogCrear.bat” /ST 00:30 /NP

# コピーすると “ が全角になってしまうようですので貼り付けて使用される場合は ” を半角に打ち直してください。

これで自動でログの圧縮 / 削除を行い、ディスク容量を節約することができます。

IIS のログ管理には Log Parser が便利なので次はこちらを導入してみたいと思います。

Share

Written by Masayuki.Ozawa

5月 1st, 2009 at 1:10 pm

Leave a Reply