このガイドでは、.NETエージェントの8.xバージョンと9.xバージョンの間の主な変更点、アップグレード時に発生する可能性のある問題、およびバージョン9.xへの移行を成功させる方法について説明しています。
主な変更点は以下の通りです。
- ディストリビュートトレーシングはデフォルトで有効
- 非推奨のパブリックエージェントAPIの削除
- 非推奨の設定可能なエージェント設定の削除
デフォルトで有効な分散型トレーシング
分散トレーシング は、2018年7月から.NETエージェントに存在する機能です。クロスアプリケーショントレース(CAT)に代わるもので、分散型アプリケーションアーキテクチャの様々なサービスを経由するリクエストに何が起こっているのかを素早く理解するための最適な方法です。CATはバージョン9.0の時点で.NETエージェントでは非推奨となり、将来のメジャーリリースで削除される予定です。
.NET エージェントの 8.x バージョンでは、任意の .NET エージェント インストーラーによってホストにインストールされたデフォルトのnewrelic.config
ファイルには、 crossApplicationTracer
要素が存在し、 enabled="true"
が設定されていました。distributedTracing
要素はデフォルトでは存在しませんでした。
9.x では、これが逆になります。 crossApplicationTracer
はデフォルトでは存在せず、 distributedTracing
はデフォルト値のenabled="true"
で存在します。ただし、あるバージョンから別のバージョンにアップグレードする場合、エージェント インストーラーは既存のnewrelic.config
ファイルを上書きしません。したがって、特定のホストでエージェントを 8.x から 9.x にアップグレードする場合、そのホストでのエージェントの動作は変わりません。
ヒント
8.xから9.xへのアップグレード時に、新しいデフォルトのトレース動作を採用したい場合は、分散型トレースを有効にするようにエージェントの設定を変更する必要があります。9.xエージェントを新規にインストールしたホストでは、デフォルトで分散トレーシングが有効になります。
非推奨のパブリックエージェントAPIメソッドの削除
非推奨のAPIメソッドには、同等の機能を持つ代替APIメソッドが用意されています。
ヒント
アプリケーションコードで.NETエージェントAPIを使用している場合は、.NETエージェントを9.xにアップグレードする前に、プロジェクトのパッケージ参照を最新の9.xバージョンのエージェントAPIアセンブリに更新することをお勧めします。これにより、コードで9.xで削除されたAPIメソッドを使用している場合、コンパイル時のエラーが発生します。
重要
8.xまたはそれ以前のバージョンのAPIアセンブリを引き続き使用していて、コードが以下の非推奨APIのいずれかを使用している場合は、コンパイル時エラーは発生しません。しかし、9.xバージョンのエージェントでアプリをインストゥルメントすると、APIメソッドは影響を受けず、エージェントのログファイルにランタイム警告メッセージが表示されます。
削除されたAPI | リプレースメントAPI |
---|---|
W3C Trace Context ヘッダや、New Relic の分散型トレースヘッダを作成します。 | |
W3C Trace Context ヘッダや、New Relic の分散型トレースヘッダを受け入れます。 | |
| |
|
|
例
CreateDistributedTracePayload
以前、以下のようなコードがあったとします。
// Create an external web request to another instrumented serviceHttpWebRequest requestMessage = (HttpWebRequest)WebRequest.Create("https://remote-address");
// Create the trace payload IAgent agent = NewRelic.Api.Agent.NewRelic.GetAgent();ITransaction transaction = agent.CurrentTransaction;IDistributedTracePayload payload = transaction.CreateDistributedTracePayload();
// Add the trace payload to the headers of the outgoing requestrequestMessage.Headers.Set(NewRelic.Api.Agent.Constants.DistributedTracePayloadKey, payload.HttpSafe());
に置き換えることができます。
// Create an external web request to another instrumented serviceHttpWebRequest requestMessage = (HttpWebRequest)WebRequest.Create("https://remote-address");
// Insert the distributed trace headers to the message. The "setter"// action tells the API how to add headers to the "carrier", which// is the HttpWebRequest message in this exampleIAgent agent = NewRelic.Api.Agent.NewRelic.GetAgent();ITransaction currentTransaction = agent.CurrentTransaction;var setter = new Action<HttpWebRequest, string, string>((carrier, key, value) =>{ carrier.Headers?.Set(key, value);});currentTransaction.InsertDistributedTraceHeaders(requestMessage, setter);
AcceptDistributedTracePayload
以前、以下のようなコードがあったとします。
// Obtain the payload from the upstream request objectHttpContext httpContext = HttpContext.Current;string payload = httpContext.Request.Headers[NewRelic.Api.Agent.Constants.DistributedTracePayloadKey];
// Accept the payloadIAgent agent = NewRelic.Api.Agent.NewRelic.GetAgent();ITransaction transaction = agent.CurrentTransaction;transaction.AcceptDistributedTracePayload(payload, TransportType.HTTP);
に置き換えることができます。
HttpContext httpContext = HttpContext.Current;IAgent agent = NewRelic.Api.Agent.NewRelic.GetAgent();ITransaction currentTransaction = agent.CurrentTransaction;
// The "Getter" method defines how to get headers from the carrier, // which is the HttpContext in this example IEnumerable<string> Getter(HttpContext carrier, string key){ string value = carrier.Request.Headers[key]; return value == null ? null : new string[] { value };}
// Call the APIcurrentTransaction.AcceptDistributedTraceHeaders(httpContext, Getter, TransportType.HTTP);
AddCustomParameter
以前、以下のようなコードがあったとします。
// Called in code that runs inside a transaction created by the// agent, for example an ASP.NET WebApi endpointNewRelic.Api.Agent.NewRelic.AddCustomParameter("myCustomParameter", "myValue");
に置き換えることができます。
// Get the current transactionIAgent agent = NewRelic.Api.Agent.NewRelic.GetAgent();ITransaction currentTransaction = agent.CurrentTransaction;
// Add the custom attribute to the current transactioncurrentTransaction.AddCustomAttribute("myCustomParameter", "myValue");
非推奨のエージェント設定の削除
次のエージェント構成設定がエージェントから削除されています。8.x から 9.x へのアップグレード パスをできるだけスムーズにするために、 newrelic.config
ファイルの XML スキーマから設定を削除しません。ただし、エージェントの内部構成ロジックは、これらの設定を無視するように更新され、これらの構成値が無効であることを警告するメッセージをエージェント ログ ファイルに記録します。
表記法について:説明を簡単にするために、このセクションの残りの部分では、コンフィギュレーション要素を完全なXMLではなく、「ドット記法」という略記法で記述します。
たとえば、 newrelic.config
ファイルに表示される構成要素は次のようになります。
<configuration> <parameterGroups> <identityParameters> … </identityParameters> </parameterGroups> …</configuration>
この例では、 parameterGroups.IdentityParameters
と記述されます。これらの構成要素はすべて最上位の<configuration>
要素の子であるため、簡潔にするために省略されています。
削除される設定オプションのほとんどは、属性データの取得または除外に関するものです。以下のドキュメントは、エージェントの属性データ収集の全体像とその設定方法を理解するのに役立ちます。
設定オプションの削除 | 交換構成オプション |
---|---|
|
に相当します。
|
|
|
|
|
|
すべてのリクエストパラメーターを含みます。 |
|
|
| なし |
|
すべてのリクエストパラメーターを含みます。 |
|
|
|
さらに、 |
|
|
|
|
|
|
|
詳しくは、 エラー収集設定 のドキュメントを参照してください。 |
| なし この構成要素は、エージェントで使用されていませんでした。 |