サーバログ型アクセス解析の特徴、ログの構造と取得方法、ユーザID

この記事は連載「アクセスログの生ログ分析」の全 5 ページ中 1 ページ目です。

今では誰もが簡単にアクセス解析をできるようになった。 Googleアナリティクスという無料のツールがあり、そのタグをHTMLファイルに記入することできれいな分析結果の画面が手に入る。有料だがAdobe Analyticsを導入しているサイトも多い。 最近は分析というと、こういったツールの画面を見ることが中心になってしまっている。 ところがそこに出てくるのはGoogleやAdobeによって加工・集計された数字だ。Googlebotなどの検索ロボットのアクセスも除外されてしまう。実は裏側にはログがあって、それを加工・集計して見たいアウトプット(媒体ごと流入数一覧、コンバージョンを生んだランディングページの一覧など・・・)を出しているのである。 今みたいに高度なアクセス解析ツールがなかった昔は直接生ログ解析を行っていた。生ログを加工・集計するソフトがあって、そういったソフトを通じて集計データを見て分析を行っていた。 今ではそんな必要がなくなってきているが、それでも実は生ログを見ないと分からないこともある。 ということで、webサーバのログの取得・加工といった基本的な手順から、集計・分析を通じて、最後生ログを直接読み込まないとできないことにアプローチしていく。 Googlebotの挙動を把握 同時に見られるページ、遷移の分析(アソシエーションルール) セッションをまたいだユーザの動きの分析…

Continue reading →

アクセスログファイルからのデータ抽出とCSV化、SQLiteへの取込

この記事は連載「アクセスログの生ログ分析」の全 5 ページ中 2 ページ目です。

さまざまな形式のアクセスログファイルから、 分析集計しやすいようにCSVファイルへの変換、さらには簡易データベースであるSQLiteへの取り込みを解説する。 CSVファイルにする テキスト形式のログファイルを扱いやすいCSVに変換する。 NCSA combined形式 テキストファイルにすればExcelなどの表計算ソフトやPostgreSQLなどのデータベースにも取り込むことができる。自由自在になる。 バーチャルホスト名を含まないNCSA combined logから以下の8項目をタブ区切りテキストで書き出す。 アクセス元のアドレス ユーザー名 日時 ページのパス ステータスコード 送信バイト数 参照元 ブラウザ sed -e ‘s/^\(.*\) .* \(.*\) \[\(.*\)\] “.* \(.*\) .*” \(.*\) \(.*\) “\(.*\)” “\(.*\)”$/\1\t\2\t\3\t\4\t\5\t\6\t\7\t\8/g’ /var/log/httpd/access_log > /tmp/log.csv # オプション`-E`(拡張正規表現対応)を使うと sed -E ‘s/^(.*) .* (.*) \[(.*)\] “.* (.*) .*” (.*) (.*) “(.*)” “(.*)”$/\1\t\2\t\3\t\4\t\5\t\6\t\7\…

Continue reading →

アクセスログデータをデータベース(PostgreSQL)に取り込む

この記事は連載「アクセスログの生ログ分析」の全 5 ページ中 3 ページ目です。

セッションやユーザの識別にはSQLiteでは対応していないウィンドウ関数が必要になるし、データのサイズが大きくなるとSQLiteでは不安なところもある。 ということで、データサイズがある程度大きくなっても対応可能で、オープンソースでは珍しくウィンドウ関数など集計・分析機能に優れたPostgreSQLへアクセスログを取り込む方法を解説する。 アクセスログをPostgreSQLに取り込む NCSA拡張形式のログを取り込む 環境の準備(linux) SQLiteと違って環境の準備が必要になる。 PostgreSQLのインストール、initdbが完了している前提で ユーザを作成 $ su postgres $ createuser xxx データベースを作成 ログにはそもそもマルチバイト文字は含まれないので文字コードSQL_ASCIIを強制してデータベースを作成する。 通常initdbで文字コードUTF-8が暗黙のうち指定されるので、新しく作るデータベースの文字コードはデフォルトでUTF-8となる。 データベースの文字コードがUTF-8だとデータの文字列にバックスラッシュを含むときにエスケープシーケンスと勘違いする。 そうなるとバックスラッシュを含むデータをインポート時にエラーを起こして取り込めない。 文字コードSQL_ASCIIを明示してcreatedbし、すべてのデータを非マルチバイト…

Continue reading →

アクセスログデータの前処理、ユーザIDとセッションの生成、URLの集約

この記事は連載「アクセスログの生ログ分析」の全 5 ページ中 4 ページ目です。

アクセスログデータの前処理 これまでの手順で取り込んだログデータはそのままでは分析に使いにくい。 今後の分析がやりやすいように、ある程度の前処理が必要になる。 ここでは前処理のポイントになるものを列挙する。 分析対象とするリクエスト行の抽出/削除 取り込んだままのログデータに不要な情報が含まれることがある場合、必要に応じてそれらを削除する。アクセスログファイルからのデータ抽出時にフィルタリングしていない場合、ここで削除する。 ボットの抽出/削除 画像の削除 ユニークユーザとセッションの作成 疑似ユニークユーザ セッション 集計単位URLの指定 URLの分割 ダミーパラメータの除外 URLごとのPV数を集計する際、同じページとして扱うURLを集約 分析に必要な変数を追加 デバイス スマートフォン、PC、タブレット 流入元識別 広告、自然検索、直接流入、… リファラを使う 流入元識別用のダミーパラメータを使う(広告のキャンペーンコードなど) その他分類(ページのトピックなど) コンバージョン コンバージョンページへのアクセスをCV完了に ランディングページ セッションの開始ページがランディングページ ページ閲覧時間 このように変数(特徴量)を追加することで、実用的な分析ができるようになる。 ユーザIDが会員情報などと紐付けられていれば、属性ごとの行動も把握できる。 疑似ユニークユーザと…

Continue reading →

Googleアナリティクスの計測ログをBigQueryに送る(無料版対応)

この記事は連載「アクセスログの生ログ分析」の全 5 ページ中 5 ページ目です。

Googleアナリティクスで収集しているデータ(メジャメントプロトコル)をBigQueryに送り、集計・可視化できるようにする。無料版のGAにも対応し、しかもサーバレスでシンプルに実装できる。 本来BigQueryを使ったウェブ行動の詳細分析はGA360を使うべきなのだが、限りなく低コストでこんなことができるという参考程度で紹介する。 通常無料版のGoogleアナリティクスではできないログベースの行動分析をするのに使ったり、有料版であったとしてもGAはどのようなトラフィックを除外して集計しているのか、Googlebotなどのクローラがどんな動きをしているのかなどを検証するのに使うといいかもしれない。 原理はGoogleアナリティクスのJavaScriptがGoogleの計測サーバに送っているパケットを自前のサーバに送ってログ化するというシンプルなものである。 従来はデータ収集用のサーバを構築する必要があったが、Google Cloud Storageを使うことでサーバをわざわざ立ち上げなくても不要ログ収集ができる。 Google Cloud Storageは単にストレージだけでなく、インターネットにコンテンツを配信する簡単なCDNとして使うことができるうえ、設定によってログを出力することができる。そこでGCS上にwebビーコンつまりは空のGIF画像を設置しておいて、そこにオーディエ…

Continue reading →