Your SlideShare is downloading. ×
Rails3+devise,nginx,fluent,S3構成でのアクセスログ収集と蓄積
Rails3+devise,nginx,fluent,S3構成でのアクセスログ収集と蓄積
Rails3+devise,nginx,fluent,S3構成でのアクセスログ収集と蓄積
Rails3+devise,nginx,fluent,S3構成でのアクセスログ収集と蓄積
Rails3+devise,nginx,fluent,S3構成でのアクセスログ収集と蓄積
Rails3+devise,nginx,fluent,S3構成でのアクセスログ収集と蓄積
Rails3+devise,nginx,fluent,S3構成でのアクセスログ収集と蓄積
Rails3+devise,nginx,fluent,S3構成でのアクセスログ収集と蓄積
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

6,124

Published on

アクセス分析に活用することを前提として、Rails3+devise,nginx,fluent,S3構成で構築したアプリケーションのアクセスログ収集と蓄積方法を説明します。 …

アクセス分析に活用することを前提として、Rails3+devise,nginx,fluent,S3構成で構築したアプリケーションのアクセスログ収集と蓄積方法を説明します。
※本文書の詳細は以下のブログでも説明しています。
http://takemikami.com/technote/archives/658

0 Comments
14 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
6,124
On Slideshare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
26
Comments
0
Likes
14
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 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 S3Copyright(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; HttpOnlyCopyright(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 endCopyright(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.

×