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 Slide

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

    View Slide

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

    View Slide

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

    View 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 Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View 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 Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View 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 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 Slide

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

    View Slide

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

    View 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 Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View 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 Slide

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

    View 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 Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide