Serverless Meetup Fukuoka #1
サーバーレスなエラートラッキングツールfaultline と「SaaSライクな運⽤」の可能性Kenʼichiro OyamaFusic Co.,Ltd.2017.8.251Serverless Meetup Fukuoka #1
View Slide
Who2Serverless Meetup Fukuoka #1
k1LoW Kenʼichiro Oyama @k1LoW Fusic Co.,Ltd. エンジニア 基盤ユニット テックリード GitHub organizations fukuokarb / faultline / emacs-jp / etc. awspecというAWS⽤のテストツールを作っています https://github.com/k1LoW/awspec3Serverless Meetup Fukuoka #1
アジェンダ サーバーレスアーキテクチャなエラートラッキングツールfaultlineの紹介 実際のFusicにおけるfaultlineの活⽤/運⽤事例 サーバーレスアーキテクチャと”SaaSライク”な運⽤の可能性4Serverless Meetup Fukuoka #1
アプリケーションにおけるエラートラッキング5Serverless Meetup Fukuoka #1
エラー 運⽤上の想定内のエラー ログインエラー ⼊⼒エラー Exception 運⽤上の想定外のエラー <<こちら Error Exception6Serverless Meetup Fukuoka #1
つまり運⽤時に顕在化したバグ7Serverless Meetup Fukuoka #1
運⽤時のエラーの捕捉 例えば捕捉しない … ユーザやクライアントからの連絡ドリブン 「◯◯が動きません」 サーバ内のログで定期的に確認する app/tmp/logs / syslog / error_log アプリケーションでキャッチして通知する encount (CakePHP) / LERN (Laravel) エラートラッキングサービスで集約する Airbrake.io / Rollbar / Bugsnag8Serverless Meetup Fukuoka #1
エラーをアプリケーションから直接メールで受け取るツラみ 連続したエラーでメールボックスの容量を圧迫 運⽤時の⼤量アクセスで同じエラーが⼤量通知 会社のメールサーバを圧迫、そして受信ができなくなる 会社のメールサーバでエラー通知を受け取るの禁⽌ どのエラーに対応した/解決したのかがわからない メールみないそして迷惑メールへ...9Serverless Meetup Fukuoka #1
エラートラッキングサービス(SaaS) Airbrake.io / Rollbar / Bugsnag / etc... 同じエラーをまとめてくれる 通知先を設定できる 通知頻度も設定できる エラーの解決を管理できる 過去のエラー詳細を確認できる etc... 選択できるのならばすぐにでも選択すべき10Serverless Meetup Fukuoka #1
そう、選択できるのならば11Serverless Meetup Fukuoka #1
まだSaaSを選択できていない理由 費⽤対効果の課題 受託開発の特性上、年間に発⽣するプロジェクトが3桁以上 プロジェクト単位課⾦のサービスは選択しにくい(費⽤対効果を計測できていない) エラー数課⾦でも厳しい可能性がある データストア先の課題 エラー詳細の保存先として外部サービスを選択できない場合がある 会社全体での導⼊を考えた場合、できるだけ例外があるような状況にはしたくない12Serverless Meetup Fukuoka #1
とはいえ、エラーメール通知は破綻13Serverless Meetup Fukuoka #1
14Serverless Meetup Fukuoka #1
faultline Error tracking tool on AWS managed services. AWSのマネージドサービスのみで構築するオープンソースのエラートラッキングツール https://github.com/faultline コンセプト1. Simple deploy2. Manageless3. POST (errors) with config4. Between "Only mail notify" and "Error trackingservices"15Serverless Meetup Fukuoka #1
機能 プロジェクト単位でエラーを集約管理 エラーの時系列集計/グラフ(faultline-webui) エラーの詳細記録 エラーの通知(Slack, GitHub Issue, GitLab Issue) エラーの集約通知 “30イベント以上発⽣したら通知” / ”5回に1回通知”16Serverless Meetup Fukuoka #1
Fusicにおけるfaultlineの活⽤17Serverless Meetup Fukuoka #1
11 Projects3 Languages62.4k Errors1.26GB Raw logs18Serverless Meetup Fukuoka #1
19Serverless Meetup Fukuoka #18< Months
1 Down0 Recovery 20Serverless Meetup Fukuoka #1※DynamoDBのCapacityに引っかかった※もともと⾃分で復旧すべきサーバがない
AWSマネージドサービスのみで構築(マネージドサービス: AWSがサーバが管理)21Serverless Meetup Fukuoka #1
サーバーレスアーキテクチャ22Serverless Meetup Fukuoka #1
ManagelessOSSでありながらSaaSに近い感覚で運⽤できている(※注意: 決して運⽤ゼロにはなりませんよ!!)23Serverless Meetup Fukuoka #1
24Serverless Meetup Fukuoka #1AWSLambdaAmazonS3AmazonDynamoDBAWS KMSAmazon APIGatewayAWSCloudFormationIAMAWS mageged services used by
25Serverless Meetup Fukuoka #1AWSLambdaAmazonS3AmazonDynamoDBAWS KMSAmazon APIGatewayAWSCloudFormationIAM$0.1/month$0.03/month$0/month$0/month$0.5/month$0/month$1/monthAWS mageged services used by
費⽤⾯も解決26Serverless Meetup Fukuoka #1
インストール27Serverless Meetup Fukuoka #1
faultlineのインストール28Serverless 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 deployby
Simple deploy29Serverless Meetup Fukuoka #1
faultlineを導⼊したことによる効果30Serverless Meetup Fukuoka #1
Slack31Serverless Meetup Fukuoka #1
GitHub Issue32Serverless Meetup Fukuoka #1
“$ is not defined”33Serverless Meetup Fukuoka #1
柔軟なエラー通知と詳細な確認を得た エラー捕捉と同時に(かつ頻度を決めて)Slack通知を受け取れるので素早い対応がしやすくなった ⾃動でGitHub IssueをOpenしたりReopenしたりすることでIssueを元にエラーの管理ができるようになった PHPだけでなくJavaScriptのエラーもカジュアルに捕捉できるようになったことで品質の向上をするきっかけを得た 同じエラーの時系列グラフや各詳細を確認することでエラーの原因にたどりつきやすくなった (faultline-webui)34Serverless Meetup Fukuoka #1
これはSaaSを導⼊したような効果では?35Serverless Meetup Fukuoka #1
Between "Only mail notify" and "Error tracking services"メール通知 < faultline < SaaS36Serverless Meetup Fukuoka #1
1 Down0 Recovery 37Serverless Meetup Fukuoka #1※DynamoDBのCapacityに引っかかった※もともと⾃分で復旧すべきサーバがないおしい
Not SaaS, but “SaaS like”38Serverless Meetup Fukuoka #1
では、サーバーレスアーキテクチャなfaultlineはどんな実装なのか?39Serverless Meetup Fukuoka #1
faultlineのアーキテクチャ40Serverless Meetup Fukuoka #1
Only3 storage41Serverless Meetup Fukuoka #1
Only 2,248 LOC42Serverless Meetup Fukuoka #1※Lines of Code
Only2 contributors43Serverless Meetup Fukuoka #1
たったこれだけのコードベースで⼤きな効果を得られている44Serverless Meetup Fukuoka #1
faultline以外の例45Serverless Meetup Fukuoka #1
hubedit https://hubedit.com GitHubのプライベートリポジトリをメモツールにするサービス GitHubを使っているので正確にはAWSフルマネージドではない46Serverless Meetup Fukuoka #1
hubedit アーキテクチャ47Serverless Meetup Fukuoka #1
Only 1,717 LOC48Serverless Meetup Fukuoka #1※Lines of Code
サーバーレスアーキテクチャの可能性49Serverless Meetup Fukuoka #1
サーバーレスアーキテクチャの可能性 なぜ可能だったのか? AWSマネージドサービス (PaaS) を活⽤したからにほかならない ちょっと前のPaaSと同じ世界なのか? 個⼈的にはIaaSとPaaSの間のような感覚 AWS Lambdaの登場が⼤きかったかも この次はPaaSを ”組み合わせて作る” 世界がくるのかも e.g. Event Gateway / Azure Event Grid まだベンダーロックインはあるが、これからあるいは..? 実装において今までの開発と⽐べて変化はあったか? ステートレスな実装を環境から求められる(FaaS) その結果、管理がほぼ不要になる(そして良い実装へ) faultlineの最後のコンセプト “POST with config”50Serverless Meetup Fukuoka #1
さらに51Serverless Meetup Fukuoka #1
さらに“SaaS like”をSaaSに近づけるアイデア DynamoDB AutoScaling <-New! faultlineで唯⼀発⽣した障害はDynamoDBのCapacity faultlineを構成しているAWSリソース⾃体を別のサーバーレスアーキテクチャで監視 あとで確認するために「faultline関連のCloudWatchメトリクスをfaultlineで取得できるようにする」のもサーバーレスアーキテクチャだからこそ突⾶ではない 別リージョンにもfaultlineを構築してRoute53でDNSフェイルオーバー どこまでやるか、だけ52Serverless Meetup Fukuoka #1
まとめ faultlineというエラートラッキングツールの開発/運⽤から、サーバーレスアーキテクチャの可能性について考えてみた ⼩さいコードベースでもSaaSのような運⽤ができるものが完結するものが作れる可能性 サーバーレスアーキテクチャという⽂脈で、プロダクションベースの事例はよく聞くが、OSSなツールの運⽤事例はまだ(⽇本では)少ないはず faultlineはOSS。コードを⾒ることができるので是⾮ サーバーレスアーキテクチャ周辺の整備はまだまだはじまったばかりという印象53Serverless Meetup Fukuoka #1
Thank you! Fusicはテクノロジーが 好きなエンジニアを募集しています https://fusic.github.io 54
Serverless Meetup Fukuoka #1 55