アクセスログの種類(apacheの場合)

解析を行うアクセスログが記述されているフォーマットは、解析を行ううえで非常に重要です。 ここでは、webサーバとして一般的な(最も普及している)apacheが生成するアクセスログに関して説明を行いたいと思います。 (apacheはフリーのwebサーバです。)

アクセスログのフォーマットとは

アクセスログの解析を行うには、まずはじめにどのようなルールでアクセスログが記述されているか知る必要があります。 ここでは、アクセスログが記述されているルールを「アクセスログのフォーマット」と呼びます。 アクセスログは、ホームページを見た人が残した足跡をひたすら記述してあるファイルですが、そのファイルの記述方法にも様々なフォーマットがあります。 例えば、最も普及しているwwwサーバであるアパッチのアクセスログでもサーバの設定によってフォーマットが違います。

apacheの標準的なアクセスログフォーマット

apacheのアクセスログのフォーマットは、apacheのコンフィグファイル(configファイル)に記述してある設定によって変わります。 (apacheのコンフィグファイルはhttpd.confというファイル名である事が一般的です。) apacheに付属してくるconfigファイルのサンプルには、combined、common、refer、agentが定義されています。 commonは、主にwebページを閲覧した相手のIPアドレス(もしくはホスト名)、閲覧したページ(もしくはリクエストされたページ)、閲覧方法(GET、POSTなど)、時間、ファイルサイズ、ステータス(成功・失敗など)などの情報が記述されています。 referは、どこからそのページに来たか(i.e. そのページへのリンク先など)の情報が記述されています。 agentは、どのようなブラウザ(例えばIE、firefox、opera、safariなど)から閲覧してきたかが記述されています。 combinedは、common+refer+agentを一つにまとめたものです。

ここでは、一番情報の詰まったcombinedフォーマットのアクセスログに注目したいと思います。 以下にアクセスログの中身の例を示したいと思います。


10.2.3.4 - - [18/Apr/2005:00:10:47 +0900] "GET / HTTP/1.1" 200 854 "-" "Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)"
10.2.3.4 - - [18/Apr/2005:00:10:47 +0900] "GET /style.css HTTP/1.1" 200 102 "http://www.geekpage.jp/" "Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)"
10.2.3.4 - - [18/Apr/2005:00:10:47 +0900] "GET /img/title.png HTTP/1.1" 304 - "http://www.geekpage.jp/" "Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)"

apacheのアクセスログには1行に1アクセス分のログが記述されています。 各アクセスログ内の各データはスペース(空白)で区切られています。 データ内にスペースが入る可能性があるデータは「""」や「[]」で区切られています。

一つ目のデータには、ページを閲覧したリモートユーザのIPアドレスが入ります。 apacheの設定によっては、ここがホスト名になります(DNSなどを使った名前解決、もしくは逆引きが行われます)。

2つ目と3つ目のデータにはデータが入っていない事を示す「-」が書いてあります。 ここには、リモートユーザ名が入ります。 リモートユーザ名は、認証を行った後であったり閲覧側がリモートユーザ名を提供している場合など、特殊な場合にしか取得できません。 そのため、普通の状況では2番目と3番目のフィールドにデータは入っていないと思って良いです。

4つ目のデータにはリモートユーザが閲覧を行ったアクセス日時が入っています。 4つ目のフィールドは「[」と「]」で区切られています。 +0900はUTC(Coordinated Universal Time、既定世界時)との差が9時間である事を示しています。 日本は既定世界時よりも9時間進んでいるため、日本国内であればこの値は常に+0900になります。

5つ目のデータは、リモートユーザからのリクエスト内容です。 HTTPのリクエスト(HTTP Request)がそのまま書いてあります。 ここを見ると、どのページが閲覧されたかがわかります。

6つ目のデータは、サーバが返したHTTPステータス(HTTP Status)の値が書いてあります。 ここに書かれる値はHTTPプロトコルで既定されていますが、一般的なものとしては以下のものがあります。 200:成功、304:リモートユーザ側はキャッシュを利用したためデータをダウンロードしなかった、404:存在しないファイルをリクエストされた(file not found)。

7つ目のデータは、送られたデータ量がバイト(byte)単位で表現されています。 6つ目のデータが304である場合、データの転送が行われないためここの値は「-」になります。

8つ目のデータはrefer logです。 どこからたどって、そのページにたどり着いたかを表現しています。 このデータを見ることによって、リンク元がわかります。 ただし、この値はリモートユーザによる申告制なので「-」のように値がない場合や、リモートユーザが嘘をついている場合などがあります。

9つ目のデータはagent logです。 このデータにより、リモートユーザがどのようなブラウザを使っているかがわかります。 上記例では、リモートユーザがWindows 98でIE5.5を利用していると思われます。 この値もリモートユーザによる申告制なのでリモートユーザが嘘をついている場合などがあります。

エラーログ

apacheサーバでのエラーや、ページ取得時のエラーが記述されています。 ページ取得時のエラーとしては、存在しないページがリクエストされた、cgiが異常終了したなどが一般的です。


IPv6基礎検定

YouTubeチャンネルやってます!