2008年8月5日火曜日

IISのログファイルをUTF-8で記録する

IISのログを解析するのにLogParserはとても便利。
IISログのフィールドをカラムに見立ててSQL(っぽい)クエリで解析したり統計を取ることができます。
 
しかしIIS6ではログファイルのエンコードがデフォルトではANSIのため、リファラなどにUTF-8の日本語が突っ込まれて一部が文字化けしたログをLogParserに食わせると該当の行でカラムの区切りがうまくいかずに(※)行単位で無視されてしまいます。
 
(※「ログのロウが予期せず終了しています。」というエラー)
 
 
そういうことで困ったら、IIS6が出力するログのエンコードをUTF-8にしてしまうのがよいです。
 

英語以外の言語とセキュリティのために UTF-8 形式を有効にする
http://technet2.microsoft.com/WindowsServer/ja/library/b5060e4e-8573-4992-830b-98dd368714f11041.mspx?mfr=true


 
上記は文字だけなので変更箇所のスクリーンショットを。
[caption id="attachment_524" align="alignnone" width="469" caption="図:IIS6のログをUTF-8で保存するオプション"]図:IIS6のログをUTF-8で保存するオプション[/caption]
 
ちなみにこのオプションでログのファイル名が変わります。
今まで"exyymmdd.log"だったのが、"u_exyymmdd.log" になる、バッチでの自動化をしている場合は要注意。
 
 
ところでWindowsServer2008で使われるIIS7ではどうなんでしょう。
[caption id="attachment_525" align="alignnone" width="450" caption="図:IIS7ではデフォルトでUTF-8、ほかで選べるのはANSI"]図:IIS7ではデフォルトでUTF-8、ほかで選べるのはANSI[/caption]
 
こちらはデフォルトでUTF-8、ログファイルも"u_exyymmdd.log" ですね。
 
 
 
LogPaeserはその他、イベントログ・パフォーマンスログをはじめ各種ログ形式に対応しており、組み合わせと工夫でいきなりグラフ画像を出力する事もできるなど有用なツールです。
Windows運用管理では必須といってよいかも。(費用かければまた違うかも知れませんが。)