【Squid FAQ】 最終更新日:2005年11月1日

D-netプランページへ】【Squid Homeへ】 【FAQトップへ】

6. Squidのログファイル

squidのログは、動作状況の貴重な情報源です。 アクセス記録以外にもシステムエラーやリソースに関する情報なども記録されます。 
Squidのログ解析に関しては最初にこちらを読んで頂いた方が良いかもしれません。

6.1 squid.out

もしSquidをRunCacheスクリプトから起動すると、Squidの実行状況がここに記録されます。 もし、SquidがエラーとなってRunCacheによって再起動された場合にはその痕跡が残ります。

6.2 cache.log

cache.logはSquidによって生成され、エラーやデバックメッセージが記録されます。 もしRunCacheスクリプトか-sオプションを付けてSquidを起動したなら、syslogの情報も記録されることでしょう。syslogとして何が出力されるかは

6.3 store.log

store.logには、キャッシュに記録されたもしくは削除されたオブジェクトの記録が残ります。 また、どんな情報にどれだけアクセスされたのかの調査にも利用できます。

このログファイルの記録内容は、1行で1エントリを表し、1行はスペースでセパレートされた11項目であらわされます。 11項目はsec/store_log.cの中の storeLog() 関数で定義されています。内容は

"%9d.%03d %-7s %08X %4d %9d %9d %9d %s %d/%d %s %s\n"
となっており順に、

6.4 hierarchy.log

これはsquid1.0だけのためにあるログファイルです。フォーマットは
[date] URL peerstatus peerhost
となっています。

6.5 access.log

殆どのアクセス解析プログラムは、access.logを調べることで可能です。squidではaccess.logとして2つの形式をサポートしています。1つは"emulate_httpd_log "オプションを使うことでhttpd互換(CERN web daemon互換:common log file format(CLF)と言います)のフォーマットを、もうひとつはsquid本来のログ形式をサポートしています。
common log fileフォーマットは、squid本来のlogフォーマットに比べ多くの情報を持ち、かつ、ログファイルとしては小さくなります。 squid本来のログには管理者のためにキャッシュ評価に関する情報が多く含まれます。

common log fileのフォーマット

common log fileフォーマットは多くのhttpサーバで利用されています。 このファイルは7のフィールドによって構成されます。
remotehost rfc931 authuser [date] "method URL" status bytes

common log fileのフォーマットは多様なツールで利用できます。 またこのフォーマットには、HTTPのバージョンのようにsquid本来のログと異なる情報を含みます。 

squid本来のlogフォーマット(ネイティブフォーマット)

squid本来のlogフォーマットはsquidのバージョンによって形式が異なります。squid1.0では、
time elapsed remotehost code/status/peerstatus bytes method URL
squid1.1からは、階層に関する情報がhierarchy.logからaccess.logに移されました。結果ログの形式は、
time elapsed remotehost code/status bytes method URL rfc931 peerstatus/peerhost type
squid2.0では、同じ形式を使っています。
CLFとsquid独自のログの違いは、リクエスト継続時間・タイムアウト情報・上流サーバアドレス・コンテンツタイプなどです。
squid2common.pl はCERN プロキシ形式のログフォーマットへの変換ツールです。この形式にすることで、多くの分析ツールの利用が可能になります。

access.logネイティブフォーマットの細部

squidのネイティブログを利用することで、多くの情報を解析できることでしょう。ネイティブフォーマットは次のような構成になっています。
"%9d.%03d %6d %s %s/%03d %d %s %s %s %s%s/%s %s"
これは順に、
#! /usr/bin/perl -p
s/^\d+\.\d+/localtime $&/e;
上記のスクリプト適当な名前で作成して、chmodで実行属性を付けた後、squidのログを標準入力で与えて実行させればログの時間が変換されます。
これらがログに記録されるのは応答が終了してからという点に注意してください。

6.6 useragent.log

ユーザエージェントログは、維持されているだけのファイルです。 
  1. コンパイル時に--enable-useragent-log オプションをつけてコンパルイルし、かつ、
  2. 設定ファイルで、"useragent_log"を使うように設定した時
のために用意されています。これによって、ユーザが利用しているブラウザのディストリビューション名を得ることができます。
このオプションはSquidの中に統合すべきではないアイデアかもしれない。

6.7 Squid result codes (リザルトコード)

HTTPへのリクエストはTCP_として、ICPへのリクエストにはUDP_として結果コードを記録します。ICPのログをとらないなら、設定ファイルで、log_icp_queriesを無効にしなさい。
以下のリザルトコードは、Squid-2でのものです。
以下のコードは、Squid-2でもはや利用できません:

6.8 HTTP status codes (ステータスコード)

Squid-2ではRFC2616の内、307(Temporary Redirect),416 (Request Range Not Satisfiable),417 (Expectation Failed)を除く殆どのコードが使われます。拡張用コードの0と600も無効なヘッダーやプロキシエラーの際に使います。またWebDAVの為のRFC2518のためのコードも返されます。 
000 Used mostly with UDP traffic.

100 Continue
101 Switching Protocols
*102 Processing

200 OK
201 Created
202 Accepted
203 Non-Authoritative Information
204 No Content
205 Reset Content
206 Partial Content
*207 Multi Status

300 Multiple Choices
301 Moved Permanently
302 Moved Temporarily
303 See Other
304 Not Modified
305 Use Proxy
[307 Temporary Redirect]

400 Bad Request
401 Unauthorized
402 Payment Required
403 Forbidden
404 Not Found
405 Method Not Allowed
406 Not Acceptable
407 Proxy Authentication Required
408 Request Timeout
409 Conflict
410 Gone
411 Length Required
412 Precondition Failed
413 Request Entity Too Large
414 Request URI Too Large
415 Unsupported Media Type
[416 Request Range Not Satisfiable]
[417 Expectation Failed]
*424 Locked
*424 Failed Dependency
*433 Unprocessable Entity

500 Internal Server Error
501 Not Implemented
502 Bad Gateway
503 Service Unavailable
504 Gateway Timeout
505 HTTP Version Not Supported
*507 Insufficient Storage

600 Squid header parsing error

6.9 Request methods (リクエストメソッド)

SquidはRFC2616で認められた幾つかのリクエストについて認めます。 Squid2.2-STABLE5以上では、WevDAVの拡張によるRFC2518の拡張も認めます。
method defined cachabil. meaning
------ ------ ------ -------------------------------------------
GET HTTP/0.9 possibly object retrieval and simple searches.
HEAD HTTP/1.0 possibly metadata retrieval.
POST HTTP/1.0 CC or Exp. submit data (to a program).
PUT HTTP/1.1 never upload data (e.g. to a file).
DELETE HTTP/1.1 never remove resource (e.g. file).
TRACE HTTP/1.1 never appl. layer trace of request route.
OPTIONS HTTP/1.1 never request available comm. options.
CONNECT HTTP/1.1r3 never tunnel SSL connection.

ICP_QUERY Squid never used for ICP based exchanges.
PURGE Squid never remove object from cache.

PROPFIND rfc2518 ? retrieve properties of an object.
PROPATCH rfc2518 ? change properties of an object.
MKCOL rfc2518 never create a new collection.
COPY rfc2518 never create a duplicate of src in dst.
MOVE rfc2518 never atomically move src to dst.
LOCK rfc2518 never lock an object against modifications.
UNLOCK rfc2518 never unlock an object.

6.10 Hierarchy Codes(階層コード)

Squid-2では以下の階層コードが使われます。
以下の階層コードはSquid-2からは除外されました。
code meaning
-------------------- -------------------------------------------------
PARENT_UDP_HIT_OBJ hit objects are not longer available.
SIBLING_UDP_HIT_OBJ hit objects are not longer available.
SSL_PARENT_MISS SSL can now be handled by squid.
FIREWALL_IP_DIRECT No special logging for hosts inside the firewall.
LOCAL_IP_DIRECT No special logging for local networks.

6.11 cache/log (Squid-1.x)

このファイルは不適切な名前を持っています。 これはswap logと呼ばれるべきものでディスクに書き込まれたオブジェクトの記録です。Squidのスタート時にリロードされます。もしSquidが動いていないときにこのファイルをリムーブすれば、キャッシュコンテンツの中をきれいにできます。Squidは新たにこのファイルを作り出します。 もっとも簡単な方法は、プロセスを次のように、
% squid -k shutdown
としてシャットダウンしてから、
% squid -k rotate
として、ログのローテーションをしてしまうと良いでしょう。Squid-1.1のログには6つの項目が記録されます。

6.12 swap.state (Squid-2.x)

Squid-2からは、スワップログファイルは swap.state と呼んでいます。これはMD5によるチェックサムを含むバイナリファイルです。ファイルと内容に関する詳しくは、プログラマーガイドをご覧ください。
Squidが動作中にもし、swap.stateファイルを削除したければ、Squidにログローテーションのシグナルを渡してください。
% squid -k rotate
この場合、Squidは終了前にswap.stateを書き直し、Squidを終了します。
Squidが起動していないときにswap.stateを削除する場合には、どんな情報もキャッシュから失うことはないでしょう。Squidはすべてのキャッシュディレクトリとスワップファイルを調べてキャッシュを再構築します。これはとても長い時間(我慢を)必要とする作業です。

6.13 どのようにすれば安全にログを削除できますか?

Squidが起動している最中は、決して access.log, store.log, cache.log, swap.stat を削除すべきではありません。UNIXではプロセスが実行中でオープンしているファイルでも削除できます。しかし、そのスペースはプログラムが終了してファイルをクローズするまで回収されません。swap.stateは先に説明の通り、削除しても再度構成することができますが、他のファイルは再構成はできません。
Squidの"rotate"機能を使って一日一回はログをローテションすると良いでしょう。 ログは拡張数(*.1,*,2のような)をつけて保存されます。ローテションは、swap.stateをクリーンにします。しかし、拡張数をつけて残すようにはなっていません。
ローテーションを行うコマンドは、
% squid -k rotate
です。たとえば、このコマンドをCRONを使い夜中に実行すると良いでしょう。
0 0 * * * /usr/local/squid/bin/squid -k rotate

6.14 どうすればログを行わないようにできますか?

access.logを無効にするには、設定ファイルで
cache_access_log /dev/null
とします。
store.logを無効にするには、
cache_store_log none
とします。
多くの重要な情報とデバックの際の情報となるため、cache.logを無効にするのは薦められません。 しかしどうしてもしたければ、
cache_log /dev/null
で無効にできます。

6.15 ログファイルがとても大きくなります。

cronの機能を使って、ログをローテションすれば良いでしょう。
例:
0 0 * * * /usr/local/squid/bin/squid -k rotate

6.17 ログファイルの管理

分析の有効なファイルは、access.logです。評価を長期間行うためには、適宜、ログをローテーションしていくと良いでしょう。 Squidには、ローテションのためのAPIが組み込まれており、実行中であっても混乱させることなくログをローテーションできます。
ログファイルの為のディスクスペースを確保して、cronによって例えば、24や12や8時間ごとにローテーションして行くことが望ましいです。
ログファイルは、余裕のある時間帯に圧縮することもできます。log_icp_queriesなどを有効にしていると一日で役1GBのログを生成してしまうかも知れません。
ログの管理にあたり、EUのDESIREプロジェクトでは、ログの管理についての基本ルールを策定しました。
  1. 公表にあたってはクライアントのプライバシーを保つ。
  2. 解析が終わっても、ログは長い時間保存してください。 殆どの国ではプライバシーに関する法律によって多くの時間、記録を保存していくことが求められます。
  3. 少なくとも一日一回はログをローテーションすべきです。そのままにしておくとそれは大きなファイルになってしまいます。
  4. 容量を意識しておいてください。 ログの生成よりもログの処理のほうが余計に時間はかかります。

6.18 ERR_NO_CLIENTS_BIG_OBJ というメッセージがでます。

これは要求されたオブジェクトが"あとで削除する"といモードで転送中に、ユーザがアボートしたことを意味します。このようなモードででの転送は、

6.19 ERR_LIFETIME_EXP は何を意味しますか?

クライアントからの要求を転送中にタイムアウトが発生したことを意味しています。多くは検索に時間がかかったためにクライアントが要求をアボートした為でしょう。
D-netプランページへ】【Squid Homeへ】 【FAQトップへ】

Copyright© 1998-2003 ROBATA.ORG