Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
faultline / faultline-php によるサーバ管理不要なエラートラッキングと...
Search
Ken’ichiro Oyama
June 10, 2017
Technology
3
3.3k
faultline / faultline-php によるサーバ管理不要なエラートラッキングとその効果 / PHP Conference Fukuoka 2017
Ken’ichiro Oyama
June 10, 2017
Tweet
Share
More Decks by Ken’ichiro Oyama
See All by Ken’ichiro Oyama
実践 net/http Middleware パターン / Kizuku.go Vol.1
k1low
1
200
Cleanup handling in Go / Go Conference 2024
k1low
6
3.3k
CI/CDがあたりまえの今の時代にAPIテスティングツールに求められていること / CI/CD Test Night #7
k1low
17
9.2k
Command-line interface tool design / PHPerKaigi 2024
k1low
8
2.9k
gostyle IS NOT Go Style / Fukuoka.go#19 Reboot
k1low
1
230
Parsing case study in Go / Go Conference mini 2023 Winter IN KYOTO
k1low
2
1.3k
APIシナリオテストツールとしてのrunn / 4 API testing tools
k1low
3
1.4k
The future of tbls and "Documentation as Code" / phpconfuk 2023
k1low
4
6.1k
net/http/httptest.Server のアプローチをテスト戦略に活用する / Go Conference 2023
k1low
9
3k
Other Decks in Technology
See All in Technology
社内イベント管理システムを1週間でAKSからACAに移行した話し
shingo_kawahara
0
190
スタートアップで取り組んでいるAzureとMicrosoft 365のセキュリティ対策/How to Improve Azure and Microsoft 365 Security at Startup
yuj1osm
0
220
Fanstaの1年を大解剖! 一人SREはどこまでできるのか!?
syossan27
2
170
Google Cloud で始める Cloud Run 〜AWSとの比較と実例デモで解説〜
risatube
PRO
0
110
Snowflake女子会#3 Snowpipeの良さを5分で語るよ
lana2548
0
230
ガバメントクラウドのセキュリティ対策事例について
fujisawaryohei
0
550
Amazon Kendra GenAI Index 登場でどう変わる? 評価から学ぶ最適なRAG構成
naoki_0531
0
110
生成AIをより賢く エンジニアのための RAG入門 - Oracle AI Jam Session #20
kutsushitaneko
4
240
re:Invent をおうちで楽しんでみた ~CloudWatch のオブザーバビリティ機能がスゴい!/ Enjoyed AWS re:Invent from Home and CloudWatch Observability Feature is Amazing!
yuj1osm
0
120
プロダクト開発を加速させるためのQA文化の築き方 / How to build QA culture to accelerate product development
mii3king
1
270
私なりのAIのご紹介 [2024年版]
qt_luigi
1
120
複雑性の高いオブジェクト編集に向き合う: プラガブルなReactフォーム設計
righttouch
PRO
0
120
Featured
See All Featured
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
5
450
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
2k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
Thoughts on Productivity
jonyablonski
67
4.4k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
28
4.4k
For a Future-Friendly Web
brad_frost
175
9.4k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
28
2.1k
The Cult of Friendly URLs
andyhume
78
6.1k
Making the Leap to Tech Lead
cromwellryan
133
9k
Side Projects
sachag
452
42k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
Transcript
faultline / faultline-php による サーバ管理不要なエラートラッキングと その効果 Kenʼichiro Oyama Fusic Co.,Ltd.
2017.6.10 1 PHPカンファレンス福岡2017
ターゲット 2 PHPカンファレンス福岡2017
Webアプリケーションの 開発をして デプロイをして 運⽤をしている⽅ 3 PHPカンファレンス福岡2017
Who 4 PHPカンファレンス福岡2017
k1LoW Kenʼichiro Oyama @k1LoW Fusic Co.,Ltd. エンジニア
基盤ユニット テックリード GitHub organizations fukuokarb / faultline / emacs-jp / etc. awspecというAWS⽤のテストツールを作って います https://github.com/k1LoW/awspec 5 PHPカンファレンス福岡2017
アプリケーションにおける エラートラッキング 6 PHPカンファレンス福岡2017
エラー 運⽤上の想定内のエラー ログインエラー ⼊⼒エラー Exception
運⽤上の想定外のエラー <<こちら Error Exception 7 PHPカンファレンス福岡2017
つまり運⽤時に顕在化したバグ 8 PHPカンファレンス福岡2017
運⽤時のエラーの捕捉 例えば捕捉しない … ユーザやクライアントからの連絡ドリブン 「◯◯が動きません」
サーバ内のログで定期的に確認する app/tmp/logs / syslog / error_log アプリケーションでキャッチして通知する encount (CakePHP) / LERN (Laravel) エラートラッキングサービスで集約する Airbrake.io / Rollbar / Bugsnag 9 PHPカンファレンス福岡2017
エラーをアプリケーションから 直接メールで受け取るツラみ 連続したエラーでメールボックスの容量を圧迫 運⽤時の⼤量アクセスで同じエラーが⼤量通知 会社のメールサーバを圧迫、そして受信がで きなくなる
会社のメールサーバでエラー通知を受け取る の禁⽌ どのエラーに対応した/解決したのかがわから ない メールみない そして迷惑メールへ... 10 PHPカンファレンス福岡2017
エラートラッキングサービス(SaaS) Airbrake.io / Rollbar / Bugsnag / etc...
同じエラーをまとめてくれる 通知先を設定できる 通知頻度も設定できる エラーの解決を管理できる 過去のエラー詳細を確認できる etc... 選択できるのならばすぐにでも選択すべき 11 PHPカンファレンス福岡2017
そう、選択できるのならば 12 PHPカンファレンス福岡2017
まだSaaSを選択できていない理由 費⽤対効果の課題 受託開発の特性上、年間に発⽣するプロジェク トが2桁以上(3桁) プロジェクト単位課⾦のサービスは選択しに くい(費⽤対効果を計測できていない)
エラー数課⾦でも厳しい可能性がある データストア先の課題 エラー詳細の保存先として外部サービスを選択 できない場合がある 会社全体での導⼊を考えた場合、できるだけ 例外があるような状況にはしたくない 13 PHPカンファレンス福岡2017
とはいえ、エラーメール通知は破綻 14 PHPカンファレンス福岡2017
15 PHPカンファレンス福岡2017
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" 16 PHPカンファレンス福岡2017
機能 プロジェクト単位でエラーを集約管理 エラーの時系列集計/グラフ(faultline-webui) エラーの詳細記録 エラーの通知(Slack, GitHub
Issue) エラーの集約通知 “30イベント以上発⽣したら通知” / ”5回に1回通知” 17 PHPカンファレンス福岡2017
Fusicにおけるfaultlineの活⽤ 18 PHPカンファレンス福岡2017
9 Projects 3 Languages 25.8k Errors 916MB Raw logs 19
PHPカンファレンス福岡2017
20 PHPカンファレンス福岡2017 6< Months
1 Down 0 Recovery 21 PHPカンファレンス福岡2017 ※DynamoDBのCapacityに引っかかった ※もともと⾃分で復旧すべきサーバがない
AWSマネージドサービスのみで構築 (マネージドサービス: AWSがサーバが管理) 22 PHPカンファレンス福岡2017
サーバレスアーキテクチャ? 23 PHPカンファレンス福岡2017
Manageless OSSでありながら SaaSに近い感覚で運⽤できている (※注意: 決して運⽤ゼロにはなりませんよ!!) 24 PHPカンファレンス福岡2017
25 PHPカンファレンス福岡2017 AWS Lambda Amazon S3 Amazon DynamoDB AWS KMS
Amazon API Gateway AWS CloudFormation IAM AWS mageged services used by
26 PHPカンファレンス福岡2017 AWS Lambda Amazon S3 Amazon DynamoDB AWS KMS
Amazon API Gateway AWS CloudFormation IAM $0 /month $0 /month $0 /month $0 /month $0.5 /month $0 /month $1 /month AWS mageged services used by
費⽤⾯も解決 27 PHPカンファレンス福岡2017
インストール 28 PHPカンファレンス福岡2017
faultlineのインストール 29 PHPカンファレンス福岡2017 $ 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
Simple deploy 30 PHPカンファレンス福岡2017
faultlineと連携するライブラリ faultline-php (PHP) encount-sender-faultline (CakePHP) faultline-ruby (Ruby)
faultline-rack (Rack) faultline-js (JavaScript) 31 PHPカンファレンス福岡2017
faultline-php 32 PHPカンファレンス福岡2017
33 PHPカンファレンス福岡2017 faultline-php
faultlineを導⼊したことによる効果 34 PHPカンファレンス福岡2017
Slack 35 PHPカンファレンス福岡2017
GitHub Issue 36 PHPカンファレンス福岡2017
“$ is not defined” 37 PHPカンファレンス福岡2017
柔軟なエラー通知と詳細な確認を得た エラー捕捉と同時に(かつ頻度を決めて)Slack通知を 受け取れるので素早い対応がしやすくなった ⾃動でGitHub IssueをOpenしたりReopenしたりする ことでIssueを元にエラーの管理ができるようになった PHPだけでなくJavaScriptのエラーもカジュアルに捕捉
できるようになったことで品質の向上をするきっかけ を得た 同じエラーの時系列グラフや各詳細を確認することで エラーの原因にたどりつきやすくなった (faultline-webui) 38 PHPカンファレンス福岡2017
メール通知地獄からの脱却 39 PHPカンファレンス福岡2017
え、それ全部SaaSでできるよ 40 PHPカンファレンス福岡2017
あ、はい 41 PHPカンファレンス福岡2017
Between "Only mail notify" and "Error tracking services" メール通知 <
faultline < SaaS 42 PHPカンファレンス福岡2017
何度も⾔うがSaaSは良い 零細OSSと、企業として⼒を⼊れているSaaSの間には 超えられない壁 運⽤コストゼロなSaaSはいつまでも魅⼒ エンジニアの能⼒は別に使いたい faultlineは
“SaaSに近い運⽤(運⽤コストを限りなく ゼロ)” を⽬指す(同じ機能ではない faultlineで我慢できなくなったらおそらくそれがSaaS への移⾏のタイミング 43 PHPカンファレンス福岡2017
POST (errors) with config 44 PHPカンファレンス福岡2017
POST with config エラー情報と共に設定情報もPOSTする どこに通知して欲しいか / どのように通知して 欲しいか
/ etc... 設定情報をアプリケーション側に寄せることで faultlineに保持する情報を少なくする 新規プロジェクトの開始時ですらfaultline側に 何か設定する必要はない ➔管理者いらず 45 PHPカンファレンス福岡2017
46 PHPカンファレンス福岡2017 faultline-php
POST with config の気持ちで作った別のツール 47 PHPカンファレンス福岡2017
backslack Backlogの通知をSlackに通知するサーバレスア ーキテクチャなツール https://github.com/k1LoW/backslack Backlogに設定するWebhook URLに全ての設 定を込める
https://x0x1x2x3x.execute-api.ap-northeast-1.amazonaws.com/ v0/hook?space=myspace&webhook_url=https://hooks.slack.com/ services/T00000000/B00000000/XXXXXXXXXXXXXX&channel=general BacklogとSlackを中継するだけ➔管理者いらず 48 PHPカンファレンス福岡2017
POST with configを貫く 49 PHPカンファレンス福岡2017
POST with configを実現するための 暗号化 SlackのIncoming webhook URLやGitHub API Tokenなどの値もアプリケーション側に設
置する必要がある サーバサイドではまだ問題は⼩さい 環境変数の利⽤など(DBの接続先と同様) クライアントサイド(JavaScript)での faultlineの利⽤ AWS KMSをfaultlineに組み込むことで設定情報 を暗号化 暗号鍵管理もAWSマネージド 50 PHPカンファレンス福岡2017 AWS KMS
POST with config = faultline側で保持する情報を 限りなく少なくシンプルに 51 PHPカンファレンス福岡2017
faultlineのアーキテクチャ 52 PHPカンファレンス福岡2017
Only 3 storage 53 PHPカンファレンス福岡2017
サーバレスアーキテクチャは Glue(糊)やHub(橋渡し)を意識して 設計すると幸せになれる 54 PHPカンファレンス福岡2017
まとめ エラーは捕捉したい しかし、アプリケーションからのエラーをアプリケー ションからのメールで受け取ると破綻する より良い品質向上のためにエラートラッキング サービスやツールを検討したほうがいい
そのエントリーモデルとしてfaultlineはオススメ Fusicでは実際にプロダクション環境で活⽤して良 い効果を得られた POST with configでシンプルな設計に 55 PHPカンファレンス福岡2017
最後に、 ある有名な⽅の⾔葉を引⽤した ある有名な⽅のスライドを紹介 56 PHPカンファレンス福岡2017
57 PHPカンファレンス福岡2017 URL: https://speakerdeck.com/twada/testable-lambda-working-effectively-with-legacy-lambda
Thank you! Fusicはテクノロジーが 好きなエンジニアを募集しています https://fusic.github.io PHPカンファレンス福岡2017 58
PHPカンファレンス福岡2017 59