[ トップ | | 一つ前 | | 目次 | 索引 ]

Analog 4.16: キャッシュファイル


analogは キャッシュファイル にログファイル中の いくつか のデータを保管する能力があります。従って、そのログファイルは重要なデータを失うことなく破棄することができます。(これはしばしば、増分処理 として知られています。)

大部分の人には、キャッシュファイルは必要ないでしょう。gzip の様な標準圧縮ソフトを使用してログファイルを圧縮することで十分でしょう。ログファイルの圧縮は、非常に多くの文字列の繰り返しにとても効果的です。私は、実際に約12倍の圧縮率を得ました。これは、多くの情報を失うことなく、あなたのファイルスぺースの問題を解決するでしょう。

キャッシュファイルは、またデータの事後処理や、スプレッドシートに読み込むのに、最適な書式ではありません。この目的のためには、コンピュータが読み込み可能な出力 を使うべきです。

多くの人がキャッシュファイルの使用の際に問題が起きており、壊れたデータを偶然記録している結果になっている。ログファイルを捨てる前に、あなたが何をしているのかを理解する必要があります。以下の 処理 についての議論を参照せよ。

もしこの先キャッシュファイルを使うなら、何が記録され、何が記録されないかを理解しておくことはまたとても重要です。要約すると、FROMTO を含んだ全ての INCLUDEEXCLUDE コマンド、それに全ての ALIASLOGTIMEOFFSET は、後でキャッシュファイルを読むときではなく、ファイル作成時に適用され なければならない。もし異なるオプションの組が欲しいときには、同じログファイルから幾つかのキャッシュファイルを作成しなければならない。

その理由は、キャッシュファイルからログファイル中の全てを復元することは 不可能 だからです。キャッシュファイルは、各ホストと各ファイルへの総リクエスト数についての情報を含みますが、例えば、どのファイルがどのホストによって読み込まれたかについての情報は含みません。(これを再現するためには、キャッシュファイルの大きさは、圧縮ログファイルと同じディスクスペースが必要になるでしょう。)従って、後に1つのファイルだけを見て、どのホストがそのファイルを読んだかを知ることはできません。

別の見方をすると、キャッシュファイルを読み込むとき、例えば HOSTEXCLUDE を行なうとすると、本当の意味での HOSTEXCLUDE を行なってはいない。なぜなら、そのホストが読むファイルは、まだ含まれているからである。ホストレポート、組織レポート、そしてドメインレポートからそれらのホストを除外しているだけである。これが、キャッシュファイルを作成するときに、なぜ全ての包含と除外をしなければならないかの理由である。

analog がキャッシュファイルを作成するとき、項目に対してこれ以上の別称(エイリアス)を適用しない。これは、2重のエイリアスを避けるためである。そのため、キャッシュファイルを作成するときに、望みの全てのエイリアスを行なわなければならない。同様に、2重の「時間差」を避けるため、LOGTIMEOFFSET 変数に従わない。そのため、どのオフセットもまたキャッシュファイル作成時に適用しなければならない。

その他のあまり重要でない幾つかの事柄。(1)時間に関する失敗したリクエストとリダイレクトされたリクエストの型は、キャッシュファイルに記録されません。そのため、総数が依然として正しいのにもかかわらず、もしレポートの"最後の7日間"がキャッシュファイルの記録期間と重なっていると、必然的に最後の7日間の総計は低く見積もられてしまいます。(2)時間は、5分間隔でのみ記録されます。


キャッシュが保存されるべきファイルを、CACHEOUTFILE で指定することで、キャッシュファイルを作ることができる。以下の設定、
CACHEOUTFILE none
により、キャッシュを保存しなくなります。あなたが、OUTPUT NONE を指定しない限り、キャッシュの出力と同時に通常の出力も得られます。上書きを避けるため、CACHEOUTFILE を既にあるファイル名に設定してはいけません。(以下のことには責任を持てません:ある幾つかのシステムでは、競合条件により、しばしばこの別設定が効かない可能性があります。また他のシステムでは、書き込み可だが読み込み可ではないときは、上書き可になる可能性があります。)OUTFILE について以前述べられたと同じように、日付を CACHEOUTFILE のファイル名に含めることができます。

CACHEFILE を使うかあるいは +U コマンドラインのオプションを使えば、以前に作成されたキャッシュファイルを読み込むことができる。LOGFILE コマンドの時と同様に、コンマとワイルドカードを使い数個のキャッシュファイルを読み込むことができ、UNCOMPRESS コマンドの仕組みを使えば、圧縮されたキャッシュファイルを読むこともできる。キャッシュファイルもログファイルも読み込みたくない時には、あからさまに LOGFILEnone に設定しなければいけないことに注意してください。

時には、キャッシュファイルに全ての項目を記録したくないことがあると思います。例えば、あなたの Web サイトにどのホストがアクセスしたなど構わないで、各ファイルが何回リクエストされたかのみを記録したいかもしれない。1つの項目を含めないためには、それに対応する LOWMEM コマンドを 3 に設定すれば良い。例えば、以下の様に

HOSTLOWMEM 3
とすれば、キャッシュファイルからホスト名を除外することができます。これは重大な操作なので、この設定をすると analog は注意メッセージを出します。もしどのファイルがリクエストされたかも知る必要も無く、経過時間に対するリクエストの模様のみを記録したい時には、すべての6個の LOWMEM コマンドを 3 に設定することもできます。

手続き

多くの人は、キャッシュファイルを使おうとして問題を起こしており、データを失ったり2重勘定をしたりしている。各データが正確に1個のキャッシュファイルに記録されているかどうかに注意を払わなくてはいけない。非常によく犯す間違いに、新しいキャッシュファイルを作成するときに、古いキャッシュファイルを使ってしまうことがある。新しいキャッシュファイルを作るとき、1つのデータが全てのキャッシュファイルに含まれているため、そのデータを何度も記録してしまうことが起きる。もし、キャッシュファイルを作成するとき、analog が”2重勘定”の警告を出したときは、多分あなたはこの種の間違いを犯しているはずである。

キャッシュファイルを正しく取り扱う一つの方法がある。正しいばかりではなく、考え方としても最も簡単である。アイデアは、新しいログを取るときには、古いログファイルからキャッシュファイルを作成することである。そのため、各キャッシュファイルは、たった一つのログファイルから全てのデータを含むことになる。新しいキャッシュファイルを作成するのに、古いキャッシュファイルは使用してはいけない。従って、CACHEFILECACHEOUTFILE コマンドは、同じ環境設定ファイル中には設定されない。

以下に手続きを述べる。

  1. ログを更新します。すなわち、古いログファイルを保管し、新規のログファイルで サーバを再起動します。(これを行なってくれる幾つかの標準のツールがあります。 あるいは、サーバのマニュアルを参照してください。)
  2. 古いログファイルからキャッシュファイルと通常のレポートを作成する。これを 同時に行なうためには、1つの LOGFILE、1つの OUTFILE、 それに1つの CACHEOUTFILE コマンドを使っできる。
  3. キャッシュファイルからテストレポートを作成し(CACHEFILEOUTFILE と "LOGFILE none" を使う)、そして ログファイルからのレポートと比較して、キャッシュファイルが動作してるか どうかを試してみよう。(このステップは、実際やる価値がある。)
  4. もしログファイルを削除することで何のデータを失うかがよく分かっていれば、 ここで、古いログファイルを削除できます。(しかし何かまずいことが起きても、 私は何の責任も負えないことを思い出してください。 ライセンス を読んでください。)
  5. 主要レポートを作成したいときは、全てのキャッシュファイルと現在の (まだキャッシュされていない)ログファイルを使うことが出来る。
上記で説明されたように、FROMTO を含んだ全ての INCLUDEEXCLUDE コマンド、それに全ての ALIASLOGTIMEOFFSET は、後でキャッシュファイルを読むときではなく、ファイル作成時に適用されなければならない。異なるオプションをもったログファイルから、幾つかのキャッシュファイルを作成することが出来る。もちろんこの場合には、異なるオプションを持ったキャッシュファイルを混在させないようにしてはならない。
analogホームページ

Stephen Turner
2001年2月13日

analogについての質問はanalog-helpメーリングリストをお使い下さい

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