Analog 5.01: ログファイルの選択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 noneこれは今まで指定されたログファイルの一覧を無効にします。
もしログファイル名がディレクトリ名を含んでいないときには、analog がログファイルがあると予想している場所を探すでしょう。(この場所は、プログラムのコンパイル時に決められている。)例えば、Windows 上では、analog の実行ファイルと同じフォルダーにあると予想するでしょう。従って、現在の作業ディレクトリからログファイルを取り込もうとするなら、例えば Unix 上では、logfile.log の代わりに ./logfile.log とする必要がある。
LOGFILEコマンドは、以下の場合を除いて累積されていきます。例外は、コマンドライン上のあるいはコマンドライン上で指定された環境設定ファイル内のどのログファイルも、初期設定の環境設定ファイル 内のあるいはそのファイルから読み込まれる環境設定ファイル内のどんなログファイルにも優先きするが、それら自身もまた 強制環境設定ファイル あるいはそのファイルから読み込まれる環境設定ファイル中のどのログファイルにも優先される。通常これらを問題にすることはなく、思ったとおりに事は進むでしょう。(実際には、"ログファイルあるいはキャッシュファイル" というべきだった。 -- しかし 後に それらについて触れるだろう。
もしログファイルが標準フォーマットでなくても、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 mydomain.log http://www.mydomain.comは、 mydomain.log 中のファイル名 /file.html を http://www.mydomain.com/file.htmlと翻訳するでしょう。
もしこのコマンドを幾つかの異なる仮想ホストからのログファイルをまとめるために使うなら、「仮想ホストレポート」は異なる仮想ホストについての情報は与えないでしょう。仮想ホスト名は、単にファイル名の一部になります。従って、代わりに「ディレクトリレポート」を見ることになるでしょう。(そして、多分 SUBDIR コマンドも使いたくなるでしょう。)
もしログファイルが各行に仮想ホスト名を含むなら、引数に %v を含むことができ、仮想ホスト名はそこで挿入されるでしょう。もし %v が含まれてかつログファイルの行が仮想ホストを含んでいないときには、その行は異常行とみなされます。
UNCOMPRESS *.gz,*.Z /usr/bin/gzcat一方WindowsNT上では以下のようになるでしょう。
UNCOMPRESS *.gz ("c:\Program Files\gzip\gzip" -cd)
これは環境設定ファイルに含めるべきコマンドでしょう。
もしanalogがログファイルを解凍し始めるときそのファイルが分析に対して必要ないと判断すると、2つの望ましくない事態が起きます。 ログファイルが完全に解凍し終わるまでプログラムが止まってしまうか、「broken pipe - パイプ破損」エラーが出てくるかもしれません。 これらはシステムに依存し、analogの制御の外です。
(注意:他の種類の事前処理、例えば DNS 参照の際に UNCOMPRESS コマンドを使うのを止める手立ては、ありません。)
共通ログ形式(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メーリングリストをお使い下さい