作成日:2001年09月05日、更新日:2004年04月10日 作成:鷹の巣

WWWサーバーであるAN HTTPd および Apache でのログファイルの読み方について説明します。


WWWサーバーのHTTP ログファイルの読み方

私の使用しているWindows用のWWWサーバーAN HTTPdのログファイルの読み方を説明します。 このログファイルは、apache 互換のフォーマットで、記録されていますが、Referer page(アクセス元Webページ)やUser agent(ブラウザの種類等)は、別ファイルに記録されるようになっています。 (AN HTTPd の「オプション/一般(G)」設定の「ログ」タブで、ログフォーマットが「標準」に選択されていること) この記録形式は、フリーなログ解析ツールである日本 Analog ユーザ会さんのanalogWebLog公式ホームページさんの WebLog NCSA型式を使用して、ログ解析を行うことができます。 analog は、Windowsの場合、Microsoft Visual C++ 6.0でソースリストをコンパイルしなければならず、Windows専用のWebLog NCSA型式の場合は、 現状インストーラに問題があり、Windows 2000 Professionalの管理者権限でも環境によっては、インストールできません。

AWStatsでも設定ファイルawstats.confでLang="jp"とすれば、そこそこ日本語化され、使えるみたいです。このサイトのアクセス解析は、AWstatsによるアクセス解析結果をご参照願います。

エラーだけに限定したログファイルの読み方でしたら、いとのページさんのAN HTTPDエラーメッセージ集に記載されている内容を ご覧いただく方が良いのですが、ここでは、ログファイル全体の読み方について述べさせて頂きます。

記載内容の他に有用な情報をご存知の方または誤り等を見つけられた方は、恐れ入りますが、 「鷹の巣」の掲示板か「電子メール」にてご連絡をお願いします。

更新記録

1.正常なログファイルの実例

下表1は、正常なログファイルの例で、表1.1は、行番号1番の書式の説明を行っています。

- 表1 - 「鷹の巣」の自宅サーバーのホームページ(http://sakaguch.com/)の正常なログファイルの例
行番号 ログファイルの記録内容
1 *.*.*.net.or.jp - - [01/Sep/2001:00:14:25 +0900] "GET /backg157.jpg  HTTP/1.1200 3149
2 *.*.*.net.or.jp - - [01/Sep/2001:00:14:29 +0900] "GET /report/report.cgi?http://search.*.jp/bin/search?p=IP HTTP/1.1" 200 70
3 *.*.*.net.or.jp - - [01/Sep/2001:00:14:25 +0900] "GET /count/dayx.cgi?gif HTTP/1.1" 200 2564
4 *.*.*.net.or.jp - - [01/Sep/2001:00:14:25 +0900] "GET /count/dayx.cgi?today HTTP/1.1" 200 1019
5 *.*.*.net.or.jp - - [01/Sep/2001:00:14:25 +0900] "GET /count/dayx.cgi?yes HTTP/1.1" 200 987
6 *.*.*.net.or.jp - - [01/Sep/2001:00:14:24 +0900] "GET / HTTP/1.1" 200 42848
7 *.*.*.net.or.jp - - [01/Sep/2001:00:14:24 +0900] "GET /ts_bnr1.gif HTTP/1.1" 304 0

Apacheでログ形式をcombined log format (NCSA combined/XLF/ELF log format)に設定している場合は、Referer page(アクセス元Webページ)やUser agent(ブラウザの種類等)が一行に記入されます。

注) 行番号の説明

  1. ホームページ壁紙(backg157.jpg)の読み込みで、書式の各部は、下表のようになっています。
    - 表1.1 - 1行目の書式の説明
    記録内容 記録内容の説明
    *.*.*.net.or.jp アクセス元のIPアドレスまたはリモートホスト名(フルドメイン名)
    - アクセス元のユーザ名(クライアントがidentをサポートしていない場合は、「-」となります。)
    - アクセス元のユーザ名(ユーザ認証を行っていない場合は、「-」となります。)
    01/Sep/2001:00:14:25 +0900 アクセスの日付と時間と標準時よりの時間差で、左より日/月/年:時:分:秒 時間差の順。
    GET HTTPの命令(methods)GET=情報を得る。対象は、文書頭部(ヘッダ)と文書体部(ボディ)。 表3参照。
    /backg157.jpg 要求された情報のファイル名で、backg157.jpgは、ホームページ背景の壁紙。
    HTTP/1.1 ハイパーテキストトランスファプロトコル改版1.1を示す。
    200 状態番号(ステータスコード)200=正常終了。表5参照。
    3149 情報量(バイト)
     
  2. ホームページのアクセス解析のCGI実行結果の読み込み
  3. ホームページのアクセス総計数値表示用CGI実行結果の読み込み
  4. ホームページの今日のアクセス計数値表示用CGI実行結果の読み込み
  5. ホームページの昨日のアクセス計数値表示用CGI実行結果の読み込み
  6. ドキュメントルートのデフォルトインデックスファイル(index.html等)の読み込み、「/」だけでファイル名は、省略されています。
  7. ホームページの「鷹の巣」の自宅サーバーのバナー画像ファイル(ts_bnr1.gif)の読み込み 状態番号(ステータスコード)が304になって、情報量が0バイトになっているのは、前回、読み込んだ日付と時間からファイルが 変更されていないため、プロキシサーバやクライアント側のキャッシュから、ファイルを読み込み、オリジンサーバー (情報発信元のサーバーで、自宅サーバーの場合は、主としてWWWサーバーやFTPサーバー等)から読み込まなかったことを 示しています。

2.状態コード番号の300番代(表4参照)

300番代の状態コード番号(表4参照)は、別の追加動作が必要か別の追加動作を実行していることを表しています。

これらの状態は、要求情報の用途や状態により生じるうるものであり、自宅サーバーの範囲で言えば、WWWサーバーの不具合ではなく、 Webサイトの構成や構造により生じます。特に表5の「301」「302」の状態は、ホームページのURLやURIの移動や参照切れ(リンク切れ)を 表すものであり、Webサイトの構成や構造上に不具合があると言えます。

3.軽微なエラー

表4に示しますように、状態番号(ステータスコード)の最初に桁が4~5のエラーの場合、何らかの処置を行う必要があります。 この項では、軽微なエラーであるのに勘違いを起こしやすいものについて取り上げます。

下表2は、404エラー(ドキュメントがないか、読み込みができません。)等のログを調べた結果の一例で、 ワーム等の不正アクセスを除いています。

- 表2 - エラー行の抜粋
行番号 記録内容(先頭部分*.*.*.net.or.jp - - [dd/mm/yyyy:hh:mm:ss +0900] を省略) エラー内容の説明
1 "GET /favicon.ico HTTP/1.1" 404 XXX IE5.0以降のお気に入り用アイコン(シンボル)ファイルのfavicon.icoがない。
2 "GET /robots.txt HTTP/1.1" 404 XXX robotがロボットよけファイル(robots.txt)を読み込もうとした。

注) 行番号の説明の追記

  1. favicon.icoというファイルは、ホームページのURLが、ブラウザIE5.0以上の「お気に入り」に登録された場合に表示するアイコンで、 このアイコンを用意していないと404エラーが発生します。(中田さんに教えて頂きました。どうも有難うございました。) エラーの発生を防ぐには、「よろづ、ぢうごや」さんで適当なもの(ICON)を入手し、ドキュメントルートに入れておけばよいと考えます。 詳しくは、favicon.icoの正体?をご覧願います。「JP415022 - [IE5] お気に入りに表示されるアイコンをカスタマイズする」も参照。 また、逆に言えば、WWWサーバーに接続してきたブラウザがIE5.0以上で、このファイルをGETした場合は、ホームページが 「お気に入り」(ブックマーク)に登録されていることがわかります。

  2. robotがロボットよけファイルをファイルの存在を確認せずに読み込もうとして、発生するエラーです。 このことから、robots.txt をGET(ホームページの読み込み)するログとHEAD(ホームページ更新状況のチェック)するログは、 ほぼ収集ロボットと考えて良さそうです。robots.txt を確認せずにGETするようなマナーの悪いロボットも存在しますので、念のため。

    ロボットについては、あまり詳しく知らないのですが、「UserAgent - UserAgentのデータベースを作りましょう。」に収集ロボットの種類が記載されています。 古いデータですが、User-Agentについてのたわごとに収集ロボットの種類が記載されています。(このサイトは、hodogaya.org Web Pageさんより教えて頂きました。) 詳しくは、Googleで検索して下さい。

    主要検索エンジンのUserAgentは、「WEB雑記2 USER-AGENT(サイトを訪れるユーザーエージェントについて)」に記載されています。

4.不正なアクセス

表2に示しました様にrobotがロボットよけファイル(robots.txt)を読み込もうとして、404エラー(ドキュメントがないか、読み込みができません。) が発生した場合は、特に問題視する必要はありません。しかし、ドキュメントルートのインデックスファイルから、参照(リンク)されている ファイルやSSIファイルやCGIファイル以外にGET命令等が実行されて、404エラーになる場合は、「不正なアクセス」と言えます。 不正なアクセスを行う者は、貴方のWWWサーバーのディレクトリ構造がわからずに適当なディレクトリ名とファイル名を指定してアクセスして 来ますので多くの場合404エラー(要求されたファイルがない。)ということになります。 ただ、綴りの入力ミスや以前に使用していたファイル名で削除されたものは、「不正なアクセス」から除外して考える必要はあります。

不正アクセス例)

8000番台でWebサーバーを運用しているryujinさんのサイトでは、プロキシサーバーの不正利用を試みるため、Apacheのログファイルに 以下の様なログが記録されました。(プロキシサーバーを運用されていない為、Apacheのログファイルに記録された。) vvv.xxx.yyy.zzz - - [16/Mar/2002:19:51:54 +0900] "GEThttp://www.intel.com/HTTP/1.1" 200 8636 "-" "Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)" これは、不正利用者がブラウザIE4のプロキシサーバーの設定にryujinさんのサイトのIPアドレスと開放ポート番号を設定して、インテルに アクセスしたからです。(参考文献:掲示板 どうしてこんなログが残るのか? - ryujin 2002/03/18-03:16 No.1891

5.HTTPの命令(methods)

- 表3 - HTTPの命令(methods)
命令 説明 備考
GET 情報を得る。対象は、文書頭部(ヘッダ)と文書体部(ボディ)。 -
HEAD 情報を得る。対象は、文書頭部(ヘッダ)。 -
POST 情報を新しく作る。(サーバーのスクリプトへデータを送る) -
PUT 情報の蓄積を目的として新しく情報を作る。(サーバーへデータを送る) HTTP Ver.1.0ではオプション。
DELETE 情報を削除する。 HTTP Ver.1.0ではオプション。
TRACE 診断情報を返答する。(サーバーやプロキシの動作の診断) HTTP Ver.1.1より追加。
OPTIONS 使用できる命令(methods)やオプションの一覧を取得する HTTP Ver.1.1より追加。
CONNECT プロキシでのトンネリング接続を行う。 HTTP Ver.1.1より追加。
LINK 情報同士を関係付ける。 HTTP Ver.1.1では廃止。
UNLINK 情報同士の関係付けの解除。 HTTP Ver.1.1では廃止。

6.状態番号(ステータスコード)の区分

状態番号(ステータスコード)の最初に桁は、HTTPの応答の区分を定義しており、1~5の値がある。

- 表4 - 状態番号(ステータスコード)の区分とその説明
区分 comment 説明 エラー要因
1xx Informational  要求は、処理中。 (エラーではない。)
2xx Successful 要求は、正常終了。 (エラーではない。)
3xx Redirection 要求を完了するため、別の追加動作を行っている。 (エラーではない。)
4xx Client Error 間違った要求により、実行不能。 クライアント側に起因するエラー。
5xx Server Errors 要求を実行できなかった。 サーバー側に起因するエラー。

7.状態番号(ステータスコード)とその説明

- 表5 - 状態番号(ステータスコード)とその説明(コード番号が太字部分は、HTTP Ver.1.1で追加変更されています。)
コード comment 命令(methods) 要求されるメタ情報 解説
100 Continue - なし 要求は、受け付けたが、処理は続行中。
101 Switching Protocols - Upgrade-header 要求のあった通信手順に切り替え中。
200 OK GET, HEAD, POST,TRACE なし 正常終了。
201 Created POST, PUT URI-header POST が成功。またはPUT が新しいオブジェクトを作成。
202 Accepted GET, HEAD, PUT, POST, DELETE なし 要求は、受付たが、処理未完了。
203 Non-Authoritative Information GET, HEAD, POST なし 応答情報中のメタ情報がローカルまたはサードパーティーから集められたものであることを示す。 例えば、リソースに関する注釈 (annotation) など。
204 No Content なし サーバーは要求を受付けたが、返す情報がない。
205 Deleted DELETE なし DELETE 成功。対象は、サーバーから削除された。 Ver.1.0のみ
205 Reset Content - なし サーバーは、要求の取り消しを実行した。       Ver.1.1のみ
206 Modified PUT なし PUT 成功。対象は、サーバーから更新された。    Ver.1.0のみ
206 Partial Content - Range-header サーバーは、情報の一部を得た。            Ver.1.1のみ
300 Multiple Choices GET, HEAD なし 要求された情報が複数存在する。
301 Moved Permanently GET, HEAD, POST, PUT URI-header, Location 要求された情報は、恒久的に移動した。誤記訂正 2002.11.4
302 Moved Temporary URI-header, Location 要求された情報は、一時的に移動した。
303 See Other - なし 要求された情報は、別のURIに存在する。
304 Not Modified 条件付きGET なし 要求を受付けたが、情報が更新されていない。
305 Use Proxy - なし 要求された情報は、プロキシを通してアクセスしなければならない。
306 (Unused) - なし 未使用。
307 Temporary Redirect - なし
400 Bad Request GET, HEAD, POST, PUT,DELETE, LINK,UNLINK なし 要求を実行できない。(構文が不正)
401 Unauthorized WWW-Authenticate 情報の要求に認証を必要とする。または、認証の拒否。
402 Payment Required なし このコードは現在サポートされていない。将来用。
403 Forbidden なし 要求の拒否。認証が不完全。
404 Not Found なし 要求された情報(ファイル)がない。
405 Method Not Allowed Allow 要求は、許可されていない。
406 Not Acceptable Content-Type, Content-Encoding,  Content-Language Accept、Accept-Encoding、Accept-Languageヘッダの要求条件に 不適合。
407 Proxy Authentication Required Proxy-Authenticate プロキシサーバで情報の要求に認証を必要とする。 または、認証の拒否。
408 Request Timeout なし サーバーが待機時間内にクライアントが要求を送れなかった。
409 Conflict PUT なし 要求された情報は、現在の情報と矛盾している。
410 Gone - なし 要求された情報がサーバーにおいて有効ではなく、 転送先アドレスも不明。Web保守作業の補助用。
411 Length Required - Content-length 定義された情報の長さがない場合、サーバーは、情報の要求を 拒否。
412 Precondition Failed - なし 要求された頭部(ヘッダ)情報の前提条件が間違っている。
413 Request Entity Too Large - なし 要求された情報の結果が長すぎる。
414 Request-URI Too Long - なし 要求された情報のURIが長すぎる。
415 Unsupported Media Type - なし 要求された情報の結果が長すぎる。
416 Requested Range Not Satisfiable - - -
417 Expectation Failed - - -
500 Internal Server Error 全て なし 予期しないサーバーエラーのため、要求を実行できなかった。
501 Not Implenmented なし サーバーは、要求された機能をサポートしていない。
502 Bad Gateway なし クライアントより見て、ゲートウエイまたはプロキシーサーバの 接続先サーバの応答が妥当でないことを示す。         注)1
503 Service Unavailable Retry-After サービス(サーバー)が高負荷。Retry-Afterヘッダに示す時間後には緩和される。応答文中にRetry-Afterヘッダがなければ、クライアントは応答を500番と同等に扱う必要がある。
504 Gateway Timeout なし ゲートウエイまたはプロキシの応答がゲートウエイの指定時間内に得られない。                                注)1
505 HTTP Version Not Supported - なし HTTP Versionをサポートしていない。
注)
  1. クライアントとHTTPの交信という観点からは、他のサービスはゲートウエイとプロキシーに隠蔽されているので、"500 Internal Server Error"と同等
  2. 木内貴弘 翻訳,Network Working Group著「ハイパーテキストトランスファープロトコール第1.0版仕様書(日本語翻訳版)」(1994)の6.3項より引用。
  3. Studying HTTPHypertext Transfer Protocol -- HTTP/1.1よりHTTP Ver.1.1に関するRFC2616和訳全体を参照。

参考文献

目次▲頁先頭