Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

Ruby on Rails での AppSignal トレースの包括的なガイド:パフォーマンスと信頼性の向上

このガイドでは、AppSignal を利用してパフォーマンスのボトルネックを検出、診断、除去し、Ruby on Rails アプリケーションで適切なトレースを採用します。トレースの設定からエラーのキャプチャとロギングまで、すべてをカバーします。

最も重い負荷がかかっている場合でも、アプリケーションがこれまでよりスムーズに実行されるようにします。

その前に、トレースの定義方法とその利点について簡単に触れてみましょう。

トレースとは何ですか?

トレースは、アプリケーションを介してリクエストと操作を追跡するプロセスです。 Ruby アプリケーションでは、トレースによって実行フローがキャプチャされ、さまざまなコンポーネントのパフォーマンスについての深い洞察が得られます。

トレースの利点

トレースには次のようないくつかの利点があります。

<オル>
  • パフォーマンスの最適化 :トレースにより、パフォーマンスの改善が必要なアプリケーションの遅い部分が特定されます。
  • デバッグの改善 :詳細なトレースにより、コードの問題を迅速に特定し、その原因を特定できます。
  • 信頼性の向上 :トレースはアプリケーションの動作を追跡し、より信頼性が高く効果的なシステム運用を保証します。
  • シナリオ:遅れている Rails アプリ

    一年で最大の買い物の日であるブラック フライデーだとしましょう。 Rails ベースの e コマース プラットフォームは、何千人もの熱心な顧客で賑わっており、カートには商品が満載で、チェックアウトの準備ができています。システムが遅れ始めるまでは、すべてが完璧に見えます。

    トランザクションが失敗します。放棄されたカートが急増しています。パニックが起こります。これはすべての開発者にとって悪夢です。しかし、秘密兵器を持っていたらどうでしょうか?リアルタイムで問題を警告するだけでなく、アプリケーションの中心部まで掘り下げて、すべてのリクエスト、すべてのデータベース クエリ、すべてのバックグラウンド ジョブを追跡するツールはありますか? AppSignal を入力してください .

    AppSignal を使用して Ruby on Rails アプリのトレースを設定する方法

    AppSignal を使用したトレースの威力を実証するために、AppSignal と統合できるサンプル Rails e-commerce プロジェクトを作成しました。これは、トレースによってこれらの問題がどのように特定され、解決されるかを直接確認するのに役立ちます。

    前提条件

    • ルビーのバージョン :AppSignal は Ruby 2.5 以降と互換性があります。
    • AppSignal アカウント :AppSignal でアカウントを作成します (無料トライアルが利用可能です)

    これで、AppSignal を使用して Ruby アプリケーションでトレースを設定する準備が整いました。

    ステップ 1:AppSignal Gem をインストールする

    これが宝石です:

     

    bundle install を実行するだけです。 :

     

    ステップ 2:AppSignal を初期化する

    AppSignal インストール コマンドを実行して、必要な構成ファイルをセットアップします。

     

    端末のプロンプトに従ってください。構成ファイルまたは環境変数を選択して、アプリ内で AppSignal を構成できます。設定ファイルのオプションを選択します。

    このコマンドは appsignal.yml を生成します。 このファイルには、AppSignal プッシュ API キーといくつかの基本的な構成設定が事前に入力されています。

    ステップ 3:AppSignal を構成する

    config/appsignal.yml を確認してください 環境に合わせて正しく構成されています。このファイルには、さまざまな環境 (開発、テスト、運用) の構成設定が含まれています。ほとんど価値をもたらさないアクションは無視してください。

    そしてタダ!これで準備は完了です。

    Ruby on Rails での AppSignal トレースの包括的なガイド:パフォーマンスと信頼性の向上

    Ruby on Rails アプリケーションのインストルメント化

    AppSignal は、データベース クエリや Web リクエストなど、Rails アプリケーションのいくつかの主要コンポーネントを自動的に計測できます。カスタム インストルメンテーションを追加して、アプリケーションの特定の部分をトレースすることもできます。

    カスタム Rails インストルメンテーション

    コードの特定の部分を計測するには、コードの数行を Appsignal.instrument でラップします。 方法。このメソッドは、コントローラ アクションやバックグラウンド ジョブのより複雑な部分など、コードの特定のブロックをトレースするために使用できます。

     

    このエンドポイントにリクエストを送信すると、N+1 クエリが報告されます。

    N+1 問題は、アプリケーションが単一の効率的なクエリを使用する代わりに、コレクション内の各オブジェクトに関連付けられたレコードを読み込むために複数のデータベース クエリを実行するときに発生します。これにより、特に大規模なデータセットを扱う場合、パフォーマンスが大幅に低下する可能性があります。

    この場合の修正は、すべての注文を取得するクエリを一括ロードすることです。このコードを置き換えるだけです。

     

    以下のようにします。

     

    AppSignal を使用した Ruby エラーの収集とレポート

    AppSignal を使用すると、Appsignal.set_error を使用してアプリケーション エラーをキャプチャして報告できます。 メソッド。

    以下は、オーダー コントローラーのインデックス アクションでエラーをキャプチャして報告する例です。

     

    この例では、特定のコントローラー アクション内でのカスタム エラー処理を示します。ただし、AppSignal はデフォルトでエラーを報告するため、Appsignal.set_error を使用して明示的にエラーを報告することに注意することが重要です。 通常は必要ありません。

    すべてのコントローラー アクションにわたって一貫性のある一元的なエラー処理を行うには、rescue_from を使用することをお勧めします。 コントローラーレベルで。このアプローチにより、コントローラ アクション内の未処理の例外が適切に報告され、管理されるようになります。

    これを実装する方法の例を次に示します。

     

    エラーについて> 問題リスト タブでは、すべてのエラーのリスト、各問題のステータス、エラーが発生してからの経過時間が表示されます。

    Ruby on Rails での AppSignal トレースの包括的なガイド:パフォーマンスと信頼性の向上

    RuntimeError をクリックします。 で、エラー ログと、このエラーを引き起こしているコード行を確認できます。

    Ruby on Rails での AppSignal トレースの包括的なガイド:パフォーマンスと信頼性の向上

    最後に、さらに高度なトレース テクニックについていくつか触れてみましょう。

    高度なトレース技術

    e コマース アプリの注文エンドポイントに高度なトレース技術を実装します。

    これらの技術は、トラフィックの多い環境を効率的に管理し、データのプライバシーを確保し、トレース データへの安全なアクセスを確保するのに役立ちます。

    高トラフィックの使用例

    高スループット環境では、リクエストごとにトレース データを収集すると、重大なオーバーヘッドが発生する可能性があります。サンプリングは、リクエストのサブセットのみのトレース データを収集することで、この問題を軽減します。

    トランザクションへのメタデータの追加

    タグとサンプル データを使用して、エラーやパフォーマンスの問題に関する追加のコンテキストを提供できます。これは、リクエスト、セッション、環境パラメーターの一部ではない情報を追加するのに役立ちます。追加のメタデータを渡して追加する方法について詳しくは、こちらをご覧ください。

    非同期処理

    非同期処理は、電子メールの送信、バックグラウンド ジョブの処理、大規模なデータ インポートの処理など、要求と応答のサイクル内で実行するには時間がかかりすぎるタスクを処理するために使用される一般的な手法です。 Ruby on Rails アプリケーションは通常、Sidekiq、Resque、Delayed Job などのバックグラウンド ジョブ ライブラリを使用して、これらのタスクを管理します。

    AppSignal は、Active Job、DelayedJob、Sho Ryuken、Sidekiq、Que などのライブラリとシームレスに統合し、バックグラウンド ジョブのパフォーマンスとエラーに関する洞察を提供します。

    セキュリティに関する考慮事項

    セキュリティは、本番環境に対応したアプリケーションにとって非常に重要な部分です。ユーザーのプライバシーを維持するには、機密データがトレース データに含まれないようにする必要があります。フィルターパラメーターの値は [FILTERED] に置き換えられます。 AppSignal に送信されるとき。

    config/appsignal.yml を変更しましょう マスキングが必要ないくつかの機密リクエスト パラメータを含める。

     

    Rails filter_parameters を使用する場合 config オプションを使用すると、AppSignal はその構成を Rails の構成とマージするため、2 回構成する必要はありません。

    これらの高度なトレース技術を実装することで、トラフィックの多い環境を効率的に管理し、機密データのプライバシーを確保できます。フィルタ パラメータの詳細については、こちらをご覧ください。

    まとめ

    AppSignal を使用して Ruby アプリのトレースを設定するには、トレースの基礎を理解し、アプリケーションを準備し、段階的な設定プロセスに従う必要があることがわかりました。その後、高度なメソッドとデバッグ技術を使用して、トレースを強化できます。

    開発およびメンテナンス サイクルでトレースを定期的に適用すると、パフォーマンスと信頼性が向上します。Ruby アプリケーションのモニタリングを強化し、パフォーマンスに関する深い洞察を得るために、今すぐ AppSignal を始めましょう。

    コーディングを楽しんでください!

    Ruby on Rails での AppSignal トレースの包括的なガイド:パフォーマンスと信頼性の向上

    ダニエル・アマ

    ゲスト著者のダニエルは、Ruby on Rails、React、AI を活用したアーキテクチャを使用してスケーラブルな Web およびモバイル プラットフォームを構築してきた 10 年以上の経験を持つ、プリンシパル ソフトウェア エンジニア兼技術創設者です。彼は Taskclan の作成者であり、エンジニアリングのリーダーシップ、開発者のワークフロー、スタートアップの実行について Medium と LinkedIn で頻繁に執筆しています。

    ダニエル・アマによるすべての記事


    1. GoでのWeb開発:ミドルウェア、テンプレート、データベースなど

      このシリーズの前回の記事では、Go net / httpについて広範な議論を行いました。 パッケージと、本番環境に対応したWebアプリケーションでの使用方法。主にルーティングの側面とその他の癖や http.ServeMuxの機能に焦点を当てました。 タイプ。 この記事では、 ServeMuxに関するディスカッションを締めくくります。 デフォルトのルーターを使用してミドルウェア機能を実装する方法を示し、Goを使用してWebサービスを開発するときに役立つ他の標準ライブラリパッケージを紹介します。 Goのミドルウェア 多くのまたはすべてのHTTPリクエストに対して実行する必要のある共有機能を設

    2. ブレッドクラムの紹介

      本番環境でエラーに対処したことがありますか。何をしようとしても 、開発環境またはステージング環境で問題を再現することはできませんか?多くの場合、次のステップは、本番環境でデバッグログをスローして、より多くのデータを収集することです。ログをリクエストと関連付ける良い方法がない場合、特にインシデントの際にイライラする可能性があります。 役立つ機能を追加しました。これはブレッドクラムと呼ばれます。 ブレッドクラム ログイベントに非常によく似ていますが、エラーと一緒に保存および報告されます。ログのように、ブレッドクラムにはメッセージが含まれますが、メタデータ(ハッシュマップの形式)を保持する