このページではWebサーバーApache/httpdアクセスログWebalizerでの解析用に振り分ける方法について初心者/ビギナー向けに解説します。
お便利サーバー.com+相互リンクサイト内をキーワードで検索
webalizerでアクセス解析

Webアクセス解析とは

Webalizer日本語版の導入

Webalizerの基本設定

httpdログの構造を理解する

Apacheでログを振り分ける

検索文字列の日本語化

統計データの見方について

解析データの最適化と分析法

解析スケジュールの設定

デフォルト以外のアクセス解析


"/etc/httpd/conf/httpd.conf"を開く

HTTP ログ データの振り分けは、 Apache のメイン設定ファイル "/etc/httpd/conf/httpd.conf" に記述して行います。

まず、 サブネット 内の適当な クライアント機 から SSHクライアント 構築中のLinuxサーバー ログイン します SSHクライアントでサーバーに接続する(WBEL3) SSHクライアントでサーバーに接続する(CentOS3) SSHクライアントでサーバーに接続する(WBEL4) SSHクライアントでサーバーに接続する(CentOS4) SSHクライアントでサーバーに接続する(CentOS5)

それから su コマンド アカウント "root" に変更し、 cp コマンドでバックアップを作成した後、 nano エディタで "/etc/httpd/conf/httpd.conf" を開きます nanoエディタでファイルを開く

[tanaka@web1 ~]$ su -Enter
Password: "root"のパスワードを入力します。 Enter
[root@web1 ~]# cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd
.conf.org2
Enter
[root@web1 ~]# nano /etc/httpd/conf/httpd.confEnter


nanoで/etc/httpd/conf/httpd.confを開く
nanoで"/etc/httpd/conf/httpd.conf"を開く

設定ファイルの書式や設定の反映のさせ方については、 /etc/httpd/conf/httpd.confの編集について 及び httpdのコントロールについて を参考にしてください。

このページの先頭へ↑

"/etc/httpd/conf/httpd.conf"の編集ポイント

ログ データの振り分けの設定は、有効になっている "CustomLog" ディレクティブ CustomLogディレクティブの設定 に対して行います。

つまり バーチャルホスト Apacheのバーチャルホスト設定について を設定していない場合には、通常のドキュメントルートに対するCustomLogディレクティブ (500行目付近) CustomLogディレクティブの設定 が対象になりますが、バーチャルホストを設定している場合にはバーチャルホストコンテナ内のCustomLogディレクティブ バーチャルホストコンテナ内のCustomLogディレクティブの設定 を対象とする必要があります。

いずれの場合も設定の方法そのものは同じですので、ここではひとまとめにして設定例を説明します。

実際の記述内容はかなり大掛かりなものになりますので、オリジナルで有効になっている "CustomLog" ディレクティブは、

# CustomLog logs/access_log combined

とコメントアウトし、その下に一連の記述を行うと良いでしょう。

# CustomLog logs/access_log combined
[ログデータ振り分けの記述1]
[ログデータ振り分けの記述1]
   .
   .
   .

また、アクセスログのデータ形式については、 "common" を設定しても Webalizer での解析は可能ですが、 Apacheのアクセスログの出力形式について の説明のとおり、 "common" にしてしまうと、アクセス解析で重要な位置を占める リファラー ユーザーエージェント の情報が得られなくなってしまいます。

従ってここは基本的に "combined" に設定することをお勧めします。

このページの先頭へ↑

ログデータの振り分けのためのディレクティブ

ログ データの振り分けは、まず "SetEnvIf" ディレクティブ で個々のログデータに特定の 環境変数 をセットし、その環境変数による判定式付きの、 "CustomLog" ディレクティブ CustomLogディレクティブの設定 でログデータを収集する、という方法で行います。

SetEnvIf〜ログデータに環境変数を設定する

Apache が取得する個々の ログ データに対し、 環境変数 をセットする ディレクティブ です。

この お便利サーバー.com のアクセス解析結果を公開中ですのでご覧ください。
メインコンテンツのアクセス解析結果 お便利サーバー.com
お便利サーバー.comへの検索ロボットのアクセス状況 検索ロボット

実際にログデータをログファイルに書き込む役目を担う "CustomLog" ディレクティブは、この "SetEnvIf" ディレクティブによってセットされた環境変数の内容に応じて書き込むべきログデータを判別できますから、これらの二つのディレクティブを適当に組み合わせることでログデータの振り分けを実行することができます。

一般書式は、

SetEnvIf [リクエストの種類] [判定用パラメータ] [環境変数1] [環境変数2] ...

です。

[リクエストの種類] は、ログデータの中のどの要素を環境変数セットの判断材料にするかを指定するパラメータです。

指定可能なパラメータはいくつもありますが、ログファイルの形式が "combined" のときに有効で、実際に指定して意味のあるパラメータは以下のとおりです。

・Remote_Addr  アクセス要求元の ノード IPアドレス (1)

・Request_Method  リクエストに使用されている HTTPメソッド (5)

・Request_URI  リクエストされた コンテンツ URI (5)

・Referer  アクセス元の リファラー (8)

・User-Agent  アクセス元の ユーザーエージェント (9)

末尾の(数字)は、ログファイルの構造 ログファイルの構造 の各要素に対応していますので参照してください。

[判定用パラメータ] には、 [リクエストの種類] で指定した要素に対する一致条件を 正規表現 で指定します。

そして、これらの条件が満たされたときにセットする環境変数を、 [環境変数1] [環境変数2] ... に記述します。複数記述すれば複数の環境変数がセットされます。

このページの先頭へ↑

ログデータの振り分けの記述方法

一般的には、

1) SetEnvIf [判定の条件式1] [環境変数A] [環境変数X]
2) SetEnvIf [判定の条件式2] [環境変数B] [環境変数X]
3) SetEnvIf [判定の条件式3] [環境変数B] [環境変数X]
     .
     .
CustomLog logs/[ログファイルA] combined env=[環境変数A] 1) に一致で書き込み
CustomLog logs/[ログファイルB] combined env=[環境変数B] 2,3) に一致で書き込み
     .
     .
CustomLog logs/[ログファイルX] combined env=![環境変数X] 1,2,3) に不一致で書き込み

と記述します。

抽象的な記述では説明が難しいので、具体的な記述例を以下に示します。

IPアドレスで振り分けを行う

自宅内の LAN と、外出先などの特定の IPアドレス からの ログ データを別のログファイルに振り分ける設定です。

1) SetEnvIf Remote_Addr "192.168.100." ownlog nolog
2) SetEnvIf Remote_Addr "211.183.111.34" ownlog nolog
A) CustomLog logs/access_own_log combined env=ownlog
B) CustomLog logs/access_log combined env=!nolog

このように設定すると、アクセス元のIPアドレスが "192.168.100.*" または "211.183.111.34" の場合、 1) または 2) "SetEnvIf" ディレクティブ によって "ownlog" 及び "nolog" という二つの 環境変数 がログデータにセットされます。

すると、いずれの場合も次の A) に設定された "CustomLog" ディレクティブの条件式 "env=ownlog" に一致しますから、これらのログデータは "logs/access_own_log" に追記されることになります。

そしてそれ以外のログデータを "logs/access_log" に追記すれば良いわけですが、もしも

1) SetEnvIf Remote_Addr "192.168.100." ownlog nolog
2) SetEnvIf Remote_Addr "211.183.111.34" ownlog nolog
A) CustomLog logs/access_own_log combined env=ownlog
B) CustomLog logs/access_log combined

B) に条件式を何も書かなければ、環境変数のセットとは無関係にすべてのログデータが "logs/access_log" に追記されてしまいます。

"!" 正規表現 では 「否定」 を意味する記号です。

そこで前の設定例のように、 B) "env=!nolog" という判定式を記述し、

「"nolog"という環境変数がセットされていないログデータを追記する」

という設定を行うわけです。

ひとつのログデータにわざわざ二つの環境変数をセットしているのは、実はそういう理由によるものです。

以下、その他条件による振り分けの設定について説明しますが、これらは判定の方法が違うだけで振り分けの手順は同じです。

従って以下は振り分けの要点に絞って説明します。

HTTPメソッドで振り分けを行う

例えばこのサイトが参加している 「自宅サーバーWebRing」 「自宅サーバーWebRing」について では、参加者の Webサーバー の状態を監視するのに "OPTIONS" HTTPメソッド を利用しています。

「自宅サーバーWebRing」 の状態監視になぜ "OPTIONS" メソッドが使われているのかというと、こういったログの振り分けが簡単にできるように、という配慮だそうです。その気配りに拍手!!。

"OPTIONS" メソッドは利用されることが極めて少ないメソッドですので、これを利用して監視用のログデータを別のログファイルに振り分けることができます。

SetEnvIf Request_Method "OPTIONS" ringlog nolog
CustomLog logs/access_ring_log combined env=ringlog
CustomLog logs/access_log combined env=!nolog

とはいえ、実際にはHTTPメソッドでログデータを振り分けるケースは比較的少ないと思われます。

リクエストされたURIで振り分けを行う

例えば Apache のユーザーディレクトリの公開機能 Apacheのユーザーディレクトリの設定について を使って、 ユーザーアカウント suzuki コンテンツ スペースを貸し出し、

http://www.obenri.com/~suzuki/

での公開を許可している場合、この URL へのアクセスログデータを他のログファイルに振り分けるには、 FQDN 以下のディレクトリ名を使って以下のように設定します。

SetEnvIf Request_URI "~suzuki/" suzukilog nolog
CustomLog logs/access_suzuki_log combined env=suzukilog
CustomLog logs/access_log combined env=!nolog

Webalizer 自身のログデータを振り分ける場合についても同様に、アクセス先のディレクトリ名 "/var/www/usage/" から、

URI の指定を 絶対パス "/var/www/usage/" で記述していないのはそれなりに意味があります。
もしも将来的に suzuki あるいはその他のユーザーの運営するコンテンツに対してWebalizerによるアクセス解析が必要になったとき、その出力先のディレクトリ名を "〜/usage/" と統一するように決めておけば、右の設定だけでそれらのログデータは最初から除外されるわけです。
SetEnvIf Request_URI "usage/" webalizerlog nolog
CustomLog logs/access_webalizer_log combined env=webalizerlog
CustomLog logs/access_log combined env=!nolog

と記述します。

"Request_URI" オプションを利用するときは、指定する文字列が「部分一致」で デフォルト になります。

例えば最初の例で、URIの指定を単に "suzuki" としてしまうと、リクエストされたURIの一部(つまり パス 名やファイル名)に "suzuki" が含まれる場合、例えば、

http://www.obenri.com/photo/suzuki/01.jpg

へのアクセスの場合でも 環境変数 "suzukilog" "nolog" がセットされ、 "logs/access_suzuki_log" への振り分けが行われてしまいますので注意してください。

リファラーで振り分けを行う

例えば外部から、

http://www.obenri.com/album.html

へのリクエストが行われた場合、実はalbum.html上にタグで貼り付けられている画像ファイルや参照する外部スタイルシートファイル、 JavaScript ファイルなどは、 http://www.obenri.com/album.html リファラー となります。

この お便利サーバー.com のアクセス解析結果を公開中ですのでご覧ください。
メインコンテンツのアクセス解析結果 お便利サーバー.com
お便利サーバー.comへの検索ロボットのアクセス状況 検索ロボット

要するに「 サーバー 内部のファイルを呼び出しているだけ」でもすべてリファラーとして記録されるわけですから、実は外部のリファラーの数よりも内部のリファラーの数のほうが圧倒的に多いのが普通です。

だとすれば、外部のリファラーの解析を行うには、この邪魔になる「内部のリファラー」の ログ データも別に振り分けてしまいたいところです。

ところがこの「内部のリファラー」のログまで別のログファイルに振り分けてしまうと、サーバーから送り出されるデータの容量の統計が著しく小さい値になってしまうでしょうし、他にも正確なデータにならないケースも起こりうるでしょう。

従って、原則としてリファラーでのログデータの振り分けは行わないことをお勧めします。

この部分の問題はログデータで振り分けを行うより、 Webalizer で適切に調整して解析を行うほうが現実的だといえます。

ユーザーエージェントで振り分けを行う

検索ロボットのユーザーエージェント名について 及び アフェリエイトロボットのユーザーエージェント名ついて の説明のとおり、実際にユーザーがアクセスしていないのに外部から HTTP でアクセスしてくるのが 検索ロボット です。

これらを除外するには例えば以下のように設定を行います。

SetEnvIf User-Agent "Googlebot" robotlog nolog
SetEnvIf User-Agent "msnbot" robotlog nolog
SetEnvIf User-Agent "Yahoo! Slurp" robotlog nolog
SetEnvIf User-Agent "Mediapartners-Google" affillog nolog
CustomLog logs/access_robot_log combined env=robotlog
CustomLog logs/access_affil_log combined env=affillog
CustomLog logs/access_log combined env=!nolog

上から3行目までがサイト登録用の検索ロボット、4行目がGoogleのアフェリエイトのクローラーに対する 環境変数 のセットです。

そして4行目で検索ロボットのログデータをまとめて同じ "logs/access_robot_log" に追記し、5行目でアフェリエイトのログデータを "logs/access_affil_log" 収集する、という設定になっています。

このページの先頭へ↑

「お便利サーバー.com」の設定例

ではこのパートの最後に、「お便利サーバー.com」で実際に設定しているログデータの振り分けについて掲載しますので参考にしてください。

#EnvSet
1) SetEnvIf Remote_Addr "192.168.100." homelog nolog
2) SetEnvIf User-Agent "JSWC" jswclog nolog
3) SetEnvIf Request_URI "~xxx/" xxxlog nolog
4) SetEnvIf User-Agent "Googlebot" robotlog nolog
5) SetEnvIf User-Agent "msnbot" robotlog nolog
6) SetEnvIf User-Agent "Yahoo! Slurp" robotlog nolog
7) SetEnvIf User-Agent "Yahoo-MMCrawler" robotlog nolog
8) SetEnvIf User-Agent "Mediapartners-Google" affillog nolog
9) SetEnvIf User-Agent "Brainer" affillog nolog
#LogData
A) CustomLog logs/access_home_log common env=homelog
B) CustomLog logs/access_jswc_log common env=jswclog
C) CustomLog logs/access_xxx_log combined env=xxxlog
D) CustomLog logs/access_robot_log combined env=robotlog
E) CustomLog logs/access_affil_log combined env=affillog
X) CustomLog logs/access_log combined env=!nolog

1) LAN からのアクセスの ログ の判定で、 A) logs/access_home_log に保存します。 リファラー ユーザーエージェント の記録は必要ないので、ログ形式は "common" としています。

「自宅サーバーWebRing」 の説明を詳しく読む前に、"JSWC"というユーザーエージェント名をログファイルから調べて設定し、特に問題もなさそうなのでそのままにしている、というだけのことです。

2) 「自宅サーバーWebRing」 のログの判定です。 HTTPメソッド ではなく、 ユーザーエージェント で判定しているのには特に深い意味はありません。 "common" 形式で B) logs/access_jswc_log に保存しています。

3) は、知人に貸している コンテンツ スペースに対するログの判定です。必要なときはきちんとアクセス解析ができるように "combined" 形式で C) logs/access_xxx_log に保存しています。

4) 7) 検索ロボット のログの判定です。検索ロボットはもっとたくさん闊歩しているはずですが、ログの解析に影響を与えそうな「大量の足跡を残す」検索ロボットとしてこれくらいでしょうか。

すべてのログデータをまとめて D) logs/access_robot_log に収集しますので、後から解析可能なようにこれも "combined" 形式にしています。

8) 9) はアフェリエイトのクローラーです。もちろん、自分で提携しているものだけ設定すればOKです。 E) logs/access_affil_log にまとめて収集しますので、これも後から解析可能なように "combined" 形式にしています。

そしてこれらのいずれにも該当しないログデータを「ユーザーからのアクセス」とみなし、 X) logs/access_log "combined" 形式で収集しています。

なお、 お便利サーバー.com Webalizer によるアクセス解析結果は非公開で、管理人はLAN以外から閲覧することはありません。

従ってWebalizerの出力先ディレクトリに対して URI によるログデータの振り分け設定は特に行っていません。

このページの先頭へ↑

設定ファイルの書式チェックと有効化

"/etc/httpd/conf/httpd.conf" への ログ データの振り分けの記述は分量が多く間違えやすいので、記述が終わったら必ず書式のチェック /etc/httpd/conf/httpd.confの書式チェック を行ってください。

設定の記述では "logs/" 以下にログファイルが作成されるようになっていますが、 SeverRootディレクティブについて の設定によって 絶対パス としては "/etc/httpd/logs/" となります。
ところが、この "/etc/httpd/logs/" "/var/log/httpd/" シンボリックリンク ですので、実際のログファイルは "/var/log/httpd/" 以下に作成される、というわけです。
ややこしいですね。

Apache の設定の有効化 /etc/httpd/conf/httpd.confの有効化 を行うと、自動的に "/var/log/httpd/" 以下に新しく設定したログファイルが作成されますので確認してみてください。

ログファイルの振り分けがうまくいっているかどうかは、それぞれのログファイルを nanoエディタ で開くなり、 cat コマンド で内容を表示してみるなりの方法で確認してみてください。

ちなみに、この "/var/log/httpd/" 以下に出力されるログファイルは一定期間ごとにローテーション処理され、古くなったログファイルが削除されていきます。

従って、「ログファイルが多くなりすぎて ハードディスク の容量が足りなくなる 」という心配はまず不要でしょう。

さて、ログファイルの出力が確認できたら、

[root@web1 etc]# webalizerEnter
[root@web1 etc]#

と実行してください。 "logs/access_log" から除外されたログデータは解析されなくなります。

ただ、この場合一つ気をつけておかなければならないことがあります。

この コンテンツ の推奨どおりに Webalizer の基本設定を行っているとすると、アクセス解析結果は、 Incrementalディレクティブについて 及び関連 ディレクティブ の設定で、 「増加処理」 を選択していると思います。

この お便利サーバー.com のアクセス解析結果を公開中ですのでご覧ください。
メインコンテンツのアクセス解析結果 お便利サーバー.com
お便利サーバー.comへの検索ロボットのアクセス状況 検索ロボット

つまり、このパートに従ってアクセスログの振り分けを行っても、それ以前に行われた解析結果に含まれる LAN 検索ロボット の統計が取り除かれるわけではありません。あくまで、アクセスログの振り分けを実施した以降の解析処理に対してのみ有効であることに注意してください。

ただ、Webalizerは月次単位でアクセス解析結果をレポートしますから、月が変わればきちんとしたアクセス解析結果が得られるようになります。

従ってこういった「解析結果に大幅な影響を与える設定変更」はできるだけ月の変わり目に行うと良いかもしれません。

このサイトは リンクフリー です。趣味や勉強のためでしたら、引用、転用、コピー、朗読、その他OKです。このサイトへのリンクについては こちら をご覧ください。今のところ更新予定はありませんのでご了承ください。
”Linux”は、Linus Torvalds 氏の各国における登録商標です。”Red Hat”及びRed Hatのロゴおよび Red Hat をベースとしたすべての商標とロゴは、各国におけるRed Hat, Inc. 社の商標または登録商標です。その他のプログラム名、システム名、製品名などは各メーカー、ベンダの各国における登録商標又は商標です。