Slide 1

Slide 1 text

サーバーレスなエラートラッキングツール faultline と 「SaaSライクな運⽤」の可能性 Kenʼichiro Oyama Fusic Co.,Ltd. 2017.8.25 1 Serverless Meetup Fukuoka #1

Slide 2

Slide 2 text

Who 2 Serverless Meetup Fukuoka #1

Slide 3

Slide 3 text

k1LoW   Kenʼichiro Oyama   @k1LoW   Fusic Co.,Ltd. エンジニア   基盤ユニット テックリード   GitHub organizations   fukuokarb / faultline / emacs-jp / etc.   awspecというAWS⽤のテストツールを作って います   https://github.com/k1LoW/awspec 3 Serverless Meetup Fukuoka #1

Slide 4

Slide 4 text

アジェンダ   サーバーレスアーキテクチャなエラートラッキ ングツールfaultlineの紹介   実際のFusicにおけるfaultlineの活⽤/運⽤事例   サーバーレスアーキテクチャと”SaaSライク”な 運⽤の可能性 4 Serverless Meetup Fukuoka #1

Slide 5

Slide 5 text

アプリケーションにおける エラートラッキング 5 Serverless Meetup Fukuoka #1

Slide 6

Slide 6 text

エラー   運⽤上の想定内のエラー   ログインエラー   ⼊⼒エラー   Exception   運⽤上の想定外のエラー <<こちら   Error   Exception 6 Serverless Meetup Fukuoka #1

Slide 7

Slide 7 text

つまり運⽤時に顕在化したバグ 7 Serverless Meetup Fukuoka #1

Slide 8

Slide 8 text

運⽤時のエラーの捕捉   例えば捕捉しない   …   ユーザやクライアントからの連絡ドリブン   「◯◯が動きません」   サーバ内のログで定期的に確認する   app/tmp/logs / syslog / error_log   アプリケーションでキャッチして通知する   encount (CakePHP) / LERN (Laravel)   エラートラッキングサービスで集約する   Airbrake.io / Rollbar / Bugsnag 8 Serverless Meetup Fukuoka #1

Slide 9

Slide 9 text

エラーをアプリケーションから 直接メールで受け取るツラみ   連続したエラーでメールボックスの容量を圧迫   運⽤時の⼤量アクセスで同じエラーが⼤量通知   会社のメールサーバを圧迫、そして受信がで きなくなる   会社のメールサーバでエラー通知を受け取る の禁⽌   どのエラーに対応した/解決したのかがわから ない   メールみない そして迷惑メールへ... 9 Serverless Meetup Fukuoka #1

Slide 10

Slide 10 text

エラートラッキングサービス(SaaS)   Airbrake.io / Rollbar / Bugsnag / etc...   同じエラーをまとめてくれる   通知先を設定できる   通知頻度も設定できる   エラーの解決を管理できる   過去のエラー詳細を確認できる   etc...   選択できるのならばすぐにでも選択すべき 10 Serverless Meetup Fukuoka #1

Slide 11

Slide 11 text

そう、選択できるのならば 11 Serverless Meetup Fukuoka #1

Slide 12

Slide 12 text

まだSaaSを選択できていない理由   費⽤対効果の課題   受託開発の特性上、年間に発⽣するプロジェク トが3桁以上   プロジェクト単位課⾦のサービスは選択しに くい(費⽤対効果を計測できていない)   エラー数課⾦でも厳しい可能性がある   データストア先の課題   エラー詳細の保存先として外部サービスを選択 できない場合がある   会社全体での導⼊を考えた場合、できるだけ 例外があるような状況にはしたくない 12 Serverless Meetup Fukuoka #1

Slide 13

Slide 13 text

とはいえ、エラーメール通知は破綻 13 Serverless Meetup Fukuoka #1

Slide 14

Slide 14 text

14 Serverless Meetup Fukuoka #1

Slide 15

Slide 15 text

faultline   Error tracking tool on AWS managed services.   AWSのマネージドサービスのみで構築するオープンソ ースのエラートラッキングツール   https://github.com/faultline   コンセプト 1. Simple deploy 2. Manageless 3. POST (errors) with config 4. Between "Only mail notify" and "Error tracking services" 15 Serverless Meetup Fukuoka #1

Slide 16

Slide 16 text

機能   プロジェクト単位でエラーを集約管理   エラーの時系列集計/グラフ(faultline-webui)   エラーの詳細記録   エラーの通知(Slack, GitHub Issue, GitLab Issue)   エラーの集約通知   “30イベント以上発⽣したら通知” / ”5回に1回通知” 16 Serverless Meetup Fukuoka #1

Slide 17

Slide 17 text

Fusicにおけるfaultlineの活⽤ 17 Serverless Meetup Fukuoka #1

Slide 18

Slide 18 text

11 Projects 3 Languages 62.4k Errors 1.26GB Raw logs 18 Serverless Meetup Fukuoka #1

Slide 19

Slide 19 text

19 Serverless Meetup Fukuoka #1 8< Months

Slide 20

Slide 20 text

1 Down 0 Recovery 20 Serverless Meetup Fukuoka #1 ※DynamoDBのCapacityに引っかかった ※もともと⾃分で復旧すべきサーバがない

Slide 21

Slide 21 text

AWSマネージドサービスのみで構築 (マネージドサービス: AWSがサーバが管理) 21 Serverless Meetup Fukuoka #1

Slide 22

Slide 22 text

サーバーレスアーキテクチャ 22 Serverless Meetup Fukuoka #1

Slide 23

Slide 23 text

Manageless OSSでありながら SaaSに近い感覚で運⽤できている (※注意: 決して運⽤ゼロにはなりませんよ!!) 23 Serverless Meetup Fukuoka #1

Slide 24

Slide 24 text

24 Serverless Meetup Fukuoka #1 AWS Lambda Amazon S3 Amazon DynamoDB AWS KMS Amazon API Gateway AWS CloudFormation IAM AWS mageged services used by

Slide 25

Slide 25 text

25 Serverless Meetup Fukuoka #1 AWS Lambda Amazon S3 Amazon DynamoDB AWS KMS Amazon API Gateway AWS CloudFormation IAM $0.1 /month $0.03 /month $0 /month $0 /month $0.5 /month $0 /month $1 /month AWS mageged services used by

Slide 26

Slide 26 text

費⽤⾯も解決 26 Serverless Meetup Fukuoka #1

Slide 27

Slide 27 text

インストール 27 Serverless Meetup Fukuoka #1

Slide 28

Slide 28 text

faultlineのインストール 28 Serverless Meetup Fukuoka #1  $ git clone https://github.com/faultline/faultline.git  $ cd faultline/  $ npm install  $ cp config.default.yml config.yml  $ [Edit config.yml]  $ AWS_PROFILE=XXXXXX npm run deploy by

Slide 29

Slide 29 text

Simple deploy 29 Serverless Meetup Fukuoka #1

Slide 30

Slide 30 text

faultlineを導⼊したことによる効果 30 Serverless Meetup Fukuoka #1

Slide 31

Slide 31 text

Slack 31 Serverless Meetup Fukuoka #1

Slide 32

Slide 32 text

GitHub Issue 32 Serverless Meetup Fukuoka #1

Slide 33

Slide 33 text

“$ is not defined” 33 Serverless Meetup Fukuoka #1

Slide 34

Slide 34 text

柔軟なエラー通知と詳細な確認を得た   エラー捕捉と同時に(かつ頻度を決めて)Slack通知を 受け取れるので素早い対応がしやすくなった   ⾃動でGitHub IssueをOpenしたりReopenしたりする ことでIssueを元にエラーの管理ができるようになった   PHPだけでなくJavaScriptのエラーもカジュアルに捕捉 できるようになったことで品質の向上をするきっかけ を得た   同じエラーの時系列グラフや各詳細を確認することで エラーの原因にたどりつきやすくなった   (faultline-webui) 34 Serverless Meetup Fukuoka #1

Slide 35

Slide 35 text

これはSaaSを導⼊したような効果では? 35 Serverless Meetup Fukuoka #1

Slide 36

Slide 36 text

Between "Only mail notify" and "Error tracking services" メール通知 < faultline < SaaS 36 Serverless Meetup Fukuoka #1

Slide 37

Slide 37 text

1 Down 0 Recovery 37 Serverless Meetup Fukuoka #1 ※DynamoDBのCapacityに引っかかった ※もともと⾃分で復旧すべきサーバがない おしい

Slide 38

Slide 38 text

Not SaaS, but “SaaS like” 38 Serverless Meetup Fukuoka #1

Slide 39

Slide 39 text

では、サーバーレスアーキテクチャな faultlineはどんな実装なのか? 39 Serverless Meetup Fukuoka #1

Slide 40

Slide 40 text

faultlineのアーキテクチャ 40 Serverless Meetup Fukuoka #1

Slide 41

Slide 41 text

Only 3 storage 41 Serverless Meetup Fukuoka #1

Slide 42

Slide 42 text

Only 2,248 LOC 42 Serverless Meetup Fukuoka #1 ※Lines of Code

Slide 43

Slide 43 text

Only 2 contributors 43 Serverless Meetup Fukuoka #1

Slide 44

Slide 44 text

たったこれだけのコードベースで ⼤きな効果を得られている 44 Serverless Meetup Fukuoka #1

Slide 45

Slide 45 text

faultline以外の例 45 Serverless Meetup Fukuoka #1

Slide 46

Slide 46 text

hubedit   https://hubedit.com   GitHubのプライベートリポジトリをメモツール にするサービス   GitHubを使っているので正確にはAWSフルマネージ ドではない 46 Serverless Meetup Fukuoka #1

Slide 47

Slide 47 text

hubedit アーキテクチャ 47 Serverless Meetup Fukuoka #1

Slide 48

Slide 48 text

Only 1,717 LOC 48 Serverless Meetup Fukuoka #1 ※Lines of Code

Slide 49

Slide 49 text

サーバーレスアーキテクチャの可能性 49 Serverless Meetup Fukuoka #1

Slide 50

Slide 50 text

サーバーレスアーキテクチャの可能性   なぜ可能だったのか?   AWSマネージドサービス (PaaS) を活⽤したからにほかならない   ちょっと前のPaaSと同じ世界なのか?   個⼈的にはIaaSとPaaSの間のような感覚   AWS Lambdaの登場が⼤きかったかも   この次はPaaSを ”組み合わせて作る” 世界がくるのかも   e.g. Event Gateway / Azure Event Grid   まだベンダーロックインはあるが、これからあるいは..?   実装において今までの開発と⽐べて変化はあったか?   ステートレスな実装を環境から求められる(FaaS)   その結果、管理がほぼ不要になる(そして良い実装へ)   faultlineの最後のコンセプト “POST with config” 50 Serverless Meetup Fukuoka #1

Slide 51

Slide 51 text

さらに 51 Serverless Meetup Fukuoka #1

Slide 52

Slide 52 text

さらに“SaaS like”をSaaSに近づけるアイデア   DynamoDB AutoScaling <-New!   faultlineで唯⼀発⽣した障害はDynamoDBのCapacity   faultlineを構成しているAWSリソース⾃体を別 のサーバーレスアーキテクチャで監視   あとで確認するために「faultline関連のCloudWatchメ トリクスをfaultlineで取得できるようにする」のもサー バーレスアーキテクチャだからこそ突⾶ではない   別リージョンにもfaultlineを構築してRoute53 でDNSフェイルオーバー   どこまでやるか、だけ 52 Serverless Meetup Fukuoka #1

Slide 53

Slide 53 text

まとめ   faultlineというエラートラッキングツールの開 発/運⽤から、サーバーレスアーキテクチャの可 能性について考えてみた   ⼩さいコードベースでもSaaSのような運⽤ができるも のが完結するものが作れる可能性   サーバーレスアーキテクチャという⽂脈で、プロダクシ ョンベースの事例はよく聞くが、OSSなツールの運⽤事 例はまだ(⽇本では)少ないはず   faultlineはOSS。コードを⾒ることができるので是⾮   サーバーレスアーキテクチャ周辺の整備はまだ まだはじまったばかりという印象 53 Serverless Meetup Fukuoka #1

Slide 54

Slide 54 text

Thank you!  Fusicはテクノロジーが  好きなエンジニアを募集しています  https://fusic.github.io 54

Slide 55

Slide 55 text

Serverless Meetup Fukuoka #1 55