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

Analog 5.91beta1: キャッシュファイル


Analog には、ログファイル中の情報の あるものキャッシュファイルに格納することで、ログファイルを破棄しても、重要な情報が失われるのを防ぐ機能があります。(This is sometimes known as incremental processing.)

ほとんどの人にとって、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 コマンドを記述することで、キャッシュを保存するファイルを指定することができます。
CACHEOUTFILE none
と記述することで、キャッシュファイルは無効になります。なお、OUTPUT NONEを記述しない限り、キャッシュファイルの出力と同時に通常の出力も行なわれます。上書きを避けるために、CACHEOUTFILE にすでに存在するファイル名を記述しないようにしてください。 (Disclaimer: 幾つかのシステムでは、競合条件によりこのチェックが無効になる場合が稀にあります。またシステムによっては、ファイルが書き込み可能で読み込み不可能な場合も上書きが許可されてしまいます) LOGFILEOUTFILE の項で すでに説明した のと同じように、日付を CACHEFILECACHEOUTFILE のファイル名に含めることができます。

CACHEFILE コマンドを使うか +U コマンドラインオプションを使うことで、以前に作成されたキャッシュファイルを読み込むことができます。このコマンドでは、LOGFILE コマンドと同様に、コンマとワイルドカードにより複数のキャッシュファイルを読み込むことができます。また UNCOMPRESS コマンドの機能により、圧縮されたキャッシュファイルを読むこともできます。

CACHEFILECACHEOUTFILE コマンドで指定されたファイル名にディレクトリ名が含まれていない場合、 Analog は、特定の場所 (この場所はコンパイル時に決められます) にあるキャッシュファイルを読み書きしようとします。 例えば、 Windows 版の場合、これは Analog の実行ファイルと同じフォルダになります。ただし、コマンドラインで +U オプションにより指定されたログファイル名について、これはカレントディレクトリになります。

複数の CACHEFILELOGFILE を組み合わせてレポートを作成することも可能です(便利です)。LOGFILECACHEFILE コマンドの指定は、基本的に累積されていきます。 ただし、コンパイル時のデフォルト設定は、デフォルト設定ファイル、もしくはそのファイル内で読み込まれた設定ファイルで記述されたコマンドの記述によって上書きされます。これらの設定は、コマンドラインで直接、あるいはコマンドラインで指定された設定ファイル中で指定された設定ファイルによって上書きされます。また、それらの設定は、強制設定ファイル、もしくはそのファイル内で読み込まれた設定ファイルで指定されたコマンドの記述によって上書きされます。通常この仕様に悩む必要はないでしょう。一般的に期待されるような動きをしていると思います。

キャッシュファイルにすべての項目を記録したくないこともあると思います。 例えば、各ファイルに対するリクエスト数は記録したいが、Web サイトにどのホストがアクセスしたかは記録不要であるといった場合です。 ある項目をキャッシュファイルに含めないようにするには、対応する LOWMEM コマンドを 3 に設定してください。例えば、以下のように

HOSTLOWMEM 3
記述することで、キャッシュファイルからホストに関する情報を除外することができます。これは注意が必要な操作なので、Analog は警告メッセージを出力します。どのファイルがリクエストされたかを知る必要がなく、時間単位でのリクエストの状況だけを把握したいという場合は、6個すべての LOWMEM 系コマンドを 3 に設定しても構いません。

手順

多くの人が、キャッシュファイルを使おうとしてトラブルに見舞われていて、必要なデータを失ったり、二重のカウントをしたりしています。各データを1つのキャッシュファイルにのみ記録するように気をつけてください。よくある間違いに、新しいキャッシュファイルを作成する際に、すべての古いキャッシュファイルを使ってしまうことが挙げられます。この場合、各キャッシュファイルに同じデータが含まれていると、新しいキャッシュファイルには同じデータが複数回記録されてしまうことになります。キャッシュファイルを作成する際に、Analog が「二重カウント」の警告を出力した際には、おそらくこれと同様のことを行なっていると思います。

キャッシュファイルを適切に扱う方法を一つ提案します。それが唯一の方法ではありませんが、考え方として最も単純ではないかと考えています。提案は、新しいログファイルへログ出力を切替える際に、古いログファイルからキャッシュファイルを作成するというものです。これにより、各キャッシュファイルには、一つのログファイルからのデータだけが記録されることになります。新しいキャッシュファイルを作成する際に古いキャッシュファイルは一切使いません。これにより、同じ設定ファイル中に CACHEFILE コマンドと CACHEOUTFILE コマンドを両方記述することもあり得なくなります。

以下にその手順を説明します。

  1. ログのローテーションを行ないます: つまり古いログファイルを保存してから、新しいログファイルに出力を行なわせるためにサーバを再起動します(訳注: UNIXのプロセスの場合、通常はサーバのプロセスに対して HUP シグナルを送ることでこの処理が行なわれます)。(この作業を行なうための標準的なツールが何種類かあります: サーバのドキュメントを参照してください)
  2. 古いログファイルからキャッシュファイルと通常のレポートを作成します。LOGFILE コマンド、 OUTFILE コマンド、CACHEOUTFILE コマンドを使うことで、この作業を同時に行なえます。
  3. キャッシュファイルからテストのレポートを(CACHEFILEOUTFILEを使って、LOGFILEは使わずに)作成して、先ほどログファイルから直接生成したレポートと比較して問題がないことを確認します (この作業は行なっておくことを強く勧めます)。
  4. ログファイルを消去することで、どのような情報が失われるのか理解しているのであれば、この時点でログファイルを消去できます。(ただし、何か問題が発生しても、何の責任も負えないことを忘れないでください: これについては ライセンス を参照してください)
  5. すべてのキャッシュファイルと現在の(キャッシュされていない)ログファイルを使うことで、主なレポートについては生成することができます。
すでに説明したように、FROM および TOコマンドを含む、すべての INCLUDE および EXCLUDE 系コマンド、ALIAS 系コマンド、LOGTIMEOFFSETコマンドは、キャッシュファイルの読み込み時ではなく、作成時にのみ適用する必要があります。そのため、各ログファイルから、これらの設定を変更した複数のキャッシュファイルを作成する必要があるかも知れません。もちろん、その場合は、異なる設定で生成したキャッシュファイルが混在しないようにする必要があります。
Analog のホームページ

Stephen Turner
23 August 2003

Analog についての質問はanalog-help メーリングリスト をお使いください。 (訳注: 日本では analog-jp メーリングリスト をご利用ください)

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