ITコーディネータ システムアナリスト 西川雅樹のホームページ

【エピソード 3】
GoogleAnalyticsの解析結果をサーバ生ログと突合せしてみた

1.なんでそんなことをやる気になったのか

Google Analyticsコードを当ホームページに埋め込んでずっとアクセス解析をやっていたのですが、どうもレポートの結果が実感と一致しなかったのです。
アップしたページの表示状態の検証など自分で多ページ閲覧しても、どうもページビューが過少評価されているような、そんな感じがずっと拭えなかったのです。

たまたま、知り合いの某企業のホームページ作りに関与する機会があり(というかやむを得ずやることになった無報酬のウェブマスターみたいなもんで、かなりの作りこみもさせていただきました)、
・それなりに正確な分析はしたいが普段頻繁にやる気はない
・かといってそれなりに日々の傾向は簡単に把握したい
ということで、GoogleAnalyticsコードを全ページに埋め込みするのはそれはそれでやるとして、ホスティングしているサーバがログ書き出し可能なことから、サーバーの生ログも収集することにしました。

通常はGoogle Analyticsで雰囲気や傾向をつかみながら、必要があれば少し詳細な分析をして実態に見合った改善をしよう、ということです。

並行して使うことを想定している解析ツールはApacheLogViewerです。
DLはこちらVectorのApacheLogViewerのDLコーナーあたりから 新ウィンドウ)

ちなみに、ApacheLogViewerで読み込めるログの出力形式はNCSA形式・combined形式だそうで、ログの肥大化原因になる画像ファイル読み出しリクエストはカットしてログを記録するのがよいのだそうです。
もちろんそもそも、ログ提供可能なホスティングサービスでHP運用をしている必要があります。

ApacheLogViewer自体、使い方(カスタマイズとかパラメータ設定とか)を詳しく説明してくれるHPがあまりないようなので、かなり初歩的な使い方しかしていませんが、ApacheLogViewerの分析値自体もこの際、念のため検証しておきたいところです

ま、そんなワケで、当該企業のHPの2010年8月一か月分のアクセスについて、生ログの手集計結果~ApacheLogViewerの分析値~Google Analytics分析値比較をしてみました。
生ログのレコード数で1250件の、そこそこヴォリュームのある仕事になってしまいました。
ちなみにこの作業をやったのは2010年10月のオハナシでちょっと旧ネタです。

注:以降は説明が面倒なので専門用語・ギョーカイ用語などそのままです。言葉の意味がわからないかたはあきらめるか、自力でググるなりして解読してください(笑)。

2.アクセス解析の結果比較

【ご覧いただく上で】
以降のデータ・考察はあくまでも当該ホームページで特定期間の集計をしたらこういうことになった、というお話で、これがいつでも、どのHPにもあてはまるとは限らないことをくれぐれもご了解の上、ご覧ください。いかなる責任も持ちかねますので、あくまでもジャストインフォメーションということで。

生ログはテキストなのでいったんcsvファイル形式で保存し、excelで開け簡単に(手間はかかりますけど)力技で集計ができます。

google analytics ApacheLogViewer 生ログ手集計
総エントリー数 情報なし 1250 1250
ヒット数(ページビュー)
(注1)
445 935 418
robot、crawler類の
エントリー数(注2)
情報なし 152 312
海外アタック?(注3) 情報なし 情報なし 350
bookmarks(注4) 情報なし 163 163
セッション数(注5) 192 情報なし 223
ユニークユーザー数 142 情報なし 情報なし
New Visitor 132 情報なし 情報なし
Returning Visitor 60 情報なし 情報なし
直帰率(%) 54.2 情報なし 59.6

(注1)
生ログ手集計のページビュー数(418)は、ユーザーからのリクエストに対しステータスコード#200と#304が成立したレコード総件数です。正味のユーザーページリクエスト数ですね。
これにその他のレコード数が加わって総エントリー1250件となります。
正確に数が合わないのは、本物の#404ページ読み出しエラー、携帯アクセスの#302転送など少数レコードの影響、加えて件数数え間違いエラーに起因します。

いっぽうApacheLogViewerのページビュー集計結果(935)は、エントリー総数(1250)から#404エラーになったfavicon.icoのGETリクエスト数(=bookmarks件数の163)、およびrobots.txtのGETリクエスト#404エラー数(=robot、crawler類のエントリー件数の152)を差し引いたものとなっています。
当該HPにはfavicon.icoもrobots.txtも用意してませんので。

(注2)
生ログ手集計のrobot、crawler類エントリー数は、host名かagent名がそれっぽいエントリーと、セッションの中にrobots.txtのGETリクエストがある一連のアクセス全エントリーを「robot・crawler類からのアクセス」とみなしています。robots.txtリクエストの#404エラーレコードも含めています。ちなみに手集計したところではrobots.txtの#404エラーは102件(海外アタックのrobots.txtのGETリクエスト#404エラー除く)、その他のrobotr類のページ読み出し件数は210件でした。
ApacheLogViewerのrobot、crawler類数は、#404エラーとなったrobots.txt読み出しリクエストのみをカウントしているようです。

(注3)
8/31早朝に、アメリカのサイトから1時間半で350リクエストという大量アクセスがありました。
どう考えても尋常なアクセスと思えないので手集計ではアタック(?)とみなして除外しています。
ちなみにステータス#200が300件、robots.txtのGETリクエスト#404エラーが50件です。
ApacheLogViewerはこのアクセスもページビュー数、robot、crawler類のエントリー数にカウントしています。

(注4)
生ログ手集計のbookmarks数値はfavicon.icoのGETリクエストの全数です。
もっともInternet ExplorerがタブブラウザとなったIE7以降は、お気に入り登録操作にかかわらずIEがfavicon.icoのGETリクエストを出すようになったとかで、ほんとのbookmarks登録操作数とは一致しないのだそうです。

(注5)
手集計では、同一IPアドレスから30分以内にあったリクエストは前回リクエストと同一セッションとカウントしました。もっともどう見ても同一セッション臭い携帯電話からのアクセスは、IPアドレスが近ければ同一とみなしています。ApacheLogViewerには30分以内のリクエストを名寄せする機能があるのかどうか不明です。あるといいのにな。。。。
google analyticsのセッション名寄せのロジックはどうなってるんでしょうね。

【自分なりの分析】
<総エントリー数>
正味のユーザーリクエストに対し総エントリー数は3倍くらいありますが、画像の読み出しリクエストも加算するとさらにその数倍くらいにはなるでしょう。
google analyticsでは総リクエスト(=送信)件数も、送信データ量も情報提供してはくれませんから、実態を知る、という意味では生ログを見る意義はあるのでしょう。

<ページビュー数>
ApacheLogViewerと生ログ手集計は分類の考え方が少々違いますが、まぁそれなりによい一致をしているといってよいでしょう。アタックとおぼしきアクセスやロボットの成功リクエストも数に入れているのがわかったのは収穫です。
ApacheLogViewerでログ解析するならアタックレコードは手で除去せざるを得ませんが、ロボットを自動で除外できると便利なので、気が向いたらやりかたを探してみなければいけません。

google analyticsはjava禁止/cookie非受入れブラウザには歯が立たないハズなのですが、思ったより(というか手集計より多く)ヒット数をカウントしています。まぁ今時java禁止/cookie非受入れに設定されているブラウザは日本中でいくつあるか、っていうくらいなものでしょう。よほどPCセキュリティに過敏でなければやりませんものね。

ちなみに生ログによると7/31のエントリーは39レコード(9セッション35ページビューのほかBaiduspiderが1件)、9/1のエントリーは30レコード(8セッション11ページビューのほかGooglebot-Mobileが2件、Baiduspiderが2件、msnbotが8件)ですから、google analyticsで計測がズレ込んだとしても影響は知れているでしょう。
google analyticsは識別できていないロボットかなんかをページビューにカウントしてしまっているんでしょうかね。一方で、件数から考えてなにげにアタックは識別してカウント外になっているようです。
どういうロジックで計数しているのか、なんかビミョーな感じ(笑)

<ロボット類>
ApacheLogViewerはデフォルトでmsnbot、Yahoo! Slurp、Googlebot、Googlebot-Image、Baiduspider、Googlebot-Mobile、SurveyBot、msnbotなどをrobot、crawler類とカウントするようです。
でもYahoo! Slurp/3.0はロボットとしてみていないようです(2010/08時点)。

当サイトでは日によってはヘタすると、ロボットのご訪問が正味のページビューより多くなります。
ロボットによる負荷がそれほど高くないといっても、サーバー負荷を見積もりたいのなら、まったくロボット訪問件数の情報がないgoogle analyticsを盲目的に信じるのは、ちょっとマズいかも知れません。

<セッション数>
体感的にgoogle analyticsのセッション数が少ないとは感じていたが、2割近いセッションがカウントされていない、という結果が出てしまいました。ほんとかいな、といいたくなるところですが、いやさて何故でしょうね。
1セッションを判定する30分ルールがgoogle analyticsではもっと長いのか、javaスクリプトが動き始めるまでの遅延がユーザー操作スピードに負けているのか。。。。

<ユニークユーザー数、New Visitor、Returning Visitor>
これはcookieを使ってブラウザを識別するからこそ可能な、まさにgoogle analyticsの真骨頂ですな。ここらへんの情報はやはり欲しいところで、google analyticsの存在意義が見せ付けられます。

<直帰率>
ホームページを訪れたユーザーが、最初の1ページだけを見て(ホームページの別のページリクエストをすることなく)帰ってしまう割合、いわゆる直帰率はgoogle analyticsと手集計ではよい一致を示しました。でも根本的にセッション数にズレがあるので、はてさて信じてよいのやら。。。。。

<自分なりの見解>
ま、結論は「信じるものは救われる」じゃないけど、google analyticsとApacheLogViewerそれぞれの癖をそれなりに理解して、上手に使い分けるのが良いんじゃないでしょうか。
日ごろはgoogle analyticsで傾向を見て、少し大掛かりな改修の際はApacheLogViewerも参考にして、ってな感じでしょうか。

ホントはブラウザ種別、OS種別、参照元、キーワード、各ページのページビュー数なんかも比較したいところですが、いろいろなかなか追いかけるのに大変な負荷がかかりそうで躊躇してます。
直感的には傾向は合っていそうなので、そこまでやる意味があるかどうかも考えないといけませんし。
ま、もしどうにもヒマだったらガチ比較第2弾をやるかもしれない、というくらいのことで、今回はおしまい。

(エピソード3 おわり)