Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

Ken’ichiro Oyama

June 10, 2017
Tweet

More Decks by Ken’ichiro Oyama

Other Decks in Technology

Transcript

  1. faultline / faultline-php による
    サーバ管理不要なエラートラッキングと
    その効果
    Kenʼichiro Oyama
    Fusic Co.,Ltd.
    2017.6.10
    1
    PHPカンファレンス福岡2017

    View full-size slide

  2. ターゲット
    2
    PHPカンファレンス福岡2017

    View full-size slide

  3. Webアプリケーションの
    開発をして
    デプロイをして
    運⽤をしている⽅
    3
    PHPカンファレンス福岡2017

    View full-size slide

  4. Who
    4
    PHPカンファレンス福岡2017

    View full-size slide

  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

    View full-size slide

  6. アプリケーションにおける
    エラートラッキング
    6
    PHPカンファレンス福岡2017

    View full-size slide

  7. エラー
      運⽤上の想定内のエラー
      ログインエラー
      ⼊⼒エラー
      Exception
      運⽤上の想定外のエラー <<こちら
      Error
      Exception
    7
    PHPカンファレンス福岡2017

    View full-size slide

  8. つまり運⽤時に顕在化したバグ
    8
    PHPカンファレンス福岡2017

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  12. そう、選択できるのならば
    12
    PHPカンファレンス福岡2017

    View full-size slide

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

    View full-size slide

  14. とはいえ、エラーメール通知は破綻
    14
    PHPカンファレンス福岡2017

    View full-size slide

  15. 15
    PHPカンファレンス福岡2017

    View full-size slide

  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

    View full-size slide

  17. 機能
      プロジェクト単位でエラーを集約管理
      エラーの時系列集計/グラフ(faultline-webui)
      エラーの詳細記録
      エラーの通知(Slack, GitHub Issue)
      エラーの集約通知
      “30イベント以上発⽣したら通知” / ”5回に1回通知”
    17
    PHPカンファレンス福岡2017

    View full-size slide

  18. Fusicにおけるfaultlineの活⽤
    18
    PHPカンファレンス福岡2017

    View full-size slide

  19. 9 Projects
    3 Languages
    25.8k Errors
    916MB Raw logs
    19
    PHPカンファレンス福岡2017

    View full-size slide

  20. 20
    PHPカンファレンス福岡2017
    6< Months

    View full-size slide

  21. 1 Down
    0 Recovery
    21
    PHPカンファレンス福岡2017
    ※DynamoDBのCapacityに引っかかった
    ※もともと⾃分で復旧すべきサーバがない

    View full-size slide

  22. AWSマネージドサービスのみで構築
    (マネージドサービス: AWSがサーバが管理)
    22
    PHPカンファレンス福岡2017

    View full-size slide

  23. サーバレスアーキテクチャ?
    23
    PHPカンファレンス福岡2017

    View full-size slide

  24. Manageless
    OSSでありながら
    SaaSに近い感覚で運⽤できている
    (※注意: 決して運⽤ゼロにはなりませんよ!!)
    24
    PHPカンファレンス福岡2017

    View full-size slide

  25. 25
    PHPカンファレンス福岡2017
    AWS
    Lambda
    Amazon
    S3
    Amazon
    DynamoDB
    AWS KMS
    Amazon API
    Gateway
    AWS
    CloudFormation
    IAM
    AWS mageged services used by

    View full-size slide

  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

    View full-size slide

  27. 費⽤⾯も解決
    27
    PHPカンファレンス福岡2017

    View full-size slide

  28. インストール
    28
    PHPカンファレンス福岡2017

    View full-size slide

  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

    View full-size slide

  30. Simple deploy
    30
    PHPカンファレンス福岡2017

    View full-size slide

  31. faultlineと連携するライブラリ
      faultline-php (PHP)
      encount-sender-faultline (CakePHP)
      faultline-ruby (Ruby)
      faultline-rack (Rack)
      faultline-js (JavaScript)
    31
    PHPカンファレンス福岡2017

    View full-size slide

  32. faultline-php
    32
    PHPカンファレンス福岡2017

    View full-size slide

  33. 33
    PHPカンファレンス福岡2017
    faultline-php

    View full-size slide

  34. faultlineを導⼊したことによる効果
    34
    PHPカンファレンス福岡2017

    View full-size slide

  35. Slack
    35
    PHPカンファレンス福岡2017

    View full-size slide

  36. GitHub Issue
    36
    PHPカンファレンス福岡2017

    View full-size slide

  37. “$ is not defined”
    37
    PHPカンファレンス福岡2017

    View full-size slide

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

    View full-size slide

  39. メール通知地獄からの脱却
    39
    PHPカンファレンス福岡2017

    View full-size slide

  40. え、それ全部SaaSでできるよ
    40
    PHPカンファレンス福岡2017

    View full-size slide

  41. あ、はい
    41
    PHPカンファレンス福岡2017

    View full-size slide

  42. Between "Only mail notify" and "Error tracking services"
    メール通知 < faultline < SaaS
    42
    PHPカンファレンス福岡2017

    View full-size slide

  43. 何度も⾔うがSaaSは良い
      零細OSSと、企業として⼒を⼊れているSaaSの間には
    超えられない壁
      運⽤コストゼロなSaaSはいつまでも魅⼒
      エンジニアの能⼒は別に使いたい
      faultlineは “SaaSに近い運⽤(運⽤コストを限りなく
    ゼロ)” を⽬指す(同じ機能ではない
      faultlineで我慢できなくなったらおそらくそれがSaaS
    への移⾏のタイミング
    43
    PHPカンファレンス福岡2017

    View full-size slide

  44. POST (errors) with config
    44
    PHPカンファレンス福岡2017

    View full-size slide

  45. POST with config
      エラー情報と共に設定情報もPOSTする
      どこに通知して欲しいか / どのように通知して
    欲しいか / etc...
      設定情報をアプリケーション側に寄せることで
    faultlineに保持する情報を少なくする
      新規プロジェクトの開始時ですらfaultline側に
    何か設定する必要はない ➔管理者いらず
    45
    PHPカンファレンス福岡2017

    View full-size slide

  46. 46
    PHPカンファレンス福岡2017
    faultline-php

    View full-size slide

  47. POST with config
    の気持ちで作った別のツール
    47
    PHPカンファレンス福岡2017

    View full-size slide

  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

    View full-size slide

  49. POST with configを貫く
    49
    PHPカンファレンス福岡2017

    View full-size slide

  50. POST with configを実現するための
    暗号化
      SlackのIncoming webhook URLやGitHub
    API Tokenなどの値もアプリケーション側に設
    置する必要がある
      サーバサイドではまだ問題は⼩さい
      環境変数の利⽤など(DBの接続先と同様)
      クライアントサイド(JavaScript)での
    faultlineの利⽤
      AWS KMSをfaultlineに組み込むことで設定情報
    を暗号化
      暗号鍵管理もAWSマネージド
    50
    PHPカンファレンス福岡2017
    AWS KMS

    View full-size slide

  51. POST with config
    = faultline側で保持する情報を
    限りなく少なくシンプルに
    51
    PHPカンファレンス福岡2017

    View full-size slide

  52. faultlineのアーキテクチャ
    52
    PHPカンファレンス福岡2017

    View full-size slide

  53. Only
    3 storage
    53
    PHPカンファレンス福岡2017

    View full-size slide

  54. サーバレスアーキテクチャは
    Glue(糊)やHub(橋渡し)を意識して
    設計すると幸せになれる
    54
    PHPカンファレンス福岡2017

    View full-size slide

  55. まとめ
      エラーは捕捉したい
      しかし、アプリケーションからのエラーをアプリケー
    ションからのメールで受け取ると破綻する
      より良い品質向上のためにエラートラッキング
    サービスやツールを検討したほうがいい
      そのエントリーモデルとしてfaultlineはオススメ
      Fusicでは実際にプロダクション環境で活⽤して良
    い効果を得られた
      POST with configでシンプルな設計に
    55
    PHPカンファレンス福岡2017

    View full-size slide

  56. 最後に、
    ある有名な⽅の⾔葉を引⽤した
    ある有名な⽅のスライドを紹介
    56
    PHPカンファレンス福岡2017

    View full-size slide

  57. 57
    PHPカンファレンス福岡2017
    URL: https://speakerdeck.com/twada/testable-lambda-working-effectively-with-legacy-lambda

    View full-size slide

  58. Thank you!
     Fusicはテクノロジーが
     好きなエンジニアを募集しています
     https://fusic.github.io
    PHPカンファレンス福岡2017 58

    View full-size slide

  59. PHPカンファレンス福岡2017 59

    View full-size slide