Upgrade to Pro — share decks privately, control downloads, hide ads and more …

20171019_aws_startup_tech

morioka shuhei
October 19, 2017
6.8k

 20171019_aws_startup_tech

morioka shuhei

October 19, 2017
Tweet

Transcript

  1. 改めて今日のお話し 下記3 つのAWS の機能を使って、 行動ログ分析の基盤 を作ったというお話し Kinesis Firehose Athena QuickSight

    このシステムを作る際の作業内容・ 注意点とコストが 掛かるポイントを実際に運用した経験を元に話します ※ 何も無いところから手探りのログ基盤作りなので、 間違った こと言ってたら色々 指摘して頂けると嬉しいです :bow:
  2. 会社: Speee 所属部署: 開発基盤部 / ヌリカエ 名前: 森岡周平 GitHub Account:

    Selmertsx サー バー サイドエンジニア 業務での使用言語: 主にRuby AWS 歴: 1 年 ( たまに触る程度)
  3. やりたいこと 社内のアドバイザー の行動量に対する、 利益 ( お客様の満足度と 施工業者様の売上 ) を最大化したい アドバイザー

    は専門的な知識や相場の把握が求められる アドバイザー の育成には時間が掛かり、 簡単に採用できない 一人あたりの効率を最大化することが事業の成長に直結 見たいデー タ アドバイザー の通話時間 アドバイザー の通話回数 アドバイザー の管理画面の操作内容
  4. アドバイザー が利用しているツー ル 顧客への架電業務 Android App ( 出先でも対応できるように) Windows App

    ( 通常利用するもの) 施工業者への紹介業務 Web App 上記端末の操作ログが取得できなければならない
  5. Kinesis Firehose 任意のデー タを API だけでS3/RedShift に送信できる機能 Delivery Stream の設定はコンソー

    ルから5 分で可能 フロントのJS やアプリからもログが送れる # ruby sample code client.put_record( delivery_stream_name: "DeliveryStreamName", record: { data: [name,path,time].to_csv } ) #s3://dict/year/month/day/hour/xxx 森岡周平,/path/nurikae_app/a,2017-06-01 05:58:15.979 森岡周平,/path/nurikae_app/b,2017-06-01 05:58:19.326 森岡周平,/path/nurikae_app/c,2017-06-01 05:58:22.507
  6. ユー ザー の行動ログをSQL で分析 ex: Action A から Action B

    までの時間を算出するSQL SELECT "operator_name", "log_date", "operatability", "total_elapsed_time" FROM (SELECT operator_name, date(created_at) AS log_date, operatability, sum(elapsed_time) AS total_elapsed_time FROM (SELECT operator_name, created_at, lag(operatability) over(partition by operator_name, date(created_at) COALESCE(date_diff('minute', lag(created_at) over(partition by ORDER BY created_at), created_at), 0) AS elapsed_time FROM nurikae.operatability_histories ORDER BY created_at asc) AS elapsed_time_relation WHERE operatability is NOT NULL GROUP BY operator_name, date(created_at),operatability ORDER BY log_date, operatability asc) AS "operator elapsed time query"
  7. エンドポイント比較表 現状のデー タ量において 種別 自由度 運用/ 実装 費用 scalability 自前実装

    ◯ ☓ ☓ ◯ Kinesis Stream △ △ ◯ ◯ Kinesis Firehose ☓ ◯ ◯ ◯ 自前実装した場合、S3 だけでなくRDS に出力するなど柔軟にできるが、 uentd のaggregater をメンテナンスしなければならない Kinesis Firehose では1 度 S3 に置くしか無い Kinesis Firehose には簡便性という利点もある. stream を指定してAWS Cli のAPI を叩くだけで実現可能 Kinesis Firehose の維持費は大体 200000 message で3 円
  8. 利用方法と運用上の注意 Amazon Athena Partition 効いたQuery を実行する Firehose で使うときは ALTER TABLE

    ADD でPartition を切る Kinesis Firehose ALITER TABLE ADD を使わなければならない理由 Quick Sight SPICE を有効活用してAthena へのアクセスを減らそう 大人数で共有するにはちょっと向いてないかも?
  9. 利用方法と運用上の注意 Amazon Athena Partition 効いたQuery を実行する Firehose で使うときは ALTER TABLE

    ADD でPartition を切る Kinesis Firehose ALITER TABLE ADD を使わなければならない理由 Quick Sight SPICE を有効活用してAthena へのアクセスを減らそう 大人数で共有するにはちょっと向いてないかも?
  10. Athena の利用料金 基本的にQuickSight 経由でQuery を実行 課金ポイントはQuery 実行時にScan したデー タ量 値段は

    $5/TB ( 最小単位は10MB で¥0.006) 参考: 下記のデー タフォー マットの約3 万件のデー タが無圧縮で1MB desc operatability_histories; operator_name string operatability string created_at timestamp
  11. Partition 効いたQuery を実行する # Partition を気にしていないQuery (36MB 検索対象) select *

    from admin_requests; # (Run time: 27.7 seconds, Data scanned: 36.1MB) # Partition の内容確認 SHOW PARTITIONS admin_requests; > ingestdatetime=2017-06-18-13... # Partition を使ったQuery の発行 select * from admin_requests where ingestdatetime >= '2017-10-16-09'; # (Run time: 1.54 seconds, Data scanned: 205.01KB) 10MB 以上の単位で partition を切るのが良さそう
  12. Partition の設定方法 S3 に格納する際に hive format で格納する % aws s3

    ls s3://xxxx/samples/hive-ads/tables/impressions/ PRE dt=2009-04-12-13-00/ PRE dt=2009-04-12-13-05/ ALTER TABLE ADD PARTITION を利用する <= 今回はコレ ALTER TABLE admin_member_access ADD PARTITION (year='2017', month='05', day='29') location 's3://xxxx/admin_requests/2017/05/29/' # sidekiq で定期的に実行 ※ 理由については Kinesis Firehose のところで説明します 参考URL:https://dev.classmethod.jp/cloud/aws/athena-partition-reinvent/
  13. 利用方法と運用上の注意 Amazon Athena Partition 効いたQuery を実行する Firehose で使うときは ALTER TABLE

    ADD でPartition を切る Kinesis Firehose ALITER TABLE ADD を使わなければならない理由 Quick Sight SPICE を有効活用してAthena へのアクセスを減らそう 大人数で共有するにはちょっと向いてないかも?
  14. Kinesis Firehose の利用料金 転送量 1GB あたり$0.029 で¥3 (Ohio region) 1

    USD => 111.931945 円 (2017/10/16) 1 レコー ドあたりの送信量は5KB 単位で繰り上げ 大体 200000 message で1GB => 3 円 S3 の料金体系にも影響を受ける Kinesis Firehose はS3 にupload する前のbuffer 一定の時間・ 容量でS3 にupload する S3 に格納する際のbuffer size は考える必要あり Athena で検索することも考えると、 ある程度大きくした 方が良さそう
  15. 利用上の注意 デー タ格納時にS3 のパスを指定出来ない Hive フォー マットでの格納が不可 Athena と連携する場合パー ティションの追加は

    ALTER TABLE ADD で行う必要がある aws> s3 ls sample/admin_requests/2017/10/01/01/ 2017-10-01 10:01:36 94 sample-5-2017-10-01-01-00-33-xxx 2017-10-01 10:09:33 4831 sample-5-2017-10-01-01-08-31-xxx 2017-10-01 10:10:34 1906 sample-5-2017-10-01-01-09-32-xxx
  16. 利用方法と運用上の注意 Amazon Athena Partition 効いたQuery を実行する Firehose で使うときは ALTER TABLE

    ADD でPartition を切る Kinesis Firehose ALITER TABLE ADD を使わなければならない理由 Quick Sight SPICE を有効活用してAthena へのアクセスを減らそう 大人数で共有するにはちょっと向いてないかも?
  17. 基本的な料金体系 1 user $13/month ( 年契約で $9) SPICE の容量1GB あたり$0.25

    ( 基本 1 user 10GB) SPICE デー タの集計を高速化するためのエンジン ここにデー タを入れておけば集計が高速で行われる SPICE is Amazon QuickSight's in-memory optimized calculation engine, designed speci cally for fast, ad hoc data visualization. “ “
  18. SPICE を使ってAthena のアクセスを減らす Athena の集計結果を格納する場所 SPICE にデー タを読み込んでおくと、QuickSight で見たいデ ー

    タを修正しても、Athena にデー タを再取得しなくなる SPICE のデー タ更新を定期的に実行する機能もある QuickSight の利用上の注意 閲覧のみアカウントが存在しない 大人数で情報を共有するのには不向きか
  19. まとめ Kinesis Firehose, Athena, QuickSight を使って行動 ログ分析の基盤を作った 料金は$15 程度 Kinesis

    Firehose はスケー ラビリティに注目される けど簡便性も注目したい!