行動すれば次の現実

テック中心の個人ブログ

Herokuで可用性の高いサービスを運用するために入れておきたいアドオン3選 | Rails

f:id:furu07yu:20220316185416p:plain

弊社では多くのWebサービスをHeroku上で稼働させています。

初めてローンチした当初は数々のトラブルが発生して可用性が不安定な時期がありましたが、現在は可用性の高いサービス運用が実現できております。

それが実現できているのはアドオンのおかげと言っても過言ではありません。

今まで様々なアドオンを試してきましたが、本当に役に立ったのは後述する3つのアドオンに限られます。

今回はこの3つのアドオンを紹介したいと思います。

Papertrail

Papertrail - Add-ons - Heroku Elements

Papertrailはログを管理するためのアドオンです。

Herokuアプリ単体ではログは保存されません (正確には最新の1500行が1週間保存されます。それを超えるとログを閲覧することができなくなります)

そのため、ログを保存させるためのアドオンを別途使用する必要があります。

Papertrailを使用することで大量のログを一定期間保存することができます。また、保存したログを高度な条件で検索したり、特定の文言のログが出力された際に外部サービスに通知することができます。

Papertrailの主な機能と特徴

  • 無料から使用できる(1日のログのサイズ、保存期間などによって料金プランが定められている)
  • ログをリアルタイムに閲覧できる
  • 詳細な条件を指定してログを検索できる
  • アラート機能により特定の文言が含まれるログを外部サービス(メールやSlack等)に連携できる

Scout APM

Scout APM - Add-ons - Heroku Elements

ScoutAPMはアプリケーションパフォーマンス管理ツール(APM)です。

HerokuにもMetricsという機能があります。サービス全体での大まかなパフォーマンス監視は可能ですが、それはあくまでもおまけ程度と考えたほうが良いです。

ScoutAPMを使用することで、N+1クエリやメモリブロートの原因、パフォーマンスの異常を詳細に調査することができます。

エンドポイントやリクエスト単位でトランザクションを追跡することができるので、ボトルネックとなっている箇所を詳細なレベルで把握することが可能です。

PapertrailでR14やH12等の文言でアラートを検知して、ScoutAPMで調査するような改善を繰り返すのがオススメです。そうすることでアプリの信頼性が向上して顧客にストレスなく価値を提供し続けることができます。

ローンチした最初のうちは有料プランで使用して、ある程度ボトルネックを洗い出し終えて、アプリが安定稼働してきたら無料プランに切り替えるのが良いのではないかと思います。

ScoutAPMの主な機能と特徴

  • 無料から使用できる(トレースできる期間などによって料金プランが定められている)
  • エンドポイントやリクエスト単位でトランザクションを追跡することができる(競合サービスのNewRelicでは出来ない)
  • レスポンスタイム、メモリブロート、SQLスロークエリなどの切り口からボトルネックを調査できる
  • Githubと連携することでコード単位で追跡することができる

Pingdom

Pingdom - Add-ons - Heroku Elements

Pingdomはアプリの死活監視を行うサービスです。

Herokuアプリ自体がダウンしまった場合、それを検知させる外部のサービスが必要です。

Pingdomを使用することで、世界中にある100以上の拠点からアプリを監視することができます。 ヘルスチェック(死活監視)やパフォーマンステストはもちろん、トランザクションテスト(E2E)を実行する機能もサポートされているので、これ一台で様々な監視を行うことが出来ます。

特にE2Eテストはオススメです。E2Eテストというとハードルが高いイメージがありますが、PingdomのTransactionsという機能を使用することで直感的なUIで簡単にシナリオテストを作成することが可能です。

Pingdomの主な機能と特徴

  • 有料プランのみ対応
  • Real User Monitoringでユーザーの属性などをリアルタイムに把握することが出来る(GoogleAnalyticsに似た機能)
  • Uptimeで複数のアプリに対して死活監視することが出来る。チェック頻度や通知方法など細かな設定が可能
  • Page Speedでアプリのパフォーマンステストをすることができる
  • Transactionsで簡単なE2Eテストを作成して定期実行することが出来る。「ログインして特定のページで任意の操作を行う」などのシナリオが簡単に作成可能