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

New Relicはウェブトランザクションとバックグラウンドタスクなどの非ウェブトランザクションについて情報を収集し報告します。通常、New Relicはユーザーがアプリケーションコードを変更しなくても自動的に完全な情報を生成します。ただし、サポートされているフレームワークを使用してない場合は、カスタムインストゥルメンテーションを追加する必要があるかもしれません。

カスタムインストゥルメンテーションは以下を行うためにも使われます。

  • トランザクショントレースに詳細を追加する。
  • 選択したトランザクションをインストゥルメントしたくない場合に、インストゥルメンテーションをブロックする。
  • New Relicがピックアップしていないコードの一部をインストゥルメントする。

新たなトランザクションを作成するカスタムインストゥルメンテーションは、メトリックタイムスライスデータとイベントデータの両方を収集します。すでにインストゥルメントされたトランザクションに対するカスタムインストゥルメンテーションはメトリックタイムスライスデータだけを収集します。

トランザクション名の末尾に角括弧 [suffix] を使わないでください。New Relicは名前から自動的に角括弧を除去します。代わりに、必要に応じて丸括弧 suffix、またはその他の記号を使ってください。

いつカスタムインストゥルメンテーションを使うか

カスタムインストゥルメンテーションでは、New Relicの自動インストゥルメンテーションによってキャプチャされないインタラクションを追跡できます。カスタムインストゥルメンテーションはトランザクショントレースに詳細を追加することもでき、主な問題点を把握するのに役立ちます。

New Relicは多くのフレームワークから自動的にデータを収集します。サポートされているフレームワークを使っている場合、メトリックタイムスライス、イベント、トレースを収集するためのカスタムインストゥルメンテーションは必要ありません。

ただし、以下の状況に遭遇した場合は、カスタムインストゥルメンテーションが必要になるかもしれません。

  • UIにトランザクションが表示されない。
  • トランザクショントレースに完全な詳細がないアプリケーションコード時間の膨大なブロックが含まれている。

サポートされているフレームワークを使っているもののNew Relic APM Transactionsページにトランザクションが見当たらない場合、フレームワークインストゥルメンテーションが機能しているか確認するためsupport.newrelic.comにサポートを依頼してください。

カスタムインストゥルメンテーションを実施する

カスタムインストゥルメンテーションの実装はエージェントごとに異なります。

C SDKカスタムインストゥルメンテーション

C SDKでモニターされるアプリケーションについては、トランザクション、セグメント、エラーを手動でインストゥルメントする必要があります。詳細については、C SDKのインストゥルメンテーション手順を参照してください。

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

Golangアプリはコンパイルされたネイティブバイナリファイルから実行するため、New Relicのインストゥルメンテーションはすべて手動で実施する必要があります。Goアプリにインストゥルメンテーションをセットアップする方法については、「Instrument GoトランザクションInstrument Goセグメント」をご覧ください。

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

New RelicのJavaエージェントはカスタムインストゥルメンテーションを2通りの方法でサポートします。

  • アノテーション:New Relicが個々のメソッドをインストゥルメントするよう、コードに@Traceアノテーションを追加してください。2、3のメソッドだけインストゥルメントする場合、アノテーションは簡単に実装できます。より複雑なインストゥルメンテーションを行う場合、あるいはコードを変更できない場合は、XMLを使ってください。
  • XML:XMLファイルにNew Relicによる監視方法を定義します。XMLインストゥルメンテーションは柔軟で、コードの編集を必要としませんが、アノテーションと比べてトラブルシューティングが困難です。

詳しくは、Javaカスタムインストゥルメンテーションをご覧ください。

.NETカスタムインストゥルメンテーション

New Relicの.NETエージェントは2通りのカスタムインストゥルメンテーションをサポートします。

  • 属性:個々のメソッドをインストゥルメントするにはコードにエージェントAPIコールでアノテーションを付けます。アノテーションは簡単に実装できますが、ソースコードの編集が必要です。
  • XML:XMLファイルにNew Relicによるインストゥルメント方法を定義します。XMLインストゥルメンテーションはソースコードの変更を必要としませんが、属性のインストゥルメンテーションと比べて作成と更新がはるかに複雑です。

詳しくは、「.NETカスタムインストゥルメンテーションの紹介」をご覧ください。

Node.jsカスタムインストゥルメンテーション

New RelicのNode.jsエージェントはカスタムインストゥルメンテーションにAPIコールを使います。詳しくは、「Node.jsカスタムインストゥルメンテーション」をご覧ください。

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

New RelicのPHPエージェントはカスタムインストゥルメンテーションにAPIコールを使います。詳しくは、「PHPカスタムインストゥルメンテーション」をご覧ください。

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

New RelicのPythonエージェントはカスタムインストゥルメンテーションを2通りの方法でサポートします。

  • 設定ファイル:インストゥルメントする関数とメソッドを指定するにはエージェント設定ファイルを使います。エージェント設定ファイルは簡単にセットアップでき、コード変更も必要ありません。ただし、APIコールより柔軟性に劣ります。
  • API コール:New Relic Python APIを呼び出すコードを編集します。APIは設定ファイルを介したインストゥルメンテーションよりはるかに柔軟性に優れますが、コードの変更が必要です。

詳しくは、「Pythonカスタムインストゥルメンテーション」をご覧ください。

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

New RelicのRubyエージェントは、ターゲットメソッドを定義してそれらにトランザクショントレーサーを追加するためにAPIコールを使います。詳しくは、「Rubyカスタムインストゥルメンテーション」をご覧ください。

グループ化の問題

アカウントがNew Relicに名前の異なるメトリックタイムスライスを送りすぎたり、それらのウェブトランザクションが適切に集計されない場合、メトリクスのグループ化問題が起こります。たとえば、単一の/user/controlpanel/メトリック名でなく、/user/controlpanel/alice/user/controlpanel/bob/user/controlpanel/carolが表示される場合があります。

New Relicが効率的にグループ化できないほど多くの固有の名前が付けられたメトリックタイムスライスを導入した場合、カスタムインストゥルメンテーションはメトリックのグループ化問題を招くことがあります。数千のメトリックスを送ると、New Relicはトランザクション数を減らすルールを適用するかもしれません。

その他のヘルプ

さらに支援が必要な場合は、これらのサポートと学習リソースを確認してください: