[ 先頭 | 上へ | 前へ | 次へ | 目次 | 索引 ]

Analog 5.01: ログファイルの選択


ログファイルを選択する基本的なコマンドは
LOGFILE logfilename
あるいは他の引数なしに、例えばanalog logfilenameの様に、コマンドラインでログファイル名を与えてもかまいません。 -記号あるいはstdinという単語は標準出力を意味します:この形式はUnixでパイプを作成するときに便利です。 全てのログファイルはあなたのコンピュータのファイルシステム(ディスク上か、あるいはUnixやNT上の共有されたドライブ上になければなりません) --analogはFTPやHTTPを使ってインターネットからログファイルを利用することができません。 Mac版では、analogアイコンに特定の一つのログファイルをドラッグすれば解析することができます。

LOGFILEコマンドはいくつか書くことができます。ログファイル名にワイルドカードを含めることもできますし(ただし、必ずしもディレクトリ名に入れる必要はありません:これはシステムに依存します)、(スペースを含まずに)コンマで区切ってログファイルの一覧を使うこともできます。 従って、以下のコマンドでanalogはlogfile1c:\logs\logfile2、それに.logで終わる全てのファイルを読み込みます。:

LOGFILE logfile1,*.log
LOGFILE c:\logs\logfile2
またはMacを使っているならば、以下のようになります。
LOGFILE "Hard Drive:Internet Applications:Analog:Logs:*"
また以下の特別なコマンドがあります。
LOGFILE none
これは今まで指定されたログファイルの一覧を無効にします。

もしログファイル名がディレクトリ名を含んでいないときには、analog がログファイルがあると予想している場所を探すでしょう。(この場所は、プログラムのコンパイル時に決められている。)例えば、Windows 上では、analog の実行ファイルと同じフォルダーにあると予想するでしょう。従って、現在の作業ディレクトリからログファイルを取り込もうとするなら、例えば Unix 上では、logfile.log の代わりに ./logfile.log とする必要がある。

LOGFILEコマンドは、以下の場合を除いて累積されていきます。例外は、コマンドライン上のあるいはコマンドライン上で指定された環境設定ファイル内のどのログファイルも、初期設定の環境設定ファイル 内のあるいはそのファイルから読み込まれる環境設定ファイル内のどんなログファイルにも優先きするが、それら自身もまた 強制環境設定ファイル あるいはそのファイルから読み込まれる環境設定ファイル中のどのログファイルにも優先される。通常これらを問題にすることはなく、思ったとおりに事は進むでしょう。(実際には、"ログファイルあるいはキャッシュファイル" というべきだった。 -- しかし 後に それらについて触れるだろう。


analogはいくつかの異なるタイプのログファイルを認識します。 初期設定ではログファイルの1行目を見て、知っているタイプの1つであるかどうか判断します。 通常判断することができるタイプは、共通ログフォーマット、NCSAの組み合わせ形式、リンク元ログとブラウザーログ、W3の拡張ログフォーマット、マイクロソフトIISフォーマット、ネットスケープフォーマット、WebSTARフォーマットとWebSiteフォーマットです。 これら全てのフォーマットの事例がこの章の最後にあります。 もしデバグをオンにしているならば、analogがあなたのログファイルのタイプを報告してくれます。

もしログファイルが標準フォーマットでなくても、LOGFORMATコマンドを使ってanalogに指定することができるので、おそらく問題ないでしょう。 これは次の章で説明されます。 しかし大部分のユーザーは標準フォーマットのログファイルを持っているので知る必要はありません。 最善の方法は、とにかくログファイルを解析してみて、analogが理解するかどうかを確かめてみることです。 理解してくれれば、LOGFORMATについて心配する必要はありません。

もしanalogがあなたのログファイルを理解できないならば、 "it will warn you that it can't detect the format - ログファイル形式を認識できない"または、"possibly that it found a lot of corrupt lines - 多くの異常な行を見つけた"と警告するでしょう。 これが起きる理由として、基本的に4つの理由が考えられます:

  1. ある種のログフォーマットにはよく設計されていないものがあり、analogがきちんと解析できません。 この場合には、いい加減な作業をせずに、通常ヘルプ・メッセージを出して解析を止めてしまいます。 例えば、「Logfile with ambiguous dates - ログの日付が不明瞭です」あるいは「Time without date - 時間に日付がありません」といったものです。 この場合、それらのフォーマットが持つ共通の問題が述べられているすべてのビルトインフォーマットの注意書きを読むべきです。
  2. analogはログの最初の行に基づいてフォーマットを判断しようとするので、最初の行が壊れてしまっているだけかもしれません。 この場合には、analogに形式を指定するか、最初の行を修正すればかまいません。
  3. 同じ理由で、ログの途中でフォーマットが変わっている場合は、analogはそれ以下の行が壊れていると見なします。 この場合、レポートには部分的な解析と多数の異常な行が含まれているでしょう。 あなたは、analogに2つの異なったフォーマットを指定する2種類のLOGFORMATコマンドを与える必要があるでしょう。
  4. 最後に、いくつかのログファイルが実際にどの標準形式でもない場合があります。 この場合には、次章を読んで、あなたのフォーマットをanalogに指定する方法を学ぶ必要があるでしょう。
もし、ログファイルについて悪いところを見つけることができないなら、DEBUG ONを指定すれば、analogがどの行に不正があるか報告するでしょう。
LOGFILEコマンドには2つ目の引数があり、それはログファイルの全てのファイル名の前に追加されます。 これは、いくつかのサーバーあるいは仮想ホストがあり、各サーバーに同名のファイルが存在するときに役立ちます。 例えば、
LOGFILE mydomain.log http://www.mydomain.com
は、 mydomain.log 中のファイル名 /file.html を http://www.mydomain.com/file.htmlと翻訳するでしょう。

もしこのコマンドを幾つかの異なる仮想ホストからのログファイルをまとめるために使うなら、「仮想ホストレポート」は異なる仮想ホストについての情報は与えないでしょう。仮想ホスト名は、単にファイル名の一部になります。従って、代わりに「ディレクトリレポート」を見ることになるでしょう。(そして、多分 SUBDIR コマンドも使いたくなるでしょう。)

もしログファイルが各行に仮想ホスト名を含むなら、引数に %v を含むことができ、仮想ホスト名はそこで挿入されるでしょう。もし %v が含まれてかつログファイルの行が仮想ホストを含んでいないときには、その行は異常行とみなされます。


ディスクスペースを節約するためにログファイルを圧縮して保存することはしばしば便利なことです。 Mac版のanalogはgzipで圧縮されたログファイルを読み込むことができます。 Unix版とWin32版のanalogはUNCOMPRESSコマンドで解凍方法を指定することによって圧縮されたログファイルを読み込むことができます。 解凍する必要のあるファイルタイプをコンマで区切って一覧する必要があり、それと共にファイルを標準出力(ファイルではなく)にファイルを解凍するコマンド名を書く必要があります。 例えば、Unixであれば以下のようになるでしょう。
UNCOMPRESS *.gz,*.Z  /usr/bin/gzcat
一方WindowsNT上では以下のようになるでしょう。
UNCOMPRESS *.gz ("c:\Program Files\gzip\gzip" -cd)
これは環境設定ファイルに含めるべきコマンドでしょう。

もしanalogがログファイルを解凍し始めるときそのファイルが分析に対して必要ないと判断すると、2つの望ましくない事態が起きます。 ログファイルが完全に解凍し終わるまでプログラムが止まってしまうか、「broken pipe - パイプ破損」エラーが出てくるかもしれません。 これらはシステムに依存し、analogの制御の外です。

(注意:他の種類の事前処理、例えば DNS 参照の際に UNCOMPRESS コマンドを使うのを止める手立ては、ありません。)


ログファイル形式

以下はanalogが認識する主種のログファイル形式のまとめがあります。 これらを説明するために、異なる形式で記録されるような同じリクエストを使いました。

共通ログ形式(common)は大部分のサーバーによって書かれます。 それらの行は以下のようになります。

jay.bird.com - fred [25/Dec/1998:17:45:35 +0000]
"GET /~sret1/ HTTP/1.0" 200 1243
(実際は一行である)。 マイクロソフト社のソフトウェアのあるバージョンでは以下のように HTTP の前に余分な引用符がついてしまうバグがあります:
jay.bird.com - fred [25/Dec/1998:17:45:35 +0000]
"GET /~sret1/ "HTTP/1.0" 200 1243
analogはこれらを理解しますが、(2つのフォーマットと同じように)もし形式が途中で変わってしまうときには、それらの行を排除してしまいます。
NCSA の参照元ログは以下の様になる。
[25/Dec/1998:17:45:35] http://www.site.com/ -> /~sret1/
そしてブラウザー(またはエージェント)ログは以下の様になる。
[25/Dec/1998:17:45:35] Mozilla/2.0 (X11; I; HP-UX A.09.05)
参照元ログでは、日にちは省略することが出来る。
NCSA 型の組み合わせログ形式(combined)は、共通ログ形式と同じであるが、以下の様に行端に2重引用符で括られた参照元とブラウザーの記述がある。
jay.bird.com - fred [25/Dec/1998:17:45:35 +0000] "GET /~sret1/ HTTP/1.0"
200 1243 "http://www.site.com/" "Mozilla/2.0 (X11; I; HP-UX A.09.05)"
(実際は一行である)。Apache サーバを使っている時には、この形式は、mod_log_config モジュールを用い、以下の Apache のコマンドを使って生成される。
LogFormat "%h %l %u %t \"%r\" %s %b \"%{Referer}i\" \"%{User-Agent}i\""
別々のログよりも組み合わせのログの方が通常良い。何故なら、より少ないスペースで多くの情報を蓄えられるからです。
マイクロソフトの IIS ログファイルは、以下のようである。
192.64.25.41, -, 25/12/98, 17:45:35, W3SVC1, HOST1, 192.16.225.10,
2178, 303, 1243, 200, 0, GET, /~sret1/, -,
(実際は一行である)。 しかしながら、この形式は、日にちが地域的な時間表現に則っているという点に於いて、非常にまずく設計されている。即ち、北米では上記の例は、12/25/98 という日にちになる。analog は、可能な限りログファイルがどの形式であるか診断する。しかし、日にちも月も最大12しか記録されていない時には、どちらの形式か判断できない。この場合には、以下のコマンド、北米の日にち形式に対しては、 LOGFORMAT MICROSOFT-NA あるいは国際日にち形式に対しては、LOGFORMAT MICROSOFT-INT を使うように進言する。幾つかの国では、日にちはこれらのどちらの形式でもない。このときには、それ専用の LOGFORMAT コマンドを書く必要がある。

またマイクロソフト形式には、例えばブラウザーや参照元を含めるための、各種の第3者による拡張がある。しかしそれらは全て異なる方法で行っており、そのため analog はそれらを自動的に診断できず、再度であるがそれら専用の LOGFORMAT コマンドを書く必要がある。


WebSite 形式は以下のようである。
12/25/98 17:45:35  jay.bird.com  host1  Server  fred  GET  /~sret1/
http://www.site.com/    Mozilla/2.0 (X11; I; HP-UX A.09.05)  200  1243  2178
(実際は一行であり、書く項目はタブで区切られている。)(上記の) IIS のログファイルと同様に、あいまいな日にちの問題がある。従って、LOGFORMAT WEBSITE-NA か、LOGFORMAT WEBSITE-INT を使わなければならないか、あるいは専用の LOGFORMAT コマンドを書かなければならない。
W3 拡張ログ、Netscape ログ、それに WebSTAR ログは、認識できる。何故なら、これらは、先頭かそれに近い場所に、以下に続く行にどの形式のログが書かれているかを述べている行を含まなければ ならない からである。(これらは、形式を変えた時にまた後の行で含まれることもある。)もし先頭行がない時には、analog は続く行を説明できず、従ってログファイルを解析できない。この場合には、失った先頭行を挿入するか LOGFORMAT コマンドを使い analog に形式を伝えなければならない。

もし 先頭行が壊れていると analog が判断した時には、何が悪いのかも伝える。最も一般的な問題は、日付無しの時刻を使うことは許されないし、その逆も許されない。 -- 特に、ログファイルの先頭に日付だけがあるのは、解析に充分ではなく、各行になければならない。初期設定で、マイクロソフト社のサーバソフトは、先頭行に日付だけが付いた拡張ログを生成する。しかしもしログファイルの途中で日付が変わっても、サーバソフトは、新しい日付行を書かない。このため、analog は安全にその様なログファイルを解析できない。役立つソフトのページ には、各行に日付をつけてくれる幾つかのプログラムがある。もしそのようなログファイルをあなたが扱っているなら、これらのプログラムの一つを使いたいかもしれない。しかし、これらのプログラムはログファイルの途中で日付が変わらないと仮定されており、従って、将来は各行に日付を記録するように、サーバがログを取るようにする方が安全である。

拡張ログ形式は、 http://www.w3.org/TR/WD-logfile.html に述べられている。 その先頭行は以下のようである。

#Fields: date time cs-uri
ログファイルの残りでは、項目は、空白かタブで区切られている。 ログファイルは、全ての行に時刻と日付の両方を 含まなければならない ことを思い起こそう。 -- 上記 を参照のこと。

拡張形式については、マイクロソフトの試みがある。-- 残念なことに、この試みでは、彼らは仕様を読まなかったので、ブラウザや参照元を引用符で括っておらず、ブラウザ名中の空白を + で置き換え、そして時間を秒の代わりにミリ秒で計ったリクエストを提供する。そして、WebSTAR による試みもある。彼らは、CS-HOST の項目名を、サーバホスト名の代わりに誤まってクライアントホスト名として使っている以外は、正しい。

拡張ログは、常に時刻を GMT で記録しているため、あなたの地域時間帯に変換するために、多分 LOGTIMEOFFSET コマンドを使う必要があるだろう。

WebSTAR 形式は、http://www.starnine.com/webstar/docs/ws4manual.3f.html に述べられている。 その先頭行は以下のようである。

!!LOG_FORMAT DATE TIME RESULT URL BYTES_SENT HOSTNAME
ログファイルの残りでは、項目はタブで区切られている。WebSTAR サーバは、また時刻を GMT で記録しているため、あなたの地域時間帯に変換するために、再び LOGTIMEOFFSET コマンドを使う必要があるだろう。いくつかの他の Mac サーバも WebSTAR か、それに似たものを使う。analog はこれらも理解する。

最後に、Netscape のログの先頭行は、以下のようである。

format=%Ses->client.ip% [%SYSDATE%] "%Req->reqpb.clf-request%"
%Req->srvhdrs.clf-status% %Req->srvhdrs.content-length%

analogホームページ

Stephen Turner
2001年5月19日

analogについての質問はanalog-helpメーリングリストをお使い下さい

[ 先頭 | 上へ | 前へ | 次へ | 目次 | 索引 ]