analog/6.0/doc/analog/analog のカスタマイズ ログファイルの選択 †ログファイルを指定する基本的なコマンドは LOGFILE ログファイル名 このような指定です。あるいはコマンドラインから引数を何も付けずに "analog ログファイル名" のようにしてログの指定もできます。ログファイルは全て手元のコンピュータ上に置かれていなくてはいけません(ディスク上に保存されているか、Unix 系ではマウントされているか、Windows NT 環境ではドライブが認識されているかです)。analog 自身には FTP や HTTP といったインターネットを経由してログを取得する機能がないのです。 A - 記号か stdin という単語を使うことで標準入力(STDIN)からの入力を受け付けます:Unix システムでは便利なパイプ機構の事です。これは以下:#secondargで説明する LOGFILE コマンドの2つめの引数(オプション)でも使えます。 LOGFILE コマンドで複数のログファイルを指定できます。ログファイル名はワイルドカード(*)を使うことも出来ますし(ただし、システム上の関係でディレクトリ名は指定しなくてはいけません)、ログファイルをカンマ(,)区切りで複数指定しても構いません(ただしスペースは入れてはいけません)。以下のコマンドは analog に lofile1 と c:\logs\logfile2、そしてファイル名の末尾に .log と付くファイルを読み込ませようとする命令です。 LOGFILE logfile1,*.log LOGFILE c:\logs\logfile2 Mac 版では次のようにして使ってみてください LOGFILE "Hard Drive:Internet Applications:Analog:Logs:*" その他に特殊なコマンドもあります LOGFILE none これまで設定ファイル内で指定されてきたログファイル群を無視するという指定です。 LOGFILE コマンドにディレクトリ名が含まれていない場合、analog がどこにログファイルが置かれているか自動検索します(通常は analog をコンパイルした場所です)。たとえば Windows 版では analog.exe を実行しているフォルダ内を探します。ただし、コマンドライン上で LOGFILE を指定したばあいは、現在のディレクトリ(カレント・ディレクトリ)にログが無いかどうか探します。 LOGFILE のログファイル名には記号を使って日付等の情報を指定することができます。 %D 日 %m 月の名前(英語で) %M 月(数字で) %y 年(2文字、2005 年の場合は 05 と指定) %Y 年(4文字、2005 年は 2005 と指定) %H 時 %n 分 %w 曜日(英語で) 例えば次のように指定します LOGFILE access_log%Y%M.log この指定を行うことによって、 access_log200109.log といったファイルを読み込めます。数字の意味は 2001 年 09 月です。実際の利用時にはプログラム開始時に特定の日を TO? を使って指定することもあります。例えば先月分の解析を行いたい場合には次のようなコマンドを記述します。 TO -00-0131 # 月末を意味する特殊な指定です LOGFILE access_log%Y%M??.log # access_log200108??.log で 2001 年 08 月のログを探します。 LOGFILE コマンドは複数行に渡って標準の設定ファイルや特定の設定ファイルに記述することができますが、コマンドライン上で指定されたログファイルがある場合、そちらが統計の解析対象となります。通常の操作では特に心配する必用はないでしょう。思った通りに動作するはずです(実際には"ログファイルまたはキャッシュファイル"と述べるべきでしたが……今は触れません。後ほど?改めて説明します。)。 analog は数種類のログファイル形式を認識することができます。標準ではログファイルの1行目を読み込んで、analog が認識可能なログファイルかどうか識別を試みます。通常識別することが出来るのは common 形式、NCSA combined 形式、referrer ログ、browser ログ、W3 拡張フォーマット形式、Microsoft IIS 形式、WebSite? 形式、MacHTTP 形式のログ群です。フォーマットの例:#formatsについてはセクションの最後で説明します。デバッグ機能?を有効にしていると、analog がログを実際どのように認識しているか報告してくれます。 もしも解析したいログファイルが標準的なものでなくても大丈夫です。LOGFORMAT コマンドを使ってログフォーマットの書式を analog で識別できるようになります。詳しいことについては次のセクションで述べます。とはいえ、analog は標準的な形式の大部分を認識できますので、特にログフォーマットの書式について知っておく必用はないでしょう。一番良いのは指定されたログファイルが analog から問題なく認識される事です。正しく認識されるためには、必要に応じて LOGFORMAT 行を書き加える必用があります。 analog が指定したログファイルを認識できない場合、analog はログ形式を認識できないと警告を出します。もしかするとログファイル中のどこかの行が壊れているのかもしれません。以下に考えられ得る理由を述べます:
ログファイルにどのような問題があるか分からない場合は、デバッグ機能?を有効にして、ログの中の行に壊れたものがないか調べてみてください。 LOGFORMAT にはログファイル名に続いて記述できる2つめの引数があります。バーチャルホスト上で複数のログファイルを管理している時に役立つでしょう。たとえば、各サーバ毎のログファイル名が同一の場合です。以下のように記述します。 LOGFILE mydomain.log http://www.mydomain.com "ログファイル名"の"mydomain.log"にある "/file.html" が、"ドメイン名"で指定された"http://www.mydomain.com/file.html"であると認識されます(ログファイルが1つのサーバのものだけではなく、複数のサーバにわたっている場合で、出力する URL がそれぞれ異なる場合 BASEURL? コマンドによって基準となる URL を明示することが出来ます)。 実際にどのようなファイル名として認識させるかという点については、FILEINCLUDE?・FILEEXCLUDE?・FILEALIAS?の各コマンドによって、どのような働きをするのか参照しておいてください。 LOGFILE コマンドでは複数のバーチャルホストから得られるログを、特にバーチャルホスト毎に情報を定義しなくとも1つにまとめる事ができます。バーチャルホスト名はファイル名毎に区切ります。そうする事で、ディレクトリレポートの様に表示させることが出来ます(どちらかといえば SUBDIR? コマンドを使った方が良いでしょう)。 各ログファイル名の中にバーチャルホスト名の情報を入れる場合は、引数を %v として各ログファイルの情報に加えておくと、analog 側でバーチャルホスト名だと認識させることができます。もし %v があったとしても、ログファイルの中にバーチャルドメインの情報がなければ、不正な行があるとして、 analog 側からは認識できなくなります。 ログファイルを圧縮することはディスクの空き容量を確保するために都合の良い方法です。analog は自動的に gzip・zip・bzip2 で圧縮されたログファイルを読み込みます。ですが、ファイルを圧縮するために特定のコマンドを使う必用があれば、UNCOMPRESS コマンドをつかって、どのようにしてファイルを展開するか analog に指示する必用があります。 通常 UNCOMPRESS では(ファイルに出力するのではなく)標準出力でファイルを展開するようにコマンド名を記述します。ファイルの種類(拡張し)は , 区切りで複数指定できます。Unix 系システムでは以下のような指定を行いいます。 UNCOMPRESS *.Z "/usr/bin/uncompress -c" Windows NT 系統のシステムでは次のような記述になるでしょう。 UNCOMPRESS *.Z ("c:\Program Files\uncompress\uncompress" -c) analog が解析時にログファイルを展開することが出来ない場合 "broken pipe"(パイプが壊れていて情報を渡せません)といったエラーが出る場合もあります。ですが、通常の圧縮されていないログファイルの解析時に表示されるものであれば、エラーについて何ら心配する必用はありません。気にしないでください。(ヒント:UNCOMPRESS コマンドを使うことがあっても DNS の名前解決など、analog の解析に対しては何ら影響はありません) ログファイルの形式について †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 は両方の形式を認識(同じフォーマットとして)できますが、ファイルの途中で形式に変更が加えられていると、analog は以降の行を認識できなくなります。 NCSA referrer ログ形式は以下のようなものです。 [25/Dec/1998:17:45:35] http://www.site.com/ -> /~sret1/ 同様に browser (ブラウザ)あるいは agent(エージェント)形式は以下の通りです。 [25/Dec/1998:17:45:35] Mozilla/2.0 (X11; I; HP-UX A.09.05) referrer 形式のログでは日付が省略される場合があります(Apache は省略しています)。 NCSA combined 形式のログは common 形式のログに referrer と browser 情報を " 記号でファイル末尾に付加したものです。 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)" (表示の都合上2行に渡ってますが、実際は1行です。) LogFormat "%h %l %u %t \"%r\" %s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined ログ形式は複数のログを1まとめにしており無駄がありません。とても扱いやすいログ形式と言えるでしょう。 Microsoft IIS ログファイル形式は次のようなものです 192.64.25.41, -, 25/12/98, 17:45:35, W3SVC1, HOST1, 192.16.225.10, 2178, 303, 1243, 200, 0, GET, /~sret1/, -, (表示の都合上2行に渡ってますが、実際は1行です。"年"は4桁の場合もあります) ログフォーマットの書式にはマイクロソフト社といったサード・パーティが独自に使用している borser ログや referrer ログがあります。ですが、analog はそのままのログを自動認識することはできません。独自に用いられている形式を 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 (表示の都合上2行に渡ってますが、実際は1行です。) MacHTTP フォーマットは次のようなものです。 12/25/98 17:45:35 OK jay.bird.com /~sret1/ 1243 各項目はタブによって区切られています。 W3C拡張フォーマット(W3拡張ログ形式)である Netscape ログや WebSTAR ログは analog は識別することができません。これは、analog が必ずログファイルの1行目で、どのようなログ形式が必ず識別させなくてはいけないからです(ログ保存形式を変更している場合は対応できます)。もしヘッダ行(1行目の事です)が不適切であれば、analog は2行目以降も認識することができず、結果としてログファイルを認識出来なくなってしまいます。このような場合は、欠けているヘッダ情報を補うため、自分で LOGFORMAT コマンドを使って analog に情報を伝える必用があるでしょう。 通常、analog がログ形式(ヘッダ情報)を認識出来ない場合、なぜ認識できなかったのか、結果を画面上に表示します。一番多く考えられる原因は日時が正しく識別できない事による事です。とりわけログファイルの先頭に日付がくるのは一般的ではありません。ログのどこに日時情報があるのか、analog に識別させなくてはいけません。とはいえ、標準で マイクロソフト社のサーバで用いられている拡張ログ形式は識別できます。ですが、日付の形式がログファイルの途中で変わってしまうと、認識できなくなってしまうのでご注意下さい。つまり、日付情報が不適切なため、analog が日時を誤って認識したり、まったく読み込むことが出来ないという問題が起こりうるのです。 これは analog が正確にログファイルを認識することができるように、ログファイルは必ず日時含む情報を1行づつ持っていなくてはいけな事を意味しています。これは各種の補助アプリケーション?に於いても同様に日付の問題があります。もし上記で指摘したようなプログラムの特殊なログ形式を使って、既にログを記録している場合、ログ形式の変更を望まないかもしれません。ですが、日付が固定されてしまうという問題がありますので、将来に備え、このままにしておくよりも、この機会にログの保存形式について検討されたほうが望ましいでしょう。 拡張されたログ形式については http://www.w3.org/TR/WD-logfile.html に於いて説明がなされています。ヘッダとは以下のようなものです。 #Fields: date time cs-uri ログファイルについて追記しておくと、各項目はスペースかタブで区切られている必用があります。注意頂きたいのはログファイルには必ずすべての行の中に日時情報を含む必用があるという事です。詳しくは上記?(>#dateonly)をご覧下さい。 拡張されたログについて追記しておくと、マイクロソフト社のログについての読み込み問題があります。残念ながら W3C の仕様に従わなかったため、クォート記号で囲まれたブラウザと参照元のログが特殊な状態になっています。ブラウザと参照元の情報の間に +s という記号が入り込んでいる事と、秒数の中にミリ秒までも含んでいる事です。WebSTARS 製品についても問題があり、CS-HOST フィールドにクライアントのホスト名とサーバのホスト名が併記されています。とはいえ、analog はこれらの問題に対しても自動で認識・識別しますので、ほとんど問題ないでしょう。 ログファイルは GMT (世界標準時)で記録されている場合もあるでしょう。もし該当地域のローカルな時刻に修正したい場合は [[LOGTIMEOFFSET>analog/6.0/doc/analog/出力形式#TIMEOFFSET]](>#TIMEOFFSET) で調整することができます。 WebSTAR 形式については http://www.starnine.com/webstar/docs/ws4manual.3f.html で記述されています。ヘッダ行は次の通りです。 !!LOG_FORMAT DATE TIME RESULT URL BYTES_SENT HOSTNAME ログファイルについて追記しておくと、各項目はスペースかタブで区切られている必用があります。また WebSTAR は時刻の記録を GMT で行います。必要に応じてLOGTIMEOFFSET(>#TIMEOFFSET) で調整して自分の地域の時間帯に調整する必用もあるでしょう。Mac サーバでは WebSTAR のような形式のログですが、analog はいずれも識別可能です。 最後に、Netscape 形式のヘッダは以下のようなものです。 format=%Ses->client.ip% [%SYSDATE%] "%Req->reqpb.clf-request%" %Req->srvhdrs.clf-status% %Req->srvhdrs.content-length% |