SlideShare una empresa de Scribd logo
1 de 8
Descargar para leer sin conexión
Rails3+devise,nginx,fluent,S3構成での
       アクセスログ収集と蓄積
         アクセス分析に活用することを前提として、
          上記構成で構築したアプリケーションの
         アクセスログ収集と蓄積方法を説明します



              2012年8月22日
            三上威 (@takemikami)
     ※本文書の詳細は以下のブログでも説明しています。
      http://takemikami.com/technote/archives/658

        Copyright(C) 2012 Takeshi Mikami. All rights reserved.
目次
 本文書は次の構成をとります

 •    概要
 •    アクセスログ収集・蓄積の全体像
 •    trackingIDの付与とアクセスログへの出力
 •    アプリケーション上のユーザIDとアクセスログの紐付け
 •    詳細アクセスログの出力
 •    fluentdによるログ抽出と転送




Copyright(C) 2012 Takeshi Mikami. All rights reserved.
概要
 本文書の概要を示します

 • ユーザ認証が存在するWebアプリのアクセスログを有効に分析
   したい
   ⇒以下の2点を行う必要がある
       – Webサーバからアクセスログを集める
       – Webアプリのユーザとアクセスログを紐付ける


 • 本文書では、次の構成のWebアプリケーションで「アクセスログ
   の収集と蓄積」を行う流れを説明します
       –    Webサーバ: nginx
       –    開発フレームワーク: Ruby on Rails (認証プラグインとしてdevise)
       –    ログ集約: fluentd
       –    ログの格納先: Amazon S3


Copyright(C) 2012 Takeshi Mikami. All rights reserved.
アクセスログ収集・蓄積の全体像
 本スライドでは、アクセスログ収集と蓄積の全体像を示します。
                                                                                        ログの出力
          ①ユーザの訪問


                                        nginx                   Rails
                                                                         アプリDB
              ユーザ

          ④tracking用の                                    ②アプリからユーザID情報を送信
          cookie情報を送信
                                                   ③アクセスログにユーザID
                                                   トラッキング用cookie情報を出力
                                       ログ


           ①ログを監視し、条件
           に合うログを抽出                                        S3
                                                                                 抽出したログを集計し、
                             fluentd                                             分析に活用する想定
                                         抽出                             抽出
                                         ログ                             ログ

                               ②定期的にS3に転送
                                                                                       マーケター
 ログの収集・分析
Copyright(C) 2012 Takeshi Mikami. All rights reserved.
trackingIDの付与とアクセスログへの出力
 本スライドでは、nginxの機能を用いたtrackingIDの付与方法を示します。


 再訪問時のcookieイメージ                 ⇒2度目以降の訪問についてクライアントを一意に特定できる
                                   度目以降の訪問についてクライアントを一意に特定できる
                                          についてクライアント
  Cookie: uid=XXXXXXXXXXXXXXXXXXXXXXXX;

  ユーザの訪問
  初回訪問:cookie無し                                                  nginxの設定
  再訪問:cookie有り
                                                                    ■/etc/nginx/conf.d/default.confに追加
                                                                    userid on;
                                                                    userid_name uid;
                                                                    userid_path /;
                                          nginx                     userid_expires 365d;

             ユーザ


    tracking用のcookie情
    報を送信(初回訪問時
    のみ)
   初回訪問時のcookie設定イメージ
    Set-Cookie: uid=XXXXXXXXXXXXXXXXXXXXXXXX; path=/; expires=Thu, 20-Aug-2013 09:25:55 GMT; HttpOnly



Copyright(C) 2012 Takeshi Mikami. All rights reserved.
アプリケーション上のユーザIDとアクセスログの紐付け
 本スライドでは、RailsアプリのユーザIDをアクセスログに紐づける方法を示します。

 HTTP応答ヘッダ イメージ                     HTTP応答ヘッダ イメージ
                                      X-App-Userid: 2
  X-App-Userid: 2


  ユーザIDは送信さ                           アプリからユーザIDを送信                       ⇒アプリから送信した会員IDと
                                                                           アプリから送信した会員 と
                                                                                から送信した会員
  れない                                                                      nginxのログを紐付けできる
                                                                                のログを紐付けできる

                                nginx
                                                           Rails
                                                                      アプリDB
      ユーザ

                                                    Railsアプリへの改修
  nginxでユーザID
  ヘッダを削除                                             ■「app/controllers/application_controller.rb」
                                                     class ApplicationController < ActionController::Base
 nginxの設定                                             protect_from_forgery
                                                      after_filter :add_userid_toheader
                                                      def add_userid_toheader
   ■/etc/nginx/conf.d/default.confに追加
                                                        response.headers["X-App-Userid"]
   proxy_hide_header X-App-Userid;
                                                         = "#{user_signed_in? ? session['warden.user.user.key'][1][0] : nil}"
                                                      end
                                                     end



Copyright(C) 2012 Takeshi Mikami. All rights reserved.
詳細アクセスログの出力
 本スライドでは、詳細アクセスログの出力方法を示します。

                           nginxの設定

                               ■/etc/nginx/conf.d/default.confに追加
                               log_format detail_accesslog
          nginx                '"$time_local","$remote_addr","$uid_got","$upstream_http_x_app_userid","$remote_user","$re
                               quest","$status","$body_bytes_sent","$http_referer","$http_user_agent","$http_x_forwarded_f
                               or","$gzip_ratio"';
                               access_log /var/log/nginx/detail_access.log detail_accesslog;


                           ※ログ出力フォーマットの指定
                           trackingID: $uid_got
                           例)uid=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
                           ユーザID: $upstream_http_x_app_userid
                           例)2
         ログ


   出力ログのイメージ

    "21/Aug/2012:14:10:09 +0900","192.168.199.1","uid=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","2","-","GET /
    HTTP/1.1","304","0","-","Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.79
    Safari/537.1","-","-"



Copyright(C) 2012 Takeshi Mikami. All rights reserved.
fluentdによるログ抽出と転送
 本スライドでは、fluentdによるログ抽出と転送について示します。

                   fluentdの設定         ■/etc/fluent/fluent.confに追加
                                                                                                      正規表現にマッチ
                                      <source>                                                        するログを抽出
         ログを監視し、条件に                     type tail
         合うログを抽出                        format
                                      /^"(?<time_local>[^"]*)","(?<remote_addr>[^"]*)","(?<uid_got>[^"]*)","(?<upstream_http_x
                                      _app_userid>[^"]*)","(?<remote_user>[^"]*)","(?<request>[^"]*)","(?<status>[^"]*)","(?<bo
  ログ                                  dy_bytes_sent>[^"]*)","(?<http_referer>[^"]*)","(?<http_user_agent>[^"]*)","(?<http_x_for
                                      warded_for>[^"]*)","(?<gzip_ratio>[^"]*)"$/
                                        path /var/log/nginx/detail_access.log
                                        pos_file /tmp/td-agent/apache-web.pos
                                        tag nginx.access
   fluentd                            </source>
              抽出
              ログ

                                       ■/etc/fluent/fluent.confに追加
                    定期的に               <match nginx.access>
                    S3に転送               type s3
                                        aws_key_id <ここにaccess_key_idを入れる>
                    fluentdの設定          aws_sec_key <ここにsecret_access_keyを入れる>
                                        s3_bucket <ここにbucket名を入れる>
  S3                                    s3_endpoint s3-ap-northeast-1.amazonaws.com
                                        path log/
                                        buffer_path /var/log/fluent/s3
                                        time_slice_format /nginx/%Y%m/detail_access-jp.tabine.www-web.log.%Y%m%d%H
              抽出                        time_slice_wait 10m
              ログ                       </match>

Copyright(C) 2012 Takeshi Mikami. All rights reserved.

Más contenido relacionado

La actualidad más candente

スレッド単位で権限分離を行うWebサーバのアクセス制御アーキテクチャ
スレッド単位で権限分離を行うWebサーバのアクセス制御アーキテクチャスレッド単位で権限分離を行うWebサーバのアクセス制御アーキテクチャ
スレッド単位で権限分離を行うWebサーバのアクセス制御アーキテクチャRyosuke MATSUMOTO
 
FIWARE Big Data Ecosystem : Cygnus and STH Comet
FIWARE Big Data Ecosystem : Cygnus and STH CometFIWARE Big Data Ecosystem : Cygnus and STH Comet
FIWARE Big Data Ecosystem : Cygnus and STH Cometfisuda
 
OpenStack Study#9 JOSUG
OpenStack Study#9 JOSUGOpenStack Study#9 JOSUG
OpenStack Study#9 JOSUGHideki Saito
 
標的型攻撃からどのように身を守るのか
標的型攻撃からどのように身を守るのか標的型攻撃からどのように身を守るのか
標的型攻撃からどのように身を守るのかabend_cve_9999_0001
 
Rablock applicatin dev_guide_v1.2
Rablock applicatin dev_guide_v1.2Rablock applicatin dev_guide_v1.2
Rablock applicatin dev_guide_v1.2Yoshi Nagase
 
The Latest Specs of OpenID Connect at #idcon 9
The Latest Specs of OpenID Connect at #idcon 9The Latest Specs of OpenID Connect at #idcon 9
The Latest Specs of OpenID Connect at #idcon 9Ryo Ito
 
MongoDBざっくり解説
MongoDBざっくり解説MongoDBざっくり解説
MongoDBざっくり解説知教 本間
 
IoT Agents をデバッグする方法 - FIWARE WednesdayWebinars
IoT Agents をデバッグする方法 - FIWARE WednesdayWebinarsIoT Agents をデバッグする方法 - FIWARE WednesdayWebinars
IoT Agents をデバッグする方法 - FIWARE WednesdayWebinarsfisuda
 

La actualidad más candente (8)

スレッド単位で権限分離を行うWebサーバのアクセス制御アーキテクチャ
スレッド単位で権限分離を行うWebサーバのアクセス制御アーキテクチャスレッド単位で権限分離を行うWebサーバのアクセス制御アーキテクチャ
スレッド単位で権限分離を行うWebサーバのアクセス制御アーキテクチャ
 
FIWARE Big Data Ecosystem : Cygnus and STH Comet
FIWARE Big Data Ecosystem : Cygnus and STH CometFIWARE Big Data Ecosystem : Cygnus and STH Comet
FIWARE Big Data Ecosystem : Cygnus and STH Comet
 
OpenStack Study#9 JOSUG
OpenStack Study#9 JOSUGOpenStack Study#9 JOSUG
OpenStack Study#9 JOSUG
 
標的型攻撃からどのように身を守るのか
標的型攻撃からどのように身を守るのか標的型攻撃からどのように身を守るのか
標的型攻撃からどのように身を守るのか
 
Rablock applicatin dev_guide_v1.2
Rablock applicatin dev_guide_v1.2Rablock applicatin dev_guide_v1.2
Rablock applicatin dev_guide_v1.2
 
The Latest Specs of OpenID Connect at #idcon 9
The Latest Specs of OpenID Connect at #idcon 9The Latest Specs of OpenID Connect at #idcon 9
The Latest Specs of OpenID Connect at #idcon 9
 
MongoDBざっくり解説
MongoDBざっくり解説MongoDBざっくり解説
MongoDBざっくり解説
 
IoT Agents をデバッグする方法 - FIWARE WednesdayWebinars
IoT Agents をデバッグする方法 - FIWARE WednesdayWebinarsIoT Agents をデバッグする方法 - FIWARE WednesdayWebinars
IoT Agents をデバッグする方法 - FIWARE WednesdayWebinars
 

Similar a Rails3+devise,nginx,fluent,S3構成でのアクセスログ収集と蓄積

データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回Naoyuki Yamada
 
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAkihiro Kuwano
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platformToru Yamaguchi
 
Rails and twitter #twtr_hack
Rails and twitter #twtr_hackRails and twitter #twtr_hack
Rails and twitter #twtr_hacki7a
 
多分モダンなWebアプリ開発
多分モダンなWebアプリ開発多分モダンなWebアプリ開発
多分モダンなWebアプリ開発tak-nakamura
 
Azure Monitor Logで実現するモダンな管理手法
Azure Monitor Logで実現するモダンな管理手法Azure Monitor Logで実現するモダンな管理手法
Azure Monitor Logで実現するモダンな管理手法Takeshi Fukuhara
 
Awsで構築したのだよ 01 ユーザのコンソール操作をログに残す
Awsで構築したのだよ 01 ユーザのコンソール操作をログに残すAwsで構築したのだよ 01 ユーザのコンソール操作をログに残す
Awsで構築したのだよ 01 ユーザのコンソール操作をログに残す聡 大久保
 
msal.js v2を触る
msal.js v2を触るmsal.js v2を触る
msal.js v2を触るDevTakas
 
mod_auth_ticket - Bringing Single-Sign-On to lighttpd
mod_auth_ticket - Bringing Single-Sign-On to lighttpdmod_auth_ticket - Bringing Single-Sign-On to lighttpd
mod_auth_ticket - Bringing Single-Sign-On to lighttpdTaisuke Yamada
 
NetBackup AIR CLI
NetBackup AIR CLINetBackup AIR CLI
NetBackup AIR CLIvxsejapan
 
Azure で Serverless 初心者向けタッチ&トライ
Azure で Serverless 初心者向けタッチ&トライAzure で Serverless 初心者向けタッチ&トライ
Azure で Serverless 初心者向けタッチ&トライMasanobu Sato
 
Cloudstack user group meeting in osaka
Cloudstack user group meeting in osakaCloudstack user group meeting in osaka
Cloudstack user group meeting in osakaNaotaka Jay HOTTA
 
Handlersocket etc. 20110906
Handlersocket etc. 20110906Handlersocket etc. 20110906
Handlersocket etc. 20110906akirahiguchi
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介Shinya Okano
 
20120528 aws meister-reloaded-awssd-kforjava-public
20120528 aws meister-reloaded-awssd-kforjava-public20120528 aws meister-reloaded-awssd-kforjava-public
20120528 aws meister-reloaded-awssd-kforjava-publicAmazon Web Services Japan
 
ログ管理のベストプラクティス
ログ管理のベストプラクティスログ管理のベストプラクティス
ログ管理のベストプラクティスAkihiro Kuwano
 
CodeIgniter 〜 2008年大躍進のPHPフレームワーク
CodeIgniter 〜 2008年大躍進のPHPフレームワークCodeIgniter 〜 2008年大躍進のPHPフレームワーク
CodeIgniter 〜 2008年大躍進のPHPフレームワークkenjis
 

Similar a Rails3+devise,nginx,fluent,S3構成でのアクセスログ収集と蓄積 (20)

データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
 
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティス
 
OpenStack API
OpenStack APIOpenStack API
OpenStack API
 
実践 NestJS
実践 NestJS実践 NestJS
実践 NestJS
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platform
 
G0042 h
G0042 hG0042 h
G0042 h
 
Rails and twitter #twtr_hack
Rails and twitter #twtr_hackRails and twitter #twtr_hack
Rails and twitter #twtr_hack
 
多分モダンなWebアプリ開発
多分モダンなWebアプリ開発多分モダンなWebアプリ開発
多分モダンなWebアプリ開発
 
Azure Monitor Logで実現するモダンな管理手法
Azure Monitor Logで実現するモダンな管理手法Azure Monitor Logで実現するモダンな管理手法
Azure Monitor Logで実現するモダンな管理手法
 
Awsで構築したのだよ 01 ユーザのコンソール操作をログに残す
Awsで構築したのだよ 01 ユーザのコンソール操作をログに残すAwsで構築したのだよ 01 ユーザのコンソール操作をログに残す
Awsで構築したのだよ 01 ユーザのコンソール操作をログに残す
 
msal.js v2を触る
msal.js v2を触るmsal.js v2を触る
msal.js v2を触る
 
mod_auth_ticket - Bringing Single-Sign-On to lighttpd
mod_auth_ticket - Bringing Single-Sign-On to lighttpdmod_auth_ticket - Bringing Single-Sign-On to lighttpd
mod_auth_ticket - Bringing Single-Sign-On to lighttpd
 
NetBackup AIR CLI
NetBackup AIR CLINetBackup AIR CLI
NetBackup AIR CLI
 
Azure で Serverless 初心者向けタッチ&トライ
Azure で Serverless 初心者向けタッチ&トライAzure で Serverless 初心者向けタッチ&トライ
Azure で Serverless 初心者向けタッチ&トライ
 
Cloudstack user group meeting in osaka
Cloudstack user group meeting in osakaCloudstack user group meeting in osaka
Cloudstack user group meeting in osaka
 
Handlersocket etc. 20110906
Handlersocket etc. 20110906Handlersocket etc. 20110906
Handlersocket etc. 20110906
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介
 
20120528 aws meister-reloaded-awssd-kforjava-public
20120528 aws meister-reloaded-awssd-kforjava-public20120528 aws meister-reloaded-awssd-kforjava-public
20120528 aws meister-reloaded-awssd-kforjava-public
 
ログ管理のベストプラクティス
ログ管理のベストプラクティスログ管理のベストプラクティス
ログ管理のベストプラクティス
 
CodeIgniter 〜 2008年大躍進のPHPフレームワーク
CodeIgniter 〜 2008年大躍進のPHPフレームワークCodeIgniter 〜 2008年大躍進のPHPフレームワーク
CodeIgniter 〜 2008年大躍進のPHPフレームワーク
 

Más de Takeshi Mikami

rdflintのvscode拡張の紹介とその実装方法
rdflintのvscode拡張の紹介とその実装方法rdflintのvscode拡張の紹介とその実装方法
rdflintのvscode拡張の紹介とその実装方法Takeshi Mikami
 
適切なクラスタ数を機械的に求める手法の紹介
適切なクラスタ数を機械的に求める手法の紹介適切なクラスタ数を機械的に求める手法の紹介
適切なクラスタ数を機械的に求める手法の紹介Takeshi Mikami
 
OAuth 2.0による認可の流れ
OAuth 2.0による認可の流れOAuth 2.0による認可の流れ
OAuth 2.0による認可の流れTakeshi Mikami
 
MapReduceによるConnected Components(連結成分)の見つけ方
MapReduceによるConnected Components(連結成分)の見つけ方MapReduceによるConnected Components(連結成分)の見つけ方
MapReduceによるConnected Components(連結成分)の見つけ方Takeshi Mikami
 
RDFチェックツール「rdflint」のご紹介 (LODチャレンジ2019受賞作品紹介 基盤技術部門優秀賞)
RDFチェックツール「rdflint」のご紹介 (LODチャレンジ2019受賞作品紹介 基盤技術部門優秀賞)RDFチェックツール「rdflint」のご紹介 (LODチャレンジ2019受賞作品紹介 基盤技術部門優秀賞)
RDFチェックツール「rdflint」のご紹介 (LODチャレンジ2019受賞作品紹介 基盤技術部門優秀賞)Takeshi Mikami
 
データサイエンスアイドル「小日向美穂」と考える「つながり」
データサイエンスアイドル「小日向美穂」と考える「つながり」データサイエンスアイドル「小日向美穂」と考える「つながり」
データサイエンスアイドル「小日向美穂」と考える「つながり」Takeshi Mikami
 
RDFのチェックツール「rdflint」と コミュニティによるオープンデータの作成
RDFのチェックツール「rdflint」とコミュニティによるオープンデータの作成RDFのチェックツール「rdflint」とコミュニティによるオープンデータの作成
RDFのチェックツール「rdflint」と コミュニティによるオープンデータの作成Takeshi Mikami
 
CircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウ
CircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウCircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウ
CircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウTakeshi Mikami
 
GitHubの機能を活用したGitHub Flowによる開発の進め方
GitHubの機能を活用したGitHub Flowによる開発の進め方GitHubの機能を活用したGitHub Flowによる開発の進め方
GitHubの機能を活用したGitHub Flowによる開発の進め方Takeshi Mikami
 
HBase CompleteBulkLoadその仕組み&発生した問題
HBase CompleteBulkLoadその仕組み&発生した問題HBase CompleteBulkLoadその仕組み&発生した問題
HBase CompleteBulkLoadその仕組み&発生した問題Takeshi Mikami
 
RDFチェックツール「rdflint」のご紹介
RDFチェックツール「rdflint」のご紹介RDFチェックツール「rdflint」のご紹介
RDFチェックツール「rdflint」のご紹介Takeshi Mikami
 
アーリース情報技術株式会社 会社案内 (2019/02/13)
アーリース情報技術株式会社 会社案内 (2019/02/13)アーリース情報技術株式会社 会社案内 (2019/02/13)
アーリース情報技術株式会社 会社案内 (2019/02/13)Takeshi Mikami
 
Spark MLlib ML Pipelines の概要 及びpysparkからの扱い方
Spark MLlib ML Pipelines の概要 及びpysparkからの扱い方Spark MLlib ML Pipelines の概要 及びpysparkからの扱い方
Spark MLlib ML Pipelines の概要 及びpysparkからの扱い方Takeshi Mikami
 
センサーによるデータ計測と異常検知の基本
センサーによるデータ計測と異常検知の基本センサーによるデータ計測と異常検知の基本
センサーによるデータ計測と異常検知の基本Takeshi Mikami
 
Webサイトのアクセスログによるユーザー属性推定
Webサイトのアクセスログによるユーザー属性推定Webサイトのアクセスログによるユーザー属性推定
Webサイトのアクセスログによるユーザー属性推定Takeshi Mikami
 
Google Cloud Dataflowによる データ変換処理入門
Google Cloud Dataflowによる データ変換処理入門Google Cloud Dataflowによる データ変換処理入門
Google Cloud Dataflowによる データ変換処理入門Takeshi Mikami
 
IoTでの機械学習活用イメージと強化学習のご紹介
IoTでの機械学習活用イメージと強化学習のご紹介IoTでの機械学習活用イメージと強化学習のご紹介
IoTでの機械学習活用イメージと強化学習のご紹介Takeshi Mikami
 
協調フィルタリング・アソシエーション分析によるレコメンド手法の紹介
協調フィルタリング・アソシエーション分析によるレコメンド手法の紹介協調フィルタリング・アソシエーション分析によるレコメンド手法の紹介
協調フィルタリング・アソシエーション分析によるレコメンド手法の紹介Takeshi Mikami
 
SparkMLlibで始めるビッグデータを対象とした機械学習入門
SparkMLlibで始めるビッグデータを対象とした機械学習入門SparkMLlibで始めるビッグデータを対象とした機械学習入門
SparkMLlibで始めるビッグデータを対象とした機械学習入門Takeshi Mikami
 

Más de Takeshi Mikami (20)

rdflintのvscode拡張の紹介とその実装方法
rdflintのvscode拡張の紹介とその実装方法rdflintのvscode拡張の紹介とその実装方法
rdflintのvscode拡張の紹介とその実装方法
 
適切なクラスタ数を機械的に求める手法の紹介
適切なクラスタ数を機械的に求める手法の紹介適切なクラスタ数を機械的に求める手法の紹介
適切なクラスタ数を機械的に求める手法の紹介
 
OAuth 2.0による認可の流れ
OAuth 2.0による認可の流れOAuth 2.0による認可の流れ
OAuth 2.0による認可の流れ
 
MapReduceによるConnected Components(連結成分)の見つけ方
MapReduceによるConnected Components(連結成分)の見つけ方MapReduceによるConnected Components(連結成分)の見つけ方
MapReduceによるConnected Components(連結成分)の見つけ方
 
RDFチェックツール「rdflint」のご紹介 (LODチャレンジ2019受賞作品紹介 基盤技術部門優秀賞)
RDFチェックツール「rdflint」のご紹介 (LODチャレンジ2019受賞作品紹介 基盤技術部門優秀賞)RDFチェックツール「rdflint」のご紹介 (LODチャレンジ2019受賞作品紹介 基盤技術部門優秀賞)
RDFチェックツール「rdflint」のご紹介 (LODチャレンジ2019受賞作品紹介 基盤技術部門優秀賞)
 
データサイエンスアイドル「小日向美穂」と考える「つながり」
データサイエンスアイドル「小日向美穂」と考える「つながり」データサイエンスアイドル「小日向美穂」と考える「つながり」
データサイエンスアイドル「小日向美穂」と考える「つながり」
 
RDFのチェックツール「rdflint」と コミュニティによるオープンデータの作成
RDFのチェックツール「rdflint」とコミュニティによるオープンデータの作成RDFのチェックツール「rdflint」とコミュニティによるオープンデータの作成
RDFのチェックツール「rdflint」と コミュニティによるオープンデータの作成
 
CircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウ
CircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウCircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウ
CircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウ
 
GitHubの機能を活用したGitHub Flowによる開発の進め方
GitHubの機能を活用したGitHub Flowによる開発の進め方GitHubの機能を活用したGitHub Flowによる開発の進め方
GitHubの機能を活用したGitHub Flowによる開発の進め方
 
HBase CompleteBulkLoadその仕組み&発生した問題
HBase CompleteBulkLoadその仕組み&発生した問題HBase CompleteBulkLoadその仕組み&発生した問題
HBase CompleteBulkLoadその仕組み&発生した問題
 
RDFチェックツール「rdflint」のご紹介
RDFチェックツール「rdflint」のご紹介RDFチェックツール「rdflint」のご紹介
RDFチェックツール「rdflint」のご紹介
 
アーリース情報技術株式会社 会社案内 (2019/02/13)
アーリース情報技術株式会社 会社案内 (2019/02/13)アーリース情報技術株式会社 会社案内 (2019/02/13)
アーリース情報技術株式会社 会社案内 (2019/02/13)
 
Spark MLlib ML Pipelines の概要 及びpysparkからの扱い方
Spark MLlib ML Pipelines の概要 及びpysparkからの扱い方Spark MLlib ML Pipelines の概要 及びpysparkからの扱い方
Spark MLlib ML Pipelines の概要 及びpysparkからの扱い方
 
SPARQL入門
SPARQL入門SPARQL入門
SPARQL入門
 
センサーによるデータ計測と異常検知の基本
センサーによるデータ計測と異常検知の基本センサーによるデータ計測と異常検知の基本
センサーによるデータ計測と異常検知の基本
 
Webサイトのアクセスログによるユーザー属性推定
Webサイトのアクセスログによるユーザー属性推定Webサイトのアクセスログによるユーザー属性推定
Webサイトのアクセスログによるユーザー属性推定
 
Google Cloud Dataflowによる データ変換処理入門
Google Cloud Dataflowによる データ変換処理入門Google Cloud Dataflowによる データ変換処理入門
Google Cloud Dataflowによる データ変換処理入門
 
IoTでの機械学習活用イメージと強化学習のご紹介
IoTでの機械学習活用イメージと強化学習のご紹介IoTでの機械学習活用イメージと強化学習のご紹介
IoTでの機械学習活用イメージと強化学習のご紹介
 
協調フィルタリング・アソシエーション分析によるレコメンド手法の紹介
協調フィルタリング・アソシエーション分析によるレコメンド手法の紹介協調フィルタリング・アソシエーション分析によるレコメンド手法の紹介
協調フィルタリング・アソシエーション分析によるレコメンド手法の紹介
 
SparkMLlibで始めるビッグデータを対象とした機械学習入門
SparkMLlibで始めるビッグデータを対象とした機械学習入門SparkMLlibで始めるビッグデータを対象とした機械学習入門
SparkMLlibで始めるビッグデータを対象とした機械学習入門
 

Rails3+devise,nginx,fluent,S3構成でのアクセスログ収集と蓄積

  • 1. Rails3+devise,nginx,fluent,S3構成での アクセスログ収集と蓄積 アクセス分析に活用することを前提として、 上記構成で構築したアプリケーションの アクセスログ収集と蓄積方法を説明します 2012年8月22日 三上威 (@takemikami) ※本文書の詳細は以下のブログでも説明しています。 http://takemikami.com/technote/archives/658 Copyright(C) 2012 Takeshi Mikami. All rights reserved.
  • 2. 目次 本文書は次の構成をとります • 概要 • アクセスログ収集・蓄積の全体像 • trackingIDの付与とアクセスログへの出力 • アプリケーション上のユーザIDとアクセスログの紐付け • 詳細アクセスログの出力 • fluentdによるログ抽出と転送 Copyright(C) 2012 Takeshi Mikami. All rights reserved.
  • 3. 概要 本文書の概要を示します • ユーザ認証が存在するWebアプリのアクセスログを有効に分析 したい ⇒以下の2点を行う必要がある – Webサーバからアクセスログを集める – Webアプリのユーザとアクセスログを紐付ける • 本文書では、次の構成のWebアプリケーションで「アクセスログ の収集と蓄積」を行う流れを説明します – Webサーバ: nginx – 開発フレームワーク: Ruby on Rails (認証プラグインとしてdevise) – ログ集約: fluentd – ログの格納先: Amazon S3 Copyright(C) 2012 Takeshi Mikami. All rights reserved.
  • 4. アクセスログ収集・蓄積の全体像 本スライドでは、アクセスログ収集と蓄積の全体像を示します。 ログの出力 ①ユーザの訪問 nginx Rails アプリDB ユーザ ④tracking用の ②アプリからユーザID情報を送信 cookie情報を送信 ③アクセスログにユーザID トラッキング用cookie情報を出力 ログ ①ログを監視し、条件 に合うログを抽出 S3 抽出したログを集計し、 fluentd 分析に活用する想定 抽出 抽出 ログ ログ ②定期的にS3に転送 マーケター ログの収集・分析 Copyright(C) 2012 Takeshi Mikami. All rights reserved.
  • 5. trackingIDの付与とアクセスログへの出力 本スライドでは、nginxの機能を用いたtrackingIDの付与方法を示します。 再訪問時のcookieイメージ ⇒2度目以降の訪問についてクライアントを一意に特定できる 度目以降の訪問についてクライアントを一意に特定できる についてクライアント Cookie: uid=XXXXXXXXXXXXXXXXXXXXXXXX; ユーザの訪問 初回訪問:cookie無し nginxの設定 再訪問:cookie有り ■/etc/nginx/conf.d/default.confに追加 userid on; userid_name uid; userid_path /; nginx userid_expires 365d; ユーザ tracking用のcookie情 報を送信(初回訪問時 のみ) 初回訪問時のcookie設定イメージ Set-Cookie: uid=XXXXXXXXXXXXXXXXXXXXXXXX; path=/; expires=Thu, 20-Aug-2013 09:25:55 GMT; HttpOnly Copyright(C) 2012 Takeshi Mikami. All rights reserved.
  • 6. アプリケーション上のユーザIDとアクセスログの紐付け 本スライドでは、RailsアプリのユーザIDをアクセスログに紐づける方法を示します。 HTTP応答ヘッダ イメージ HTTP応答ヘッダ イメージ X-App-Userid: 2 X-App-Userid: 2 ユーザIDは送信さ アプリからユーザIDを送信 ⇒アプリから送信した会員IDと アプリから送信した会員 と から送信した会員 れない nginxのログを紐付けできる のログを紐付けできる nginx Rails アプリDB ユーザ Railsアプリへの改修 nginxでユーザID ヘッダを削除 ■「app/controllers/application_controller.rb」 class ApplicationController < ActionController::Base nginxの設定 protect_from_forgery after_filter :add_userid_toheader def add_userid_toheader ■/etc/nginx/conf.d/default.confに追加 response.headers["X-App-Userid"] proxy_hide_header X-App-Userid; = "#{user_signed_in? ? session['warden.user.user.key'][1][0] : nil}" end end Copyright(C) 2012 Takeshi Mikami. All rights reserved.
  • 7. 詳細アクセスログの出力 本スライドでは、詳細アクセスログの出力方法を示します。 nginxの設定 ■/etc/nginx/conf.d/default.confに追加 log_format detail_accesslog nginx '"$time_local","$remote_addr","$uid_got","$upstream_http_x_app_userid","$remote_user","$re quest","$status","$body_bytes_sent","$http_referer","$http_user_agent","$http_x_forwarded_f or","$gzip_ratio"'; access_log /var/log/nginx/detail_access.log detail_accesslog; ※ログ出力フォーマットの指定 trackingID: $uid_got 例)uid=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ユーザID: $upstream_http_x_app_userid 例)2 ログ 出力ログのイメージ "21/Aug/2012:14:10:09 +0900","192.168.199.1","uid=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","2","-","GET / HTTP/1.1","304","0","-","Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.79 Safari/537.1","-","-" Copyright(C) 2012 Takeshi Mikami. All rights reserved.
  • 8. fluentdによるログ抽出と転送 本スライドでは、fluentdによるログ抽出と転送について示します。 fluentdの設定 ■/etc/fluent/fluent.confに追加 正規表現にマッチ <source> するログを抽出 ログを監視し、条件に type tail 合うログを抽出 format /^"(?<time_local>[^"]*)","(?<remote_addr>[^"]*)","(?<uid_got>[^"]*)","(?<upstream_http_x _app_userid>[^"]*)","(?<remote_user>[^"]*)","(?<request>[^"]*)","(?<status>[^"]*)","(?<bo ログ dy_bytes_sent>[^"]*)","(?<http_referer>[^"]*)","(?<http_user_agent>[^"]*)","(?<http_x_for warded_for>[^"]*)","(?<gzip_ratio>[^"]*)"$/ path /var/log/nginx/detail_access.log pos_file /tmp/td-agent/apache-web.pos tag nginx.access fluentd </source> 抽出 ログ ■/etc/fluent/fluent.confに追加 定期的に <match nginx.access> S3に転送 type s3 aws_key_id <ここにaccess_key_idを入れる> fluentdの設定 aws_sec_key <ここにsecret_access_keyを入れる> s3_bucket <ここにbucket名を入れる> S3 s3_endpoint s3-ap-northeast-1.amazonaws.com path log/ buffer_path /var/log/fluent/s3 time_slice_format /nginx/%Y%m/detail_access-jp.tabine.www-web.log.%Y%m%d%H 抽出 time_slice_wait 10m ログ </match> Copyright(C) 2012 Takeshi Mikami. All rights reserved.