Slide 1

Slide 1 text

AWS Mobile SDKで始めるスケーラブルなログ収集 Gunosy Inc. 2016.04 @y_matsuwitter

Slide 2

Slide 2 text

2 ©Gunosy Inc. ⾃⼰紹介 n  Gunosy Inc. –  開発本部執⾏役員 n  業務 –  開発全般のマネジメント –  Go⾔語布教係 –  パフォーマンスチューニング –  ISUCONとか好きです n  担当 –  右⼿でiOS、左⼿でAndroid –  Web –  Infrastructure(AWSのみ) n  最近の興味 –  ViveとOculus製品版買いました 松本 勇気 @y_matsuwitter

Slide 3

Slide 3 text

3 ©Gunosy Inc. 今⽇の話 n  ⾃⼰紹介 n  これまでのログ収集について –  計測ツールの利⽤ –  サーバサイドのアクセスログ –  専⽤のfluentdプロキシ n  AWS Mobile SDKの紹介 –  AWSの認証とCognito –  使えるサービス群 –  Kinesisとは n  PureeとKinesisでさくさくログ収集 –  Pureeを使ってみる –  iOSとログ収集 –  Androidとログ収集 モバイルアプリでのログ収集のこれまでと、AWS Mobileによるログの収集

Slide 4

Slide 4 text

4 ©Gunosy Inc. これまでのログ収集の歴史

Slide 5

Slide 5 text

5 ©Gunosy Inc. よくあるパターン: 計測ツールを使う 仮説検証に対して、ツールが提供できる分析範囲は狭い n  ⼀般的なメトリクスは取れる –  画⾯ごとのPV –  ボタンを押した、などのカスタムイベン ト n  よく使われるもの –  Google Analytics –  Reproなど n  難点 –  ユーザー単位の細かい分析が難しい –  計測イベント数の上限あり おそらく多くのサービスで計測サービスを利⽤しているのではないでしょうか mixpanel Flurry Google Analytics Repro

Slide 6

Slide 6 text

6 ©Gunosy Inc. サーバのアクセスログを使う ユーザー⾏動と少々離れてるログが多く、情報が不⾜ n  今のシステムに対して組み込みやすい –  Nginxのログをfluentdで収集 –  ユーザー単位でどんな機能利⽤があっ たか、パターンを探ることができる n  よく使われるもの –  FluentdからRedshift/BigQueryに送 るケースが多いかも –  サマリ値をElasticsearchへ n  難点 –  計測イベント ≠ APIアクセス データのやり取りを実⾏するAPIのアクセスからログを集める APIサーバ アクセスログ 通常の APIアクセス

Slide 7

Slide 7 text

7 ©Gunosy Inc. ログコレクタへのプロキシAPIを作ってみる LGTM、 しかしスケーラビリティが必要 n  ログコレクタ⾃体は簡易に作れる –  グノシーではGoで任意のログをfluent dへ送る仕組みを実装 n  求めていたログ収集 –  仮説に対して必要なログが集められる –  クライアント側も⾃由にログの追加が できる時代がやってきた n  難点 –  ログ送りすぎ問題、各レイヤで詰まる クライアントから任意のログをAPI経由で送れるようにする ログ収集サーバ 各イベントログ 必要なイベント ごとに送付

Slide 8

Slide 8 text

8 ©Gunosy Inc. AWS Mobile SDKの紹介

Slide 9

Slide 9 text

9 ©Gunosy Inc. モバイル開発にAWSの⼒を クライアント側だけで多くの機能を作成可能に n  各サービスへの認証系をサポート n  サーバサイドの作業を減らす –  データストレージとのやり取りを直接 クライアントから –  ユーザー認証など必要な機能もSDKの みで可能 AWSの各サービスへのアクセスをサポートする公式なライブラリ

Slide 10

Slide 10 text

10 ©Gunosy Inc. 使えるサービス群 ⼀例として、現状これらのサービスをクライアントから直接利⽤している Amazon Kinesis Amazon Cognito Amazon SNS Cognito AWS SNS Kinesis ユーザーの認証、AWS系のサービスへの認証・認可、設定値のアプリ間同期など。 モバイル通知(APNS、GCM)のトークンを管理し、通知送信などを可能にする。 様々なイベントデータを送信、一定量をKinesisに保持し、ストリーム処理に繋げる。 Amazon Mobile Analy5cs MobileAnalytics AWSが提供するモバイルサービスの分析サービス。

Slide 11

Slide 11 text

11 ©Gunosy Inc. Kinesisとは サーバ管理不要な⼤規模データストリームの集計・変換サービス n  ⼤量のログを受け取り処理するための受け⽫ –  同時処理性能を簡単に増減させられる –  24時間分のログを溜める n  主にStream処理、ログの1次加⼯に利⽤ –  Kinesisのログを逐次その他システム で処理する –  例1:ログを加⼯してS3に永続化 –  例2:逐次的にログ集計、短時間でサ ービスに反映する n  何が嬉しいか –  ログデータの安定した配送を簡単に実 現できる –  Kinesisの関連プロダクトとの連携が 将来⾒込める ・行動ログ ・属性ログ …etc S3に対して ログを保存 EMRからログの分析 LOG LOG LOG LOG LOG LOG

Slide 12

Slide 12 text

12 ©Gunosy Inc. PureeとKineisisでログを送る

Slide 13

Slide 13 text

13 ©Gunosy Inc. Pureeとは ログ送信だけでなく、再送設定やバッファリングなど有⽤な機能多い n  iOS/Android双⽅のライブラリあり n  クライアントサイド向けログコレクタ –  fluentdと似た機構をもち、イベント を適宜バッファリングしつつ⾮同期送信 n  ⾃⾝でOutputPluginを書く –  Google Analyticsなどツールへの送信 –  指定のログごとに違うストラテジでロ グを送ることが可能 Cookpad社製のクライアント向けログコレクタ 出所: https://github.com/cookpad/puree-ios

Slide 14

Slide 14 text

14 ©Gunosy Inc. PureeのBufferedOutputとKinesis 複数のログをBufferingし、KinesisへのBatchリクエストとして⼀度で送信

Slide 15

Slide 15 text

15 ©Gunosy Inc. Androidの場合

Slide 16

Slide 16 text

16 ©Gunosy Inc. 実際の利⽤に関して ログの性質に応じて送信のパラメタをチューニングする n  Swift: Enumを利⽤ n  Android:Classを利⽤ n  出来る限り早く送付してほしいデータ –  Bufferサイズを⼩さく n  収集頻度が⾼く、リアルタイム性の低いもの –  Bufferサイズを⼤きく取り、別なQueu eから送信する ログごとにClassやEnumを定義、Output先を頻度で変更してしている LOG LOG LOG LOG バッファ・サイズを 種類ごとに変更 高頻度ログ 低頻度ログ

Slide 17

Slide 17 text

17 ©Gunosy Inc. まとめ

Slide 18

Slide 18 text

18 ©Gunosy Inc. まとめ Kinesis + Pureeで理想的・スケーラブルなログ収集 正しい分析ログを集めるために考えることは多い。 よりよいログ収集とは KinesisとPureeでログ収集 n  仮説に寄り添うログ収集 –  システム都合のログではなく、 必要なログを集める仕組み n  容易にログを追加可能 –  ログ追加のたびに設定などを要 しないクライアントに優しい仕 組み n  スケーラビリティの担保 –  ログをいくら投げてもスケール n  任意のデータをKinesisへ –  所定のjsonをKinesisに好きな タイミングで投げる n  Pureeで送信を容易に –  PureeのBuffredOutputから KinesisへBatchRequestで送信 –  送信失敗に対する対処が容易

Slide 19

Slide 19 text

19 ©Gunosy Inc. Gunosyでは、より新しい技術に挑戦しつつ ビジネス成果を上げたい! そんなエンジニアを募集しています!