tailコマンドでログファイルをリアルタイムに監視する(Windows編)Tech TIPS

ログ・ファイルに書き込まれるデータの内容をリアルタイムに確認すれば、サービスやアプリケーションの動作状態をモニタできる。単にメモ帳などでログ・ファイルを開いても、リアルタイムに書き込まれるログ・データの内容は確認できない。tail -fコマンドを利用すると、ファイルの末尾に書き込まれたデータをモニタし、それを表示させ続けることができる。

» 2004年05月15日 05時00分 公開
[打越浩幸デジタルアドバンテージ]
「Tech TIPS」のインデックス

連載目次

対象OS:Windows 2000/Windows XP/Windows Server 2003



解説

 Windows OSに限らず、OS上で動作している各種のサービス・プログラムでは、動作状態の情報を「ログ・ファイル」として、テキスト・ファイルに書き出すものが少なくない。例えばWebサーバのログや、ファイアウォールの動作ログなどがある。

 これらのログ・ファイルの内容を調査するには、メモ帳で開いたり、コマンド・プロンプト上でmoreやtypeコマンドを使って表示させたりするのが一般的である。だがログ・ファイルの内容は時々刻々と変化しているので(正確には、時間が進むにつれて内容が次々と追加されているので)、メモ帳で開いたログ・ファイルの内容や、moreコマンドで表示したデータは必ずしも最新のものではない。時間がたてば、また新しい内容(ログ・データ)が追加されてしまっているからだ。最新の内容を確認したければ、その都度ファイルをオープンし直す必要があるが、これは非常に面倒である。

 このような場合UNIXでは、tailコマンドを使ってファイルの最後を常時監視するという手法がよく使われる。もともとtailとは、ファイルの最後の部分を(指定した行数だけ)表示するというコマンドであるが、「-f」オプションを指定することにより、ファイルの最後を監視し、新しいデータ(行)が追加されるたびにそれを表示するという動作をする。これを使ってログ・ファイルの最後を表示させておけば、新しいログ・イベントをリアルタイムに監視することができる。

操作方法

 tailコマンドはWindows OSの標準コマンドではないため、まずこれをインストールする必要がある。Windows 2000の場合は、SFUをインストールすればこの中にtailコマンドが用意されている。SFUの入手とインストールについてはTIPS「UNIX互換環境を実現するSFUを利用する」などを参照していただきたい。

 Windows XP/Windows Server 2003の場合はリソース・キットに含まれているので、これをインストールすればよい。リソース・キットについてはTIPS「Windows OS向けリソースキット・ツールを入手する」を参照のこと。

 tail.exeをオプションなしで起動すると、指定されたファイル(もしくは標準入力)の最後の10行のみを表示して終了する。「tail -20 <ファイル名>」などとすると、指定した行数(ここでは20行)だけ表示して終了する。この方法は、長いログ・ファイルの最後の部分、つまり最新のログ・エントリだけを素早く確認するために有効である。

 ファイルの最後の部分をリアルタイムに監視するには「tail -f <ファイル名>」とする。これを実行すると、ファイルの最後の10行を表示した後(「-数字」オプションを使った場合は指定した行数だけ表示した後)、ファイルの最後を監視するモードになる。そしてログ・ファイルにデータが追加されるたびに、そのデータ(行)を表示する。これを停止するには[Ctrl]+[C]キーを押す。

 次の例は、Windows XPのICF(インターネット接続ファイアウォール)のログ・ファイル(デフォルトではC:\Windows\pfirewall.logに作成される)の内容をモニタした例である。tailを実行すると、ファイルの最後の10行分が表示される。

C:\>cd WINDOWS

C:\WINDOWS>tail -f pfirewall.log
2004-05-04 17:30:07 DROP TCP 210.6.XX.XX 210.170.XX.XX 1705 80 48 S 645825056 0 16384 - - -
2004-05-04 17:34:15 DROP TCP 210.170.XX.XX 210.170.XX.XX 4685 445 48 S 3824435887 0 8760 - - -
2004-05-04 17:34:46 DROP UDP 203.61.XX.XX 210.170.XX.XX 3021 137 78 - - - - - - -
2004-05-04 17:37:24 DROP TCP 210.18.XX.XX 210.170.XX.XX 20066 1433 48 S 2550998442 0 64512 - - -
2004-05-04 17:41:49 DROP TCP 66.122.XX.XX 210.170.XX.XX 63755 135 48 S 3845794192 0 64240 - - -
2004-05-04 17:42:58 DROP TCP 211.204.XX.XX 210.170.XX.XX 1344 4899 48 S 1405463990 0 16384 - - -
2004-05-04 17:43:32 DROP TCP 210.170.XX.XX 210.170.XX.XX 1132 445 48 S 1049849537 0 8760 - - -
2004-05-04 17:50:10 DROP TCP 203.240.XX.XX 210.170.XX.XX 3965 6129 48 S 2987391864 0 64240 - - -
2004-05-04 17:50:10 DROP TCP 203.240.XX.XX 210.170.XX.XX 3966 139 48 S 2987445823 0 64240 - - -
2004-05-04 17:50:28 DROP UDP 222.82.XX.XX 210.170.XX.XX 3632 1434 404 - - - - - - -



 新しくデータが追加されると、次のようにそれらが順次スクロールして表示されていく。ログ監視用に1つコマンド・プロンプト・ウィンドウを開き、その中でずっとtailを動作させておけばよいだろう。中止したければ、最後に[Ctrl]+[C]を押せばよい。

C:\>cd WINDOWS

C:\WINDOWS>tail -f pfirewall.log
2004-05-04 17:30:07 DROP TCP 210.6.XX.XX 210.170.XX.XX 1705 80 48 S 645825056 0 16384 - - -
2004-05-04 17:34:15 DROP TCP 210.170.XX.XX 210.170.XX.XX 4685 445 48 S 3824435887 0 8760 - - -
2004-05-04 17:34:46 DROP UDP 203.61.XX.XX 210.170.XX.XX 3021 137 78 - - - - - - -
2004-05-04 17:37:24 DROP TCP 210.18.XX.XX 210.170.XX.XX 20066 1433 48 S 2550998442 0 64512 - - -
2004-05-04 17:41:49 DROP TCP 66.122.XX.XX 210.170.XX.XX 63755 135 48 S 3845794192 0 64240 - - -
2004-05-04 17:42:58 DROP TCP 211.204.XX.XX 210.170.XX.XX 1344 4899 48 S 1405463990 0 16384 - - -
2004-05-04 17:43:32 DROP TCP 210.170.XX.XX 210.170.XX.XX 1132 445 48 S 1049849537 0 8760 - - -
2004-05-04 17:50:10 DROP TCP 203.240.XX.XX 210.170.XX.XX 3965 6129 48 S 2987391864 0 64240 - - -
2004-05-04 17:50:10 DROP TCP 203.240.XX.XX 210.170.XX.XX 3966 139 48 S 2987445823 0 64240 - - -
2004-05-04 17:50:28 DROP UDP 222.82.XX.XX 210.170.XX.XX 3632 1434 404 - - - - - - -
2004-05-04 18:00:52 DROP UDP 81.214.XX.XX 210.170.XX.XX 1027 137 78 - - - - - - -
2004-05-04 18:02:11 DROP TCP 65.182.XX.XX 210.170.XX.XX 3042 2745 48 S 1258940648 0 64240 - - -
2004-05-04 18:02:11 DROP TCP 65.182.XX.XX 210.170.XX.XX 4803 1025 48 S 1259135034 0 64240 - - -
2004-05-04 18:02:14 DROP TCP 65.182.XX.XX 210.170.XX.XX 3042 2745 48 S 1258940648 0 64240 - - -
2004-05-04 18:05:32 DROP UDP 217.165.XX.XX 210.170.XX.XX 1041 137 78 - - - - - - -
2004-05-04 18:15:42 DROP TCP 210.165.XX.XX 210.170.XX.XX 2706 135 48 S 1289945371 0 65044 - - -
2004-05-04 18:29:29 DROP TCP 210.122.XX.XX 210.170.XX.XX 1951 445 48 S 3702767269 0 64240 - - -

※黄色い部分が新たに表示された部分。時間とともに新しい行が表示されている。ただしこれは分かりやすいように文字に色を付けたものであり、実際には色が付いているわけではない。



●ログ・ファイルのバッファリングに注意

 ただしこのtailコマンドを使ってログ・ファイルを監視する方法は、すべてのログ・ファイルに対して利用できるわけではない。アプリケーションによっては、ログ・ファイルの書き込みをメモリ中にバッファリングしている場合があるからだ。ディスクへの書き込みをログ発生のたびに行わず、いくつかまとめてバッファリングしてから書き込むことにより、ディスクへのアクセス回数を減らし、システムのパフォーマンスを向上させることができる。特に大量のログを発生させるWebサーバのログ・ファイルなどで大きな効果が期待できる。このようなアプリケーションの場合は、ファイルにデータが書き込まれていないので、いくらtailコマンドでログ・ファイルの末尾を監視していても、リアルタイムでモニタすることはできない。

 具体的には、IIS 5(Windows 2000のIIS)やそれ以前のIIS(Windows NTのIIS)のログ・ファイルがこれに相当する。これらのIISでは、ログ・ファイルを(デフォルトでは)64Kbytesずつバッファリングして書き込んでいる。またログ・ファイルのサイズも、64Kbytesといった大きな単位で割り当てている。つまり最初に64Kbytesのファイル領域を割り当て、それを使い切ればまた新しく64Kbytesずつ順次割り当てるというふうに動作しており、無駄なファイルのフラグメント(断片化)などを抑えるようにしている。ファイルの末尾がログ・ファイルの末尾というわけではないので、tailコマンドではうまく扱うことができない(IIS内部では、64Kbytesのメモリ領域を使ったメモリ・マップド・ファイルとして管理しているようである)。そして、1日分のログ・ファイルが終了した時点で、もしくはIISが停止した時点で、ログ・ファイルを正しいサイズに切り詰めている。そのため、前日までのログ・ファイルならばtailで末尾を見ることはできるが、今日の(いま現在の)ログ・ファイルの末尾をリアルタイムに確認するのは難しい。-fオプションなしで利用するのがよいだろう(大量のNull文字データが表示されるが)。

 なおWindows Server 2003ではログ・ファイルの管理方法が変更されたためか、-fオプション付きのtailコマンドで正しくリアルタイムにモニタすることができる。

「Tech TIPS」のインデックス

Tech TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。