Analog 4.16: ログファイルの選択LOGFILE logfilenameあるいは他の引数なしに、例えばanalog logfilenameの様に、コマンドラインでログファイル名を与えてもかまいません。 -記号あるいはstdinという単語は標準出力を意味します:この形式はUnixでパイプを作成するときに便利です。 全てのログファイルはあなたのコンピュータのファイルシステム(ディスク上か、あるいはUnixやNT上の共有されたドライブ上になければなりません) --analogはFTPやHTTPを使ってインターネットからログファイルを利用することができません。 Mac版では、analogアイコンに特定の一つのログファイルをドラッグすれば解析することができます。
LOGFILEコマンドはいくつか書くことができます。ログファイル名にワイルドカードを含めることもできますし(ただし、必ずしもディレクトリ名に入れる必要はありません:これはシステムに依存します)、(スペースを含まずに)コンマで区切ってログファイルの一覧を使うこともできます。 従って、以下のコマンドでanalogはlogfile1、c:\logs\logfile2、それに.logで終わる全てのファイルを読み込みます。:
LOGFILE logfile1,*.log LOGFILE c:\logs\logfile2またはMacを使っているならば、以下のようになります。
LOGFILE "Hard Drive:Internet Applications:Analog:Logs:*"LOGFILEコマンドはコマンドラインやユーザーが指定した環境設定ファイルのどのログファイルも初期設定の環境設定ファイルよりも優先され、それらもまた強制環境設定ファイルよりも優先され、累積されていきます。 また以下の特別なコマンドがあります。
LOGFILE noneこれは今まで指定されたログファイルの一覧を無効にします。
もしログファイルが標準フォーマットでなくても、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つの理由が考えられます:
LOGFILE log1,log2 http://www.%v.mydomain.comは、ファイル名/file.htmlをlog1あるいはlog2の仮想ホストhost1からhttp://www.host1.mydomain.com/file.htmlと翻訳するでしょう。 もし、LOGFILEコマンドの2つ目の引数を使うのであれば、同様にSUBDIRコマンドも必要となるでしょう。
もし%vが引数に含み、ログファイルの行が仮想総ホストを持っていなければ、その行は異常と見なされます。 もしVHOSTLOWMEM 3が指定されていれば、%vは訳出されず、出力には単に%vと現れるでしょう。
UNCOMPRESS *.gz,*.Z /usr/bin/gzcat一方WindowsNT上では以下のようになるでしょう。
UNCOMPRESS *.gz ("c:\Program Files\gzip\gzip" -cd)
これは環境設定ファイルに含めるべきコマンドでしょう。
もしanalogがログファイルを解凍し始めるときそのファイルが分析に対して必要ないと判断すると、2つの望ましくない事態が起きます。 ログファイルが完全に解凍し終わるまでプログラムが止まってしまうか、「broken pipe - パイプ破損」エラーが出てくるかもしれません。 これらはシステムに依存し、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 1243analogはこれらを理解しますが、(2つのフォーマットと同じように)もし形式が途中で変わってしまうときには、それらの行を排除してしまいます。
[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)参照元ログでは、日にちは省略することが出来る。
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\""
別々のログよりも組み合わせのログの方が通常良い。何故なら、より少ないスペースで多くの情報を蓄えられるからです。
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 コマンドを書く必要がある。
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 コマンドを書かなければならない。
もし 先頭行が壊れていると 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%
Stephen Turner
analogについての質問はanalog-helpメーリングリストをお使い下さい