Introduction of Fastly log visualization case in Money forward
株式会社マネーフォワード2018年02月22日「Fastlyのログをサーバレスで可視化してみた」Yosuke Suzuki
View Slide
自己紹介2Yosuke Suzuki Monye Forward,Inc. (CISO室 サービスインフラグループ)● 経歴(ほぼずっと金融のインフラエンジニア)○ 2005~2008 Fujitsu FIP, Inc.○ 2008~2014 Simplex Technology, Inc.○ 2015~2016 American Family Life Assurance Company of Columbus( Aflac )○ 2017~ Money Forward, Inc.© Money Forward,Inc.
マネーフォワードのご紹介(一瞬で済ませる)3
Mission/Vision/Value個人のお金の悩みや不安の解消、事業者の経営改善に貢献し、日本でNo1の「お金のプラットフォーム」になることを目指しています。Missionお金を前へ。人生をもっと前へ。「お金」は、人生においてツールでしかありません。しかし「お金」とは、自身と家族の身を守るため、また夢を実現するために必要不可欠な存在でもあります。私たちは「お金と前向きに向き合い、可能性を広げることができる」サービスを提供することにより、ユーザーの人生を飛躍的に豊かにすることで、より良い社会創りに貢献していきます。Visionすべての人の、「お金のプラットフォーム」になる。オープンかつ公正な「お金のプラットフォーム」を構築すること、本質的なサービスを提供することにより、個人や法人すべての人のお金の課題を解決します。ValueUser Focus私たちは、いかなる制約があったとしても、常にユーザーを見つめ続け、本質的な課題を理解し、ユーザーの想像を超えたソリューションを提供します。Technology Driven私たちは、テクノロジーこそが世界を大きく変えることができると信じています。テクノロジーを追求し、それをサービスとして社会へ提供していくことで、イノベーションを起こし続けます。Fairness私たちは、ユーザー、社員、株主、社会などのすべてのステークホルダーに対してフェアであること、オープンであることを誓います。4
提供サービスPFM(Personal Financial Management)事業自動家計簿・資産管理サービス ビジネス向けクラウドサービス5MFクラウド事業© Money Forward,Inc.
Fastlyを使ってみました6
Fastly導入してみて© Money Forward,Inc.7● 全てAPIで操作でき、コード化できる● コンフィグ伝搬、キャッシュ削除が高速(数〜十数秒程度)● LB、WAF、イメージオプティマイザとCDNに留まらないリッチな機能● エンジニアのサポートが手厚い● しかも安いです。ELBとリバースプロキシをFastlyで置き換える形で使ってます。サーバを一つ排除できた。(サーバレスということなので )
個人的に最高なのは柔軟なコンフィグレーション(これのお陰で弊社はセキュアなCDNを実現できた)8
ログ設定の柔軟性を活かしたログの可視化事例をお見せします(サーバレスで実現した)9
国別リクエスト数。海外からも使ってくれてる。© Money Forward,Inc.10● FastlyからGeoロケーション情報を取得。● リクエストを数えて、地図にマッピング
クライアント別リクエスト数。最多リクエストはRuby!?11
MFって会社をBANするところでしたw12
どのように実現しているのか?(本題)13
こんなシステム構成© Money Forward,Inc.14● ストリーミングインサートの費用削減の為に、GCSを挟んでBigQueryヘ。● GKEで5分に1回、GCSからBigQueryにアップロードするようにリクエスト。● 注意点2点。○ BQにはアップロード回数に上限あり。(1分に1回とかダメ)○ GCSとBQのリージョンは、揃える。分けるとトラフィック料金がかかり、GCS挟む意味薄くなる。
あれ!?15
16コンテナ使ってるよ。サーバレス is 何??
本当はこんな構成にしたかった© Money Forward,Inc.17● fastlyからGCSに5分に1回ログ転送。● GCSにログが保管された事をトリガーにCloudfunctionがコールされ、BigQueryにアップロード
Question:何故やらなかったのか?(Cloudfunctionのアンチパターンご紹介)18
Answer:ログファイル多すぎる。5分に1回Fastlyのエッジサーバの台数分、数十ファイルのログが送られてくる。一個ずつアップロードして、数十のファンクションなんて立ち上げてられない。19
Question:複数ファイル指定して一度にアップロードさせればログのファイル数なんて関係ないよ。↓こんな感じでしょ!? $ bq load \ my_dataset.my_table \ gs://my_bucket/*20
Answer:ダメです。ファイル操作毎に functionがcallされます。つまり、数十の同じfunctionが1度にcallされる。ログが多重にアップロードされる。排他制御?成功する1つfunctionと排他されるだけの大量のfunctionって。。。21
Question:じゃあ無理せず、ファイル1個ずつアップロードさせなよ。22
Answer:ダメです。先ほど言った通り、BigQueryには1日のアップロード回数に上限あります。5分に1回、数十ファイルだと上限行きます。(1 日あたりの制限: 1 日あたりテーブルごとに1,000 個の読み込みジョブ)出展:https://cloud.google.com/bigquery/quotas#import23
詰んだ!\(^o^)/24
と、言うわけで、この構成。© Money Forward,Inc.25● コンテナで、5分に1回、複数ファイルを同時にアップロード
思いつくサーバレス案・LambdaでBQアップロードを時刻起動・GAEでBQアップロードを時刻起動他にも、いいアイデアあれば、教えてください。googleさん、CloudFunctionにも時刻をトリガーにする機能をお待ちしてます。26
新しい技術やサービス大好き!そんな仲間、募集しています。インフラ https://www.wantedly.com/projects/7727ご静聴ありがとうございました!27