New Relic Ruby エージェントは、 grpc gem (バージョン 1.0.0 以降) を使用するgRPCクライアントとサーバーを自動的に計測します。単項、双方向、クライアント ストリーミング、およびサーバー ストリーミングのすべての通信タイプがサポートされています。
重要
gRPC インストルメンテーションには、Ruby エージェント バージョン 8.10.0 以降が必要です。
構成 (すべての設定はオプションです)
gRPC クライアントとサーバーのインストルメンテーションを個別に構成できます。デフォルトでは、両方の構成オプションがautomatic
の略であるauto
に設定されています。それぞれのエージェントの自動動作は、最初に Ruby モジュールのプリペンド動作を利用しようとし、既知の互換性の問題が発生した場合に Ruby メソッド チェーン動作にフォールバックすることにより、インストルメンテーションを有効にすることです。
以降のセクションで追加のオプションと例を参照してください。
クライアントとサーバーのオプション
New Relic 設定ファイルを変更するか、環境変数を設定することで、エージェントの動作を変更できます。クライアントとサーバーの両方に適用されるオプションは次のとおりです。
auto
: 自動 Ruby メソッド動作選択によって有効になるデフォルトdisabled
: インストルメンテーションが無効prepend
: Ruby メソッドのプリペンドの使用を強制するchain
: Ruby メソッドチェーンの使用を強制する
クライアント固有のオプション
以下はクライアントにのみ使用します。
- 構成ファイルのパラメーター:
instrumentation.grpc_client
- 環境変数:
NEW_RELIC_INSTRUMENTATION_GRPC_CLIENT
サーバー固有のオプション
以下はサーバーにのみ使用します。
- 構成ファイルのパラメーター:
instrumentation.grpc_server
- 環境変数:
NEW_RELIC_INSTRUMENTATION_GRPC_SERVER
クライアントとサーバーの構成例
構成ファイルを使用して gRPC サーバー インストルメンテーションを無効にするには:
# newrelic.ymlinstrumentation.grpc_server: disabled
環境変数を使用して gRPC クライアント インストルメンテーションを無効にするには:
$export NEW_RELIC_INSTRUMENTATION_GRPC_CLIENT=disabled
検証
New Relic Ruby エージェントが起動すると、ロードされたgrpc
gem の存在が検出され、gRPC インストルメンテーションの適用が試行されます。gRPC クライアントおよびサーバー コンポーネントにこのインストルメンテーションを適用することに成功すると、エージェントは次の行をログ ファイルに書き込みます (デフォルトではlog/newrelic_agent.log
)。
INFO : Installing New Relic supported gRPC_Client instrumentation using PrependINFO : Installing New Relic supported gRPC_Server instrumentation using Prepend
使用方法
インストルメンテーションが適切に機能している限り (これを確認するには、上記の検証を参照してください)、New Relic Ruby エージェントによって実行されるすべてのインストルメンテーションは完全に自動化され、既存の gRPC クライアントおよび/またはサーバー コードを変更する必要はありません。
New Relic Ruby エージェントの gRPC インスツルメンテーションには、スパンに分散トレース ヘッダーが含まれています。これにより、gRPC クライアントとサーバーの呼び出しを、W3C 分散トレースをサポートする他のサービスに接続できます。gRPC リクエストは、Ruby ベースのクライアントから別の言語に基づくサーバーに送信できます。Ruby ベースのサーバーは、別の言語に基づくクライアントからのリクエストに対応できます。
重要
gRPC クライアント リクエストは、既存の New Relic トランザクションが存在するときに生成されない限り、New Relic に報告されません。通常、これは、Rails コントローラー メソッドまたはバックグラウンド ジョブ プロセスがアクティブであり、gRPC クライアント リクエストの呼び出しを担当していることを意味します。リクエストは、New Relic Web UI の外側のラッパーのトランザクションの下にロールアップされます。
gRPC サーバー リクエストは、常に新しい New Relic トランザクションを生成し、既存の New Relic トランザクションを要求したり、ロールアップしたりすることはありません。
データを見る
収集された gRPC データは、New Relic UI の多数のページで確認できます。
概要ページ
UI [概要] ページでは、gRPC クライアント リクエストがウェブトランザクションとして表示され、次のグラフにデータが提供されます: Web transactions time、Throughput、Error rate。
分散トレース ページ
ヒント
新しい Ruby エージェントでは分散トレースがデフォルトでオンになっていますが、質問がある場合は、Ruby サービスの分散トレース を参照してください。
UI の分散トレース ページで gRPC データを確認します。
one.newrelic.com > All capabilities > APM & servicesに移動します。
エンティティ(サービス)をクリックします。
左側のペインのMonitorセクションで、 Distributed tracingをクリックします。
トレース グループをクリックします。
リストからトレースを選択し、クリックします。
Expand allをクリックします。
得られたトレース スパンのリストから、個々のトレース スパンをクリックします。
右側のペインでAttributesタブをクリックします。
- Client instances:
grpc_status
、grpc_type
、http.method
、http.url
属性がすべて表示されます。 失敗したクライアント要求の場合(0
以外のgrpc_status
値を持つ)、追加のgrpc_message
プロパティが gRPC ステータス メッセージとともに表示されます。 - Server instances:
request.grpc_type
、request.method
、request.uri
属性がすべて表示されます。
- Client instances:
クライアント アプリケーションとサーバー アプリケーションの両方が、gRPC (Ruby または別の言語) をサポートする New Relic エージェントによって監視されている限り、分散トレーシング マップは次のことを行う必要があります。
- クライアント アプリケーションとサーバー アプリケーションの両方を表示します。
- それらの間で実行された異なる通話タイプの数を報告します。
gRPC ベースのRuby例外が発生した場合、例外に関する情報が Events > Errors ページに表示されます。
サポートとフィードバック
New Relic Ruby エージェントの gRPC インストルメンテーションに関連するサポートやフィードバックについて New Relic に連絡する場合は、次の質問に対する回答を用意してください。
- 使用している
grpc
gem のバージョンは何ですか? - New Relic Infinite Tracing を使用していますか?
- アプリケーションの環境をどのように説明しますか?(フレームワーク、Ruby バージョン、その他の主要な使用技術)
- gRPC は何に使用しますか?
- gRPC クライアントに Ruby を使用していますか?
- gRPC クライアントに別の言語を使用していますか?
- gRPC サーバーに Ruby を使用していますか?
- gRPC サーバーに別の言語を使用していますか?
- gRPC クライアント コードをどこで呼び出していますか?(コントローラ、バックグラウンド ジョブなどから)
- データを送信するためにどのような戦略を使用していますか?(単項、双方向、クライアント ストリーミング、サーバー ストリーミング)