サーバーレスなエラートラッキングツール faultline と 「SaaSライクな運用」の可能性 / Serverless Meetup Fukuoka #1
by
Ken’ichiro Oyama
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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