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

Client side log collection with AWS Mobile SDK

Client side log collection with AWS Mobile SDK

Gunosy Beer #4にて

y_matsuwitter

April 25, 2016
Tweet

More Decks by y_matsuwitter

Other Decks in Programming

Transcript

  1. 2 ©Gunosy Inc. ⾃⼰紹介 n  Gunosy Inc. –  開発本部執⾏役員 n 

    業務 –  開発全般のマネジメント –  Go⾔語布教係 –  パフォーマンスチューニング –  ISUCONとか好きです n  担当 –  右⼿でiOS、左⼿でAndroid –  Web –  Infrastructure(AWSのみ) n  最近の興味 –  ViveとOculus製品版買いました 松本 勇気 @y_matsuwitter
  2. 3 ©Gunosy Inc. 今⽇の話 n  ⾃⼰紹介 n  これまでのログ収集について –  計測ツールの利⽤

    –  サーバサイドのアクセスログ –  専⽤のfluentdプロキシ n  AWS Mobile SDKの紹介 –  AWSの認証とCognito –  使えるサービス群 –  Kinesisとは n  PureeとKinesisでさくさくログ収集 –  Pureeを使ってみる –  iOSとログ収集 –  Androidとログ収集 モバイルアプリでのログ収集のこれまでと、AWS Mobileによるログの収集
  3. 5 ©Gunosy Inc. よくあるパターン: 計測ツールを使う 仮説検証に対して、ツールが提供できる分析範囲は狭い n  ⼀般的なメトリクスは取れる –  画⾯ごとのPV

    –  ボタンを押した、などのカスタムイベン ト n  よく使われるもの –  Google Analytics –  Reproなど n  難点 –  ユーザー単位の細かい分析が難しい –  計測イベント数の上限あり おそらく多くのサービスで計測サービスを利⽤しているのではないでしょうか mixpanel Flurry Google Analytics Repro
  4. 6 ©Gunosy Inc. サーバのアクセスログを使う ユーザー⾏動と少々離れてるログが多く、情報が不⾜ n  今のシステムに対して組み込みやすい –  Nginxのログをfluentdで収集 – 

    ユーザー単位でどんな機能利⽤があっ たか、パターンを探ることができる n  よく使われるもの –  FluentdからRedshift/BigQueryに送 るケースが多いかも –  サマリ値をElasticsearchへ n  難点 –  計測イベント ≠ APIアクセス データのやり取りを実⾏するAPIのアクセスからログを集める APIサーバ アクセスログ 通常の APIアクセス
  5. 7 ©Gunosy Inc. ログコレクタへのプロキシAPIを作ってみる LGTM、 しかしスケーラビリティが必要 n  ログコレクタ⾃体は簡易に作れる –  グノシーではGoで任意のログをfluent

    dへ送る仕組みを実装 n  求めていたログ収集 –  仮説に対して必要なログが集められる –  クライアント側も⾃由にログの追加が できる時代がやってきた n  難点 –  ログ送りすぎ問題、各レイヤで詰まる クライアントから任意のログをAPI経由で送れるようにする ログ収集サーバ 各イベントログ 必要なイベント ごとに送付
  6. 9 ©Gunosy Inc. モバイル開発にAWSの⼒を クライアント側だけで多くの機能を作成可能に n  各サービスへの認証系をサポート n  サーバサイドの作業を減らす – 

    データストレージとのやり取りを直接 クライアントから –  ユーザー認証など必要な機能もSDKの みで可能 AWSの各サービスへのアクセスをサポートする公式なライブラリ
  7. 10 ©Gunosy Inc. 使えるサービス群 ⼀例として、現状これらのサービスをクライアントから直接利⽤している Amazon Kinesis Amazon Cognito Amazon

    SNS Cognito AWS SNS Kinesis ユーザーの認証、AWS系のサービスへの認証・認可、設定値のアプリ間同期など。 モバイル通知(APNS、GCM)のトークンを管理し、通知送信などを可能にする。 様々なイベントデータを送信、一定量をKinesisに保持し、ストリーム処理に繋げる。 Amazon Mobile Analy5cs MobileAnalytics AWSが提供するモバイルサービスの分析サービス。
  8. 11 ©Gunosy Inc. Kinesisとは サーバ管理不要な⼤規模データストリームの集計・変換サービス n  ⼤量のログを受け取り処理するための受け⽫ –  同時処理性能を簡単に増減させられる – 

    24時間分のログを溜める n  主にStream処理、ログの1次加⼯に利⽤ –  Kinesisのログを逐次その他システム で処理する –  例1:ログを加⼯してS3に永続化 –  例2:逐次的にログ集計、短時間でサ ービスに反映する n  何が嬉しいか –  ログデータの安定した配送を簡単に実 現できる –  Kinesisの関連プロダクトとの連携が 将来⾒込める ・行動ログ ・属性ログ …etc S3に対して ログを保存 EMRからログの分析 LOG LOG LOG LOG LOG LOG
  9. 13 ©Gunosy Inc. Pureeとは ログ送信だけでなく、再送設定やバッファリングなど有⽤な機能多い n  iOS/Android双⽅のライブラリあり n  クライアントサイド向けログコレクタ – 

    fluentdと似た機構をもち、イベント を適宜バッファリングしつつ⾮同期送信 n  ⾃⾝でOutputPluginを書く –  Google Analyticsなどツールへの送信 –  指定のログごとに違うストラテジでロ グを送ることが可能 Cookpad社製のクライアント向けログコレクタ 出所: https://github.com/cookpad/puree-ios
  10. 16 ©Gunosy Inc. 実際の利⽤に関して ログの性質に応じて送信のパラメタをチューニングする n  Swift: Enumを利⽤ n  Android:Classを利⽤

    n  出来る限り早く送付してほしいデータ –  Bufferサイズを⼩さく n  収集頻度が⾼く、リアルタイム性の低いもの –  Bufferサイズを⼤きく取り、別なQueu eから送信する ログごとにClassやEnumを定義、Output先を頻度で変更してしている LOG LOG LOG LOG バッファ・サイズを 種類ごとに変更 高頻度ログ 低頻度ログ
  11. 18 ©Gunosy Inc. まとめ Kinesis + Pureeで理想的・スケーラブルなログ収集 正しい分析ログを集めるために考えることは多い。 よりよいログ収集とは KinesisとPureeでログ収集

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