Analog 5.91beta1: キャッシュファイルほとんどの人にとって、gzip のような標準的な圧縮ユーティリティを使ってログファイルを圧縮すれば充分で、キャッシュファイルは必要でないでしょう。 ログファイルは、同じ文字列の繰り返しですので、圧縮が非常に有効です。実際に、12倍の圧縮率を実現できています。これで、情報を全く失わずに、ファイル容量の問題が解決できます。
キャッシュファイルは、データの後処理を行なったり、表計算プログラムで読み込んだりするのに適した形式でもありません。この目的のためには、コンピュータ用の出力形式 を使ってください。
多くの人がキャッシュファイルの使用で問題を抱えていて、 Many people have trouble using the cache file, and end up accidentally recording corrupt data. ログファイルを破棄する前に、これから行なうことを必ず理解しておいてください。後述する 手順 についての説明を参照してください。
キャッシュファイルの機能を使おうとする場合は、キャッシュファイルに何が記録されて何が記録されないかについて理解しておくことが非常に重要です。FROM および TOコマンドを含む、すべての INCLUDE および EXCLUDE 系コマンド、ALIAS 系コマンド、LOGTIMEOFFSETコマンドは、キャッシュファイルの読み込み時ではなく、作成時に のみ 適用されます。そのため、これらの設定を変更したい場合は、同じログファイルから、設定毎にキャッシュファイルを作成することが必要です。
その理由は、キャッシュファイルからログファイル中の全てを復元することが 不可能 だからです。キャッシュファイルには、ホスト単位およびファイル単位での総リクエスト数の情報が含まれますが、例えば、どのファイルがどのホストによって読み込まれたかについての情報は含まれません。(この情報を再現しようとすると、キャッシュファイルの大きさとして、圧縮ログファイルと同じディスク容量が必要になってしまうでしょう。) 従って、あるファイルについて、どのホストがそのファイルを読み込んだかを後で確認するといったことはできません。
別の見方をすると、例えばキャッシュファイルを読み込む時に HOSTEXCLUDEを行なっても、そのホストが読み込んだファイルの情報が残ってしまうため、本当の意味でのHOSTEXCLUDEを行なったことにはならないということです。つまり、ホストレポート、組織レポート、ドメインレポートからそのホストを除外しているだけになります。こうした理由のため、キャッシュファイルを作成する時点で、すべての包含と除外を行なっておくことが必要になります。
Analog がキャッシュファイルを作成するとき、項目に対して再度のエイリアスの適用は行ないません。これは、2重のエイリアス適用を避けるためです。そのため、キャッシュファイルを作成する時点で、すべてのエイリアスの適用を行なっておくことが必要になります。同様に、2重の時刻調整を避けるため、LOGTIMEOFFSET 変数の値も無視されます。そのため、キャッシュファイルを作成する時点で、時刻調整を行なっていくことも必要になります。
また、キャッシュファイルには最近7日間の各項目のリクエスト数のデータは含まれません。そもそも、レポートが作成される時点でこの数値は異なってしまうため、含めることは不可能です。
なお時刻は5分単位で記録されます。
CACHEOUTFILE noneと記述することで、キャッシュファイルは無効になります。なお、OUTPUT NONEを記述しない限り、キャッシュファイルの出力と同時に通常の出力も行なわれます。上書きを避けるために、CACHEOUTFILE にすでに存在するファイル名を記述しないようにしてください。 (Disclaimer: 幾つかのシステムでは、競合条件によりこのチェックが無効になる場合が稀にあります。またシステムによっては、ファイルが書き込み可能で読み込み不可能な場合も上書きが許可されてしまいます) LOGFILE や OUTFILE の項で すでに説明した のと同じように、日付を CACHEFILE や CACHEOUTFILE のファイル名に含めることができます。
CACHEFILE コマンドを使うか +U コマンドラインオプションを使うことで、以前に作成されたキャッシュファイルを読み込むことができます。このコマンドでは、LOGFILE コマンドと同様に、コンマとワイルドカードにより複数のキャッシュファイルを読み込むことができます。また UNCOMPRESS コマンドの機能により、圧縮されたキャッシュファイルを読むこともできます。
CACHEFILE や CACHEOUTFILE コマンドで指定されたファイル名にディレクトリ名が含まれていない場合、 Analog は、特定の場所 (この場所はコンパイル時に決められます) にあるキャッシュファイルを読み書きしようとします。 例えば、 Windows 版の場合、これは Analog の実行ファイルと同じフォルダになります。ただし、コマンドラインで +U オプションにより指定されたログファイル名について、これはカレントディレクトリになります。
複数の CACHEFILE と LOGFILE を組み合わせてレポートを作成することも可能です(便利です)。LOGFILE と CACHEFILE コマンドの指定は、基本的に累積されていきます。 ただし、コンパイル時のデフォルト設定は、デフォルト設定ファイル、もしくはそのファイル内で読み込まれた設定ファイルで記述されたコマンドの記述によって上書きされます。これらの設定は、コマンドラインで直接、あるいはコマンドラインで指定された設定ファイル中で指定された設定ファイルによって上書きされます。また、それらの設定は、強制設定ファイル、もしくはそのファイル内で読み込まれた設定ファイルで指定されたコマンドの記述によって上書きされます。通常この仕様に悩む必要はないでしょう。一般的に期待されるような動きをしていると思います。
キャッシュファイルにすべての項目を記録したくないこともあると思います。 例えば、各ファイルに対するリクエスト数は記録したいが、Web サイトにどのホストがアクセスしたかは記録不要であるといった場合です。 ある項目をキャッシュファイルに含めないようにするには、対応する LOWMEM コマンドを 3 に設定してください。例えば、以下のように
HOSTLOWMEM 3記述することで、キャッシュファイルからホストに関する情報を除外することができます。これは注意が必要な操作なので、Analog は警告メッセージを出力します。どのファイルがリクエストされたかを知る必要がなく、時間単位でのリクエストの状況だけを把握したいという場合は、6個すべての LOWMEM 系コマンドを 3 に設定しても構いません。
キャッシュファイルを適切に扱う方法を一つ提案します。それが唯一の方法ではありませんが、考え方として最も単純ではないかと考えています。提案は、新しいログファイルへログ出力を切替える際に、古いログファイルからキャッシュファイルを作成するというものです。これにより、各キャッシュファイルには、一つのログファイルからのデータだけが記録されることになります。新しいキャッシュファイルを作成する際に古いキャッシュファイルは一切使いません。これにより、同じ設定ファイル中に CACHEFILE コマンドと CACHEOUTFILE コマンドを両方記述することもあり得なくなります。
以下にその手順を説明します。
Stephen Turner
Analog についての質問はanalog-help メーリングリスト をお使いください。 (訳注: 日本では analog-jp メーリングリスト をご利用ください)