AppSignal を使用して Ruby on Rails アプリのパフォーマンスを効率的に監視する
この記事シリーズの最初の部分では、シンプルな Ruby on Rails アプリケーションを DigitalOcean のアプリ プラットフォームにデプロイしました。また、Rails アプリを AppSignal に接続し、単純なエラーがどのように追跡され、AppSignal のエラー ダッシュボードに表示されるかを確認しました。
シリーズのこのパートでは、AppSignal を使用して Ruby on Rails アプリケーションに以下を設定する方法について詳しく説明します。
- パフォーマンスのモニタリング
- Rails バックグラウンド ジョブの監視(単純な API 呼び出しの監視方法を含む)
- ロギング
- 通知アラート
さあ、始めましょう!
AppSignal を使用した Rails アプリのパフォーマンスの監視
稼働時間モニターでアプリが起動していることが示されると、すべてが正常であると考えたくなるかもしれません。しかし実際には、遅いプロセス、最適化されていないデータベース クエリ、長時間実行されるサービス呼び出しなどの形で、問題が内部で発生している可能性があります。
Web ページの読み込みが遅いことと訪問者のコンバージョン率が低いことの間に相関関係があることを考えると、これは非常に重要な問題です。一言で言えば、これらの実行速度の遅いプロセスをチェックしないままにしておくと、多大なコストがかかることになります。しかし、Ruby on Rails アプリには多くの変更部分があるため、重要な問題は、何をどこで探す必要があるかということです。
そこでAppSignalが活躍します。 AppSignal を使用して Rails アプリのパフォーマンスを追跡する方法を見てみましょう。
応答時間の追跡
AppSignal は、デフォルトのダッシュボードから、Rails アプリの実行速度がどの程度遅い (または速い) かを簡単に把握できる 2 つのグラフ、スループットを提供します。 と応答時間 グラフ。

- スループット - これは基本的に、アプリが現在処理している 1 秒あたりのリクエスト数を測定します (アプリが全体的に処理できる 1 秒あたりのリクエスト数と混同しないでください)。基本的な経験則は、1 秒あたりのリクエストが多ければ多いほど良いということです。ただし、アプリ サーバーが 1 秒あたりに処理するリクエストが多すぎる場合は、これを処理するためにサーバー リソースを拡張する必要があるかもしれません。
- 応答時間 - ブラウザーの応答にかかる平均時間 (ミリ秒)。応答に時間がかかるほど、アプリの動作は悪化します。ここでの良い経験則は、Rails ウェブアプリの応答時間が 100 ミリ秒未満の場合は高速であると見なすことができ、300 ミリ秒を超える応答時間は遅いと見なすことができるということです。
ここで、アプリの応答時間とスループットを 7 日間にわたって追跡したいとします。これは非常に簡単です。グラフに移動するだけです。 パフォーマンスのサブメニュー 左側のメニューにある時間フィルター ボタンを使用して、以下に示すようにグラフの上部にある時間フィルター ボタンを使用します。

これにより、他の日と比べてアプリの実行が遅い日があるかどうかを簡単に確認できます。
このビューでは、イベント グループをチェックすることも重要です。 グラフは応答時間の下にあります。 とスループット グラフ:

このグラフは、コントローラー層とビュー層でのアプリの実行速度の詳細を示します。ここから、応答時間の遅さの原因を特定し、それに応じて問題を修正できます。
それでは、AppSignal を使用したデータベース クエリの追跡に切り替えてみましょう。
データベース クエリの追跡
一般に、応答時間とスループットを最適化することで、アプリの速度を大幅に向上できるのは事実です。ただし、多くの場合、低速で最適化されていないデータベース クエリが、アプリの動作を遅くする最大の原因となります。
悪名高い N+1 クエリの例を見てみましょう。パート 1 で紹介した経費トラッカー アプリでは、経費コントローラのインデックス メソッドは次のようになります。
これは無害に見えるかもしれませんが、問題点を見てみましょう。 AppSignal ダッシュボードのリストを見ると、興味深いものが表示されます。

N+1 クエリが経費管理者のインデックス メソッドで強調表示されています。
問題のリンクをクリックしてさらに詳しく調べると、問題の詳細が表示されます。 このような画面:

AppSignal が、問題の対処方法を示すより詳細なブログ投稿へのリンクを含む、問題の説明を提供していることに注目してください。
次に進んで、AppSignal がバックグラウンド ジョブにどのように役立つかを学びましょう。
AppSignal を使用して Rails バックグラウンド ジョブを追跡する
バックグラウンド ジョブは、多くの本番環境の Ruby on Rails アプリケーションで共通の機能であり、さまざまなジョブ キュー処理 gem とライブラリから選択できます。
AppSignal は、Sidekiq、Que、Delayed Job、Resque など、さまざまなバックグラウンド ジョブ処理ライブラリの追跡と監視をサポートしています。
ユーザーがダッシュボードで毎日の為替レートを取得できる機能が必要だとします。
これを機能させるには、そのようなレートを提供するサービスへの API 呼び出しが必要です (通貨レートを取得するために、このように、事前の構成や支払いがあまり必要ないサービスを使用します)。また、このサービスへの呼び出しを定期的にキューに入れるバックグラウンド ジョブも必要です。
経費追跡アプリで使用するバックグラウンド処理 gem は GoodJob ですが、自分に合ったものを自由に使用できます。
レートを取得するバックグラウンド ジョブを作成しましょう。
次に、このジョブに対して cron を数分ごとに実行するように GoodJob を設定します (または必要に応じて)。 AppSignal はバックグラウンド サービスの存在を自動的に検出し、デフォルトの Web ダッシュボードから分離できる優れたフィルターを備えています。

事前に多くのツールを使用しなくても、AppSignal は API 呼び出しを検出し、問題を追跡します。

AppSignal を使用した Rails バックグラウンド ジョブの監視についてさらに詳しく知りたい場合は、ドキュメントを確認することをお勧めします。ここでは、稼働時間の監視に注目してみましょう。
稼働時間の監視
多くの Rails 開発者が懸念しているもう 1 つの問題は、エンド ユーザーがアプリケーションを継続的に利用できるようにすることです。ダウンタイムは収益の損失を意味し、その他の悪影響をもたらす可能性があります。
それでも、アプリの稼働状況を手動でポーリングしたくないでしょう。 AppSignal を使用して稼働時間の監視を設定できます。
セットアップは簡単です。まず稼働時間モニタリングをクリックします。 左側のメニューのリンク。
次に、稼働時間モニターの作成をクリックすると、 ボタンをクリックすると、以下に示すようなダイアログが表示されるはずです。


最も重要な設定を追加して、稼働時間モニターを完成させます。
- 名前 - 稼働時間モニターに適切な名前を付けます。
- URL - 稼働時間ルートへの完全な URL を提供します。 Rails 7.1 以降、デフォルトの稼働時間ルートは https://your-app-domain/up です。 .
- 地域 - 稼働時間を確認するリージョンを選択します。
- 通知 - アラートを受信する通知チャネルを選択します。
それが完了したら、モニターを作成してください。
AppSignal 稼働時間モニターで注意すべき点の 1 つは、ポーリングがほぼ 1 分ごとに行われるため、プランの制限に非常に簡単に達してしまうことです。しかし、これには非常に優れた回避策があり、詳しくはドキュメントで読むことができます。
AppSignal がロギングにどのように役立つかに進む前に、稼働時間監視レイヤーを完成させるもう 1 つの重要な機能があります。それは、無料の公開ステータス ページです。
公開ステータスの作成をクリックします。 以下に示すページ リンク:

次に、[新しいステータス ページ] をクリックします。 ボタンをクリックすると、次の画面が表示されます。


必要な情報をすべて入力してください。カスタム ドメインを使用する場合は、cname.appsignal-status.com を指す CNAME ディレクティブを追加する必要があることに注意してください。 カスタム ドメインの DNS 設定で。
AppSignal を使用したロギング
ロギングは AppSignal の比較的新しい機能ですが、タイムリーで歓迎される機能です。 AppSignal を使用すると、アプリケーションのモニタリングとロギングを別のサービスとして実行する必要がなくなります。
ログ記録を開始するには、AppSignal gem の最新バージョンを実行していることを確認してください。古いバージョンの gem をお持ちの場合は、次のように更新してください。
次に、新しいイニシャライザを作成し、次のように編集します。
これで、次のようにアプリのログにアクセスできるようになります。

ライブ ログへのアクセスだけでなく、重大度によってログ レコードをフィルタリングする優れたフィルタも利用できることに注意してください。
ここで AppSignal の Ruby ドキュメントのログを確認できます。
その他の注目すべき機能
AppSignal には他にも、異常検出とカスタム メトリクスという注目すべき機能がいくつかあります。
異常の検出
アプリのメモリ不足が心配だとします。アプリの使用可能なメモリが著しく減少した場合に電子メール通知を送信するトリガーを簡単に設定できます。
異常検出に移動します。 リンクして新しいトリガーを作成し、設定します。

- メトリック - 私の場合はメモリ使用量に興味がありますが、ユースケースに固有の他の指標を選択することもできます。
- トリガーの詳細 - ここでは、トリガーに関連する詳細を構成します。私の場合、ホスト メモリが 200MB を下回るとトリガーが起動します。
カスタム指標
AppSignal は、カスタム メトリクスをキャプチャして視覚化するためのツールも提供します。この機能だけで記事全体をカバーできます。詳細については、「AppSignal でカスタム メトリクスを監視する方法」を参照し、AppSignal のドキュメントも確認してください。
まとめ
この記事シリーズのパート 1 では、DigitalOcean でホストされる Rails アプリをセットアップし、AppSignal を使用してエラーを監視しました。
この第 2 部と最終部では、パフォーマンス監視、稼働時間監視、ロギングなど、Rails アプリ向けの AppSignal の優れた機能のいくつかを検討しました。
AppSignal には、この記事シリーズで効果的にカバーしきれないほど多くの機能があります。 Rails アプリについては、ぜひチェックしてみることをお勧めします。
コーディングを楽しんでください!
追記Ruby Magic の投稿を報道後すぐに読みたい場合は、Ruby Magic ニュースレターを購読して、投稿を 1 つも見逃さないようにしてください。
-
Rubyで例外にコンテキストデータを追加する方法
標準のバックトレース/エラーメッセージの組み合わせでは不十分な場合があります。エラーの原因を特定するために、追加のデータが必要になる場合があります。幸い、Rubyで行うのはとても簡単です。 エラーメッセージのカスタマイズ エラーにコンテキスト情報を追加する最も簡単な方法は、それを例外のメッセージに追加することです。以下の例では、例外をキャッチし、新しいメッセージで再発生させています: begin raise foo rescue => e raise e.class, bar end # RuntimeError: bar このアプローチの良い使用例は、テンプレートをレン
-
Ruby on Rails での AppSignal トレースの包括的なガイド:パフォーマンスと信頼性の向上
このガイドでは、AppSignal を利用してパフォーマンスのボトルネックを検出、診断、除去し、Ruby on Rails アプリケーションで適切なトレースを採用します。トレースの設定からエラーのキャプチャとロギングまで、すべてをカバーします。 最も重い負荷がかかっている場合でも、アプリケーションがこれまでよりスムーズに実行されるようにします。 その前に、トレースの定義方法とその利点について簡単に触れてみましょう。 トレースとは何ですか? トレースは、アプリケーションを介してリクエストと操作を追跡するプロセスです。 Ruby アプリケーションでは、トレースによって実行フローがキャプチャさ