ボクココ

サービス開発を成功させるまでの歩み

AppSignal でのサービス管理

ども、@kimihom です。

f:id:cevid_cpp:20210111110041p:plain

今回、エラー通知やサーバー管理のために AppSignal を導入したので記事としてまとめてみる。日本での事例があまりないようなので、今後増えていけばと思う。

利用サービス選定

まず、メインの目的はバグ管理だった。より見やすく管理しやすいようにすることが必要となり、Heroku にある Addons の中から選ぶことにした。以下のような選択肢があった。最終的には AppSignal, Rollbar, BugSnag の3つが候補となった。

AppSignal 無料プランなし。 有料 $12: 7日間,有料 $35: 30日 3,000,000 リクエスト。 Ruby. Elixir, NodeJS。 何が遅いかを監視できる。 フロントエンドのエラーも見れる。 コアRubyデベロッパの言及はあったが利用事例は少ない。

Rollbar 無料プランあり。 有料$39. 月30,000件、180日間。 Slack, BitBucket, Trello連携。 エラーが起きた原因をフロントエンドの状態から送る。

BugSnag 無料プラン ok。 Ruby ok。 有料: $29, 60日, ユーザー5。 日本での利用報告多い。

Sentry 無料プラン ok。 Ruby ok。 有料: $29 月50,000件まで, 90日 メンバー制限なし。 bitbucket, trello, slack 連携。 backend, frontend。 rails 専用ではない。gemの細かい設定が必要で複雑な感じがする。

RuntimeError 無料プランなし。 $4.99 のみ。10万件まで。 Github にエラーを直接送る。github 前提か。

Raygun Crash Reporting 無料プラン ok。 Ruby ok。 有料: $9, 90日分のデータ保存 15,000件まで。 UI みた感じ複雑そう。 日本での利用報告なし。

Honeybadger 無料プラン ok。 Ruby ok。 有料 全機能 $149。 日本での利用例ほとんどなし。

Airbrake Error Monitoring 無料プランあり。 $59 で 100,000件、30日間。 Bitbucket, Trello 連携。 国内の記事だとかなり古いがバズった模様。

利用の決断

色々とある中で、私がなぜ AppSignal を選んだか。それは Heroku Addons にとって、最適化どうかの判断が大きかった。 また、バグの管理だけでなく、統括的にサービスを監視できるサービスとして、NewRelic などのパフォーマンス系サービスを別で入れる必要もなく、AppSignal だけで管理できる魅力があった。

AppSignal は現在 Ruby. Elixir, NodeJS の3つだけのサポートとなっている。これが他の言語に色々と手をつけてカオスになっている監視アドオンや、Heroku では監視できないような項目をたくさん管理しているような 管理アドオンが多かったりする中、シンプルで、Ruby をメインに管理している点も良かった。

あと、ロゴも個人的に Heroku と似たシンプルさが好みである。無料から始められないデメリットはある。ただ今回はお金の面では問題ではなかったので採用となっている。

AppSignal ではフロントエンド JavaScript も同様に管理できるようになっている。まだベータ版ではあるけど、バックエンドとうまく連携しながらフロントエンドの監視ができるサービスとして便利に使えるだろう。

AppSignal

では AppSignal ではどんなことができるのか。簡単に調べたことだけ報告する。

Errors エラーが起きた場所や利用ユーザー情報、対象箇所の Git へのリンクなど、エラーの調査に必要な情報が綺麗にまとまっているページ。 エラーが起きた時の通知に、どの頻度で通知するかを設定できる。

Change notification frequency - Every occurrence: 毎回エラー出るたびに通知 - First in deploy: デプロイしてまたエラーが起きた時 - First after close: Close にした後またエラーが起きた時 - Never notify: 通知しない

上記はデフォルト設定の選択となる。エラーが起きるたびに通知をしたとしても、そのエラーごとに通知止めたりすることもできる。AppSignal のデフォルトはこの First in deploy で推奨のようである。デプロイしたことが Heroku から AppSignal へ情報を渡すようにすれば、"デプロイ後"っていう管理も AppSignal 側でうまく動作する。

Performance 遅い処理があった場合にリスト表示される。もちろんそれが何秒以上の時に通知出すのかっていう設定が可能だ。私のサービスの場合、多くの API 呼び出しがあるため、この Performance で処理が1秒以上かかることも1日数回起きてしまうため、設定の秒数を伸ばすで対応するしかないか。

Anomaly detection サービス全体として何か問題が起きた時に通知を出す。下記が基本のようだが、それ以外にもいくつか通知を出す条件が存在する。

  • エラーの発生率が20%を超えた時
  • 平均リクエスト処理時間が500ms 以上かかった時
  • Swapが利用され始めた時
  • ディスク利用量が90%超えた時 (Heroku 関係なし)

Inspect サービスを改善するための調査ができるページ。通知などは来ず、自分で定期的に見にいく形となる。

  • Actions リクエスト処理の遅い、影響力の高いものリスト
  • Slow events フレームワーク別 遅い処理リスト (ActiveRecord, ActionController, net_http など)
  • Host usage, Host metrics Heroku ではあまり参考ならないので気にせずでok

Improve SQL と API のアクセスに時間のかかっているものを調べられる。

  • Slow queries 遅いSQL文 影響力高い リスト
  • Slow API requests 遅いAPI 呼び出し。AWS Lambda や Twilio, PAYJP の API

終わりに

AppSignal を使い始めているが、現在は満足して利用ができている。

こういったサービスは、「みんなが使うから俺も使お」っていう判断は危険かもしれない。自分にとって不要な機能が大量にあって複雑なサービスもたくさんあるからである。

Ruby on Rails の監視管理サービスとして、AppSignal を使ってみたレポートでした。