faultline / faultline-php によるサーバ管理不要なエラートラッキングとその効果 / PHP Conference Fukuoka 2017

faultline / faultline-php によるサーバ管理不要なエラートラッキングとその効果 / PHP Conference Fukuoka 2017

69b93af68320a590f607c296e8edff73?s=128

Ken’ichiro Oyama

June 10, 2017
Tweet

Transcript

  1. 5.

    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
  2. 7.

    エラー   運⽤上の想定内のエラー   ログインエラー   ⼊⼒エラー   Exception  

    運⽤上の想定外のエラー <<こちら   Error   Exception 7 PHPカンファレンス福岡2017
  3. 9.

    運⽤時のエラーの捕捉   例えば捕捉しない   …   ユーザやクライアントからの連絡ドリブン   「◯◯が動きません」  

    サーバ内のログで定期的に確認する   app/tmp/logs / syslog / error_log   アプリケーションでキャッチして通知する   encount (CakePHP) / LERN (Laravel)   エラートラッキングサービスで集約する   Airbrake.io / Rollbar / Bugsnag 9 PHPカンファレンス福岡2017
  4. 10.

    エラーをアプリケーションから 直接メールで受け取るツラみ   連続したエラーでメールボックスの容量を圧迫   運⽤時の⼤量アクセスで同じエラーが⼤量通知   会社のメールサーバを圧迫、そして受信がで きなくなる  

    会社のメールサーバでエラー通知を受け取る の禁⽌   どのエラーに対応した/解決したのかがわから ない   メールみない そして迷惑メールへ... 10 PHPカンファレンス福岡2017
  5. 11.

    エラートラッキングサービス(SaaS)   Airbrake.io / Rollbar / Bugsnag / etc...  

    同じエラーをまとめてくれる   通知先を設定できる   通知頻度も設定できる   エラーの解決を管理できる   過去のエラー詳細を確認できる   etc...   選択できるのならばすぐにでも選択すべき 11 PHPカンファレンス福岡2017
  6. 13.

    まだSaaSを選択できていない理由   費⽤対効果の課題   受託開発の特性上、年間に発⽣するプロジェク トが2桁以上(3桁)   プロジェクト単位課⾦のサービスは選択しに くい(費⽤対効果を計測できていない)  

    エラー数課⾦でも厳しい可能性がある   データストア先の課題   エラー詳細の保存先として外部サービスを選択 できない場合がある   会社全体での導⼊を考えた場合、できるだけ 例外があるような状況にはしたくない 13 PHPカンファレンス福岡2017
  7. 16.

    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
  8. 17.

    機能   プロジェクト単位でエラーを集約管理   エラーの時系列集計/グラフ(faultline-webui)   エラーの詳細記録   エラーの通知(Slack, GitHub

    Issue)   エラーの集約通知   “30イベント以上発⽣したら通知” / ”5回に1回通知” 17 PHPカンファレンス福岡2017
  9. 19.

    9 Projects 3 Languages 25.8k Errors 916MB Raw logs 19

    PHPカンファレンス福岡2017
  10. 25.

    25 PHPカンファレンス福岡2017 AWS Lambda Amazon S3 Amazon DynamoDB AWS KMS

    Amazon API Gateway AWS CloudFormation IAM AWS mageged services used by
  11. 26.

    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
  12. 29.

    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
  13. 31.

    faultlineと連携するライブラリ   faultline-php (PHP)   encount-sender-faultline (CakePHP)   faultline-ruby (Ruby)

      faultline-rack (Rack)   faultline-js (JavaScript) 31 PHPカンファレンス福岡2017
  14. 38.

    柔軟なエラー通知と詳細な確認を得た   エラー捕捉と同時に(かつ頻度を決めて)Slack通知を 受け取れるので素早い対応がしやすくなった   ⾃動でGitHub IssueをOpenしたりReopenしたりする ことでIssueを元にエラーの管理ができるようになった   PHPだけでなくJavaScriptのエラーもカジュアルに捕捉

    できるようになったことで品質の向上をするきっかけ を得た   同じエラーの時系列グラフや各詳細を確認することで エラーの原因にたどりつきやすくなった   (faultline-webui) 38 PHPカンファレンス福岡2017
  15. 42.

    Between "Only mail notify" and "Error tracking services" メール通知 <

    faultline < SaaS 42 PHPカンファレンス福岡2017
  16. 43.

    何度も⾔うがSaaSは良い   零細OSSと、企業として⼒を⼊れているSaaSの間には 超えられない壁   運⽤コストゼロなSaaSはいつまでも魅⼒   エンジニアの能⼒は別に使いたい   faultlineは

    “SaaSに近い運⽤(運⽤コストを限りなく ゼロ)” を⽬指す(同じ機能ではない   faultlineで我慢できなくなったらおそらくそれがSaaS への移⾏のタイミング 43 PHPカンファレンス福岡2017
  17. 45.

    POST with config   エラー情報と共に設定情報もPOSTする   どこに通知して欲しいか / どのように通知して 欲しいか

    / etc...   設定情報をアプリケーション側に寄せることで faultlineに保持する情報を少なくする   新規プロジェクトの開始時ですらfaultline側に 何か設定する必要はない ➔管理者いらず 45 PHPカンファレンス福岡2017
  18. 48.

    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
  19. 50.

    POST with configを実現するための 暗号化   SlackのIncoming webhook URLやGitHub API Tokenなどの値もアプリケーション側に設

    置する必要がある   サーバサイドではまだ問題は⼩さい   環境変数の利⽤など(DBの接続先と同様)   クライアントサイド(JavaScript)での faultlineの利⽤   AWS KMSをfaultlineに組み込むことで設定情報 を暗号化   暗号鍵管理もAWSマネージド 50 PHPカンファレンス福岡2017 AWS KMS
  20. 55.

    まとめ   エラーは捕捉したい   しかし、アプリケーションからのエラーをアプリケー ションからのメールで受け取ると破綻する   より良い品質向上のためにエラートラッキング サービスやツールを検討したほうがいい  

    そのエントリーモデルとしてfaultlineはオススメ   Fusicでは実際にプロダクション環境で活⽤して良 い効果を得られた   POST with configでシンプルな設計に 55 PHPカンファレンス福岡2017