問題
APM UI にMiddleware/Rack/ActionDispatch::Routing::RouteSet#call
という名前のトランザクションが表示されますが、それが何であるかわかりません。
原因
Middleware/Rack/ActionDispatch::Routing::RouteSet#call
という名前のトランザクションは、インストルメント化されていない Rails アプリ内のルートを表します。Rails ミドルウェアがインストルメント化されているため、New Relic はトランザクションに費やされた時間をキャプチャできますが、それ以上の詳細は提供できません。
Middleware/Rack/ActionDispatch::Routing::RouteSet#call
という名前のトランザクションが発生する可能性のある状況はさまざまです。このトランザクション タイプの最も一般的な原因に対して 2 つの解決策を提供しました。
解決
アプリ内のルートがインストルメント化されたミドルウェアを経由してインスツルメント化されていない gem に到達する場合、トランザクションに関するより具体的なデータを確認するには、その gem にカスタム インストルメンテーションを追加する必要があります。カスタム インストルメンテーションを追加するには、 Ruby カスタム インストルメンテーションのドキュメントを読むことをお勧めします。
これらのトランザクションの詳細を取得するには、アプリケーションにカスタム インストルメンテーションを追加するのが最善の方法です。
Ruby エージェントは、インストルメンテーションをActionController::Base
に挿入することでコントローラーをインストルメントします。ただし、ルートがActionController::Base
を継承しないコントローラーを通過する場合、そのコントローラーにはインストルメンテーションが必要です。これをコントローラー クラスに追加して、コントローラーを直接計測します。
include NewRelic::Agent::Instrumentation::ControllerInstrumentation