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

サーバーレスなエラートラッキングツール faultline と 「SaaSライクな運用」の可能性 / Serverless Meetup Fukuoka #1

サーバーレスなエラートラッキングツール faultline と 「SaaSライクな運用」の可能性 / Serverless Meetup Fukuoka #1

Serverless Meetup Fukuoka #1

Ken’ichiro Oyama

August 25, 2017
Tweet

More Decks by Ken’ichiro Oyama

Other Decks in Technology

Transcript

  1. サーバーレスなエラートラッキングツール
    faultline と
    「SaaSライクな運⽤」の可能性
    Kenʼichiro Oyama
    Fusic Co.,Ltd.
    2017.8.25
    1
    Serverless Meetup Fukuoka #1

    View Slide

  2. Who
    2
    Serverless Meetup Fukuoka #1

    View Slide

  3. k1LoW
      Kenʼichiro Oyama
      @k1LoW
      Fusic Co.,Ltd. エンジニア
      基盤ユニット テックリード
      GitHub organizations
      fukuokarb / faultline / emacs-jp / etc.
      awspecというAWS⽤のテストツールを作って
    います
      https://github.com/k1LoW/awspec
    3
    Serverless Meetup Fukuoka #1

    View Slide

  4. アジェンダ
      サーバーレスアーキテクチャなエラートラッキ
    ングツールfaultlineの紹介
      実際のFusicにおけるfaultlineの活⽤/運⽤事例
      サーバーレスアーキテクチャと”SaaSライク”な
    運⽤の可能性
    4
    Serverless Meetup Fukuoka #1

    View Slide

  5. アプリケーションにおける
    エラートラッキング
    5
    Serverless Meetup Fukuoka #1

    View Slide

  6. エラー
      運⽤上の想定内のエラー
      ログインエラー
      ⼊⼒エラー
      Exception
      運⽤上の想定外のエラー <<こちら
      Error
      Exception
    6
    Serverless Meetup Fukuoka #1

    View Slide

  7. つまり運⽤時に顕在化したバグ
    7
    Serverless Meetup Fukuoka #1

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  11. そう、選択できるのならば
    11
    Serverless Meetup Fukuoka #1

    View Slide

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

    View Slide

  13. とはいえ、エラーメール通知は破綻
    13
    Serverless Meetup Fukuoka #1

    View Slide

  14. 14
    Serverless Meetup Fukuoka #1

    View Slide

  15. 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"
    15
    Serverless Meetup Fukuoka #1

    View Slide

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

    View Slide

  17. Fusicにおけるfaultlineの活⽤
    17
    Serverless Meetup Fukuoka #1

    View Slide

  18. 11 Projects
    3 Languages
    62.4k Errors
    1.26GB Raw logs
    18
    Serverless Meetup Fukuoka #1

    View Slide

  19. 19
    Serverless Meetup Fukuoka #1
    8< Months

    View Slide

  20. 1 Down
    0 Recovery
    20
    Serverless Meetup Fukuoka #1
    ※DynamoDBのCapacityに引っかかった
    ※もともと⾃分で復旧すべきサーバがない

    View Slide

  21. AWSマネージドサービスのみで構築
    (マネージドサービス: AWSがサーバが管理)
    21
    Serverless Meetup Fukuoka #1

    View Slide

  22. サーバーレスアーキテクチャ
    22
    Serverless Meetup Fukuoka #1

    View Slide

  23. Manageless
    OSSでありながら
    SaaSに近い感覚で運⽤できている
    (※注意: 決して運⽤ゼロにはなりませんよ!!)
    23
    Serverless Meetup Fukuoka #1

    View Slide

  24. 24
    Serverless Meetup Fukuoka #1
    AWS
    Lambda
    Amazon
    S3
    Amazon
    DynamoDB
    AWS KMS
    Amazon API
    Gateway
    AWS
    CloudFormation
    IAM
    AWS mageged services used by

    View Slide

  25. 25
    Serverless Meetup Fukuoka #1
    AWS
    Lambda
    Amazon
    S3
    Amazon
    DynamoDB
    AWS KMS
    Amazon API
    Gateway
    AWS
    CloudFormation
    IAM
    $0.1
    /month
    $0.03
    /month
    $0
    /month
    $0
    /month
    $0.5
    /month
    $0
    /month
    $1
    /month
    AWS mageged services used by

    View Slide

  26. 費⽤⾯も解決
    26
    Serverless Meetup Fukuoka #1

    View Slide

  27. インストール
    27
    Serverless Meetup Fukuoka #1

    View Slide

  28. faultlineのインストール
    28
    Serverless 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 deploy
    by

    View Slide

  29. Simple deploy
    29
    Serverless Meetup Fukuoka #1

    View Slide

  30. faultlineを導⼊したことによる効果
    30
    Serverless Meetup Fukuoka #1

    View Slide

  31. Slack
    31
    Serverless Meetup Fukuoka #1

    View Slide

  32. GitHub Issue
    32
    Serverless Meetup Fukuoka #1

    View Slide

  33. “$ is not defined”
    33
    Serverless Meetup Fukuoka #1

    View Slide

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

    View Slide

  35. これはSaaSを導⼊したような効果では?
    35
    Serverless Meetup Fukuoka #1

    View Slide

  36. Between "Only mail notify" and "Error tracking services"
    メール通知 < faultline < SaaS
    36
    Serverless Meetup Fukuoka #1

    View Slide

  37. 1 Down
    0 Recovery
    37
    Serverless Meetup Fukuoka #1
    ※DynamoDBのCapacityに引っかかった
    ※もともと⾃分で復旧すべきサーバがない
    おしい

    View Slide

  38. Not SaaS, but “SaaS like”
    38
    Serverless Meetup Fukuoka #1

    View Slide

  39. では、サーバーレスアーキテクチャな
    faultlineはどんな実装なのか?
    39
    Serverless Meetup Fukuoka #1

    View Slide

  40. faultlineのアーキテクチャ
    40
    Serverless Meetup Fukuoka #1

    View Slide

  41. Only
    3 storage
    41
    Serverless Meetup Fukuoka #1

    View Slide

  42. Only 2,248 LOC
    42
    Serverless Meetup Fukuoka #1
    ※Lines of Code

    View Slide

  43. Only
    2 contributors
    43
    Serverless Meetup Fukuoka #1

    View Slide

  44. たったこれだけのコードベースで
    ⼤きな効果を得られている
    44
    Serverless Meetup Fukuoka #1

    View Slide

  45. faultline以外の例
    45
    Serverless Meetup Fukuoka #1

    View Slide

  46. hubedit
      https://hubedit.com
      GitHubのプライベートリポジトリをメモツール
    にするサービス
      GitHubを使っているので正確にはAWSフルマネージ
    ドではない
    46
    Serverless Meetup Fukuoka #1

    View Slide

  47. hubedit アーキテクチャ
    47
    Serverless Meetup Fukuoka #1

    View Slide

  48. Only 1,717 LOC
    48
    Serverless Meetup Fukuoka #1
    ※Lines of Code

    View Slide

  49. サーバーレスアーキテクチャの可能性
    49
    Serverless Meetup Fukuoka #1

    View Slide

  50. サーバーレスアーキテクチャの可能性
      なぜ可能だったのか?
      AWSマネージドサービス (PaaS) を活⽤したからにほかならない
      ちょっと前のPaaSと同じ世界なのか?
      個⼈的にはIaaSとPaaSの間のような感覚
      AWS Lambdaの登場が⼤きかったかも
      この次はPaaSを ”組み合わせて作る” 世界がくるのかも
      e.g. Event Gateway / Azure Event Grid
      まだベンダーロックインはあるが、これからあるいは..?
      実装において今までの開発と⽐べて変化はあったか?
      ステートレスな実装を環境から求められる(FaaS)
      その結果、管理がほぼ不要になる(そして良い実装へ)
      faultlineの最後のコンセプト “POST with config”
    50
    Serverless Meetup Fukuoka #1

    View Slide

  51. さらに
    51
    Serverless Meetup Fukuoka #1

    View Slide

  52. さらに“SaaS like”をSaaSに近づけるアイデア
      DynamoDB AutoScaling <-New!
      faultlineで唯⼀発⽣した障害はDynamoDBのCapacity
      faultlineを構成しているAWSリソース⾃体を別
    のサーバーレスアーキテクチャで監視
      あとで確認するために「faultline関連のCloudWatchメ
    トリクスをfaultlineで取得できるようにする」のもサー
    バーレスアーキテクチャだからこそ突⾶ではない
      別リージョンにもfaultlineを構築してRoute53
    でDNSフェイルオーバー
      どこまでやるか、だけ
    52
    Serverless Meetup Fukuoka #1

    View Slide

  53. まとめ
      faultlineというエラートラッキングツールの開
    発/運⽤から、サーバーレスアーキテクチャの可
    能性について考えてみた
      ⼩さいコードベースでもSaaSのような運⽤ができるも
    のが完結するものが作れる可能性
      サーバーレスアーキテクチャという⽂脈で、プロダクシ
    ョンベースの事例はよく聞くが、OSSなツールの運⽤事
    例はまだ(⽇本では)少ないはず
      faultlineはOSS。コードを⾒ることができるので是⾮
      サーバーレスアーキテクチャ周辺の整備はまだ
    まだはじまったばかりという印象
    53
    Serverless Meetup Fukuoka #1

    View Slide

  54. Thank you!
     Fusicはテクノロジーが
     好きなエンジニアを募集しています
     https://fusic.github.io 54

    View Slide

  55. Serverless Meetup Fukuoka #1 55

    View Slide