構成ベースの .NET Core トレース SDK
構成ベースの .NET Core トレース SDK を使用すると、スパンの仕様およびスパンで伝達するタグを宣言し、アプリケーションの特定のメソッドを実行してそれらを作成することができます。
宣言型のアプローチは、コードベースのトレースSDKを使用する場合よりも若干表現力に富んでいますが、すべての機能を提供しているわけではありません。
カスタムトレースを実装する前に、 トレースのベストプラクティスを確認してください。
特記事項
構成ベースの SDK は、アプリケーションの変更に対して不安定です。 クラスまたはメソッドを名前変更すると、構成が突然一致しなくなり、トレース・データが失われます。 可能な限り、.NET Core SDK のご利用をお勧めします。このSDKはコードの変更に対する耐性がはるかに高く、目的を達成するための機能も豊富に備えています。
構成
設定は ファイル configuration.yaml に記述されています。
1.191.20 および.NET Core センサーの 1.0.28 バージョン以降で利用可能です。 1.193.4 より前の Nuget パッケージ・バージョンでは、これはオプトイン機能です。 これを有効にするには、環境変数を INSTANA_NETCORE_SDKCONFIG に設定 1 してください。 バージョン 1.193.4 以降では、この切り替えは不要になりました。フォーマット
以下のリストは、構成の一般的なフォーマットを示しています。
# .NET Full Framework Tracing
com.instana.plugin.netcore:
instrumentation:
sdk:
targets:
- match:
type: class
class: '<type-name>'
method: '<method-name>'
arguments: <number of arguments>
span:
name: '<span-name>'
type: 'ENTRY' | 'EXIT' | 'INTERMEDIATE'
tags:
- name: '<name of tag>'
kind: argument
index: <0-based index of the method's argument>
- name: '<name of tag>'
kind: constant
index: '<constant value>'
- name: '<name of tag>'
kind: return
targets キー内に複数のターゲットを定義できます。各ターゲットでは、作成するスパンを 1 つ指定します。 1 つの target の match オブジェクトは、インスツルメンテーションの適用先のメソッドを指定します。 span オブジェクトは、スパンの作成方法を指定します。これには、スパンの名前 (call.name フィルターの無制限分析などで使用される) および設定するタグが含まれます。
インスツルメントするメソッドの突き合わせ
このオブジェクトは、インスツルメンテーションを実行するコード・ポイントを記述します。
type: インスツルメントするコードのタイプ。サポートされる値は以下のとおりです。class: 具象クラスと一致name: 一致させるクラス、インターフェース、または基底クラスの完全修飾名。ネストされたクラスの場合は、a.b.c.OutsideClass$NestedClass`` 記法を使用する必要がありますmethod: 呼び出しの記録対象とする特定のクラス、インターフェース、または基本クラスのメソッドの名前arguments: メソッドが受け取る引数の数 (この引数の数の過負荷のみが照合されます)。 引数が渡されない場合は 0。
スパンの形式の指定
このオブジェクトは、match で記述したメソッドが呼び出された場合に作成されるスパンのプロパティーを記述します。
name: スパンの名前type: スパン・タイプ (オプション)。サポートされる値は以下のとおりです。ENTRY。外部システムからの「着信」呼び出しを示すために使用されます。INTERMEDIATE。「関心対象の」メソッドへの内部呼び出しのキャプチャーに使用されます (デフォルト)。EXIT。外部システムへの「発信」呼び出しを示すために使用されます。
tags: キャプチャーするタグ/注釈のリストとその値の取得方法 (オプション)。サポートされる値は以下のとおりです。constant、定数値をキャプチャーします。kind:constantname: 作成するタグの名前value: 作成するタグの定数値
return、メソッド呼び出しの戻り値をキャプチャーします。kind:returnname: 作成するタグの名前。値は、戻りオブジェクトの値です。
argument、メソッド呼び出しの特定の引数値をキャプチャーします。kind:argumentname: 作成するタグの名前index: タグの値としてキャプチャーする引数の 0 ベースのインデックス
null または ( Nullable<T> 値なし)の場合、定義されたタグは追加されません。 タグが欠落しているスパンは、 is not present 演算子を call.tag フィルターと組み合わせて使用して、 無制限分析 で検索できます。エラーのあるスパン
Exception がインスツルメンテーションされたメソッドの外部に伝搬されると、スパンには自動的にエラーのマークが付けられ、 Exception::Message の値がエラー・メッセージとして設定されます。このエラー・メッセージは、 call.error.message タグを使用して 無制限分析 で検索できます。
例
以下のスニペットは、バッチ・ジョブを処理するアプリケーションをトレースする方法の構成例を示しています。
com.instana.plugin.clr:
instrumentation:
sdk:
targets:
- match:
type: class
class: Example.BatchJobStarter
method: ExecuteJob
arguments: 1
span:
name: BatchJob
type: ENTRY
tags:
- name: endpoint
kind: constant
value: BatchJob
- name: batch.job
kind: argument
index: 0
- match:
type: class
class: Example.ProprietaryDatabaseClient
method: ExecuteQuery
arguments: 1
span:
name: DatabaseCall
type: EXIT
tags:
- name: db.connection_string
kind: constant
value: 'Data Source=SomeServer;Initial Catalog=SomeDB'
- name: db.statement
kind: argument
index: 0
最初に、クラス Example.BatchJobStarter 内のメソッド ExecuteJob がインスツルメントされて、BatchJob という名前のエントリー・スパン、定数値 BatchJob を持つ注釈 endpoint、および値として最初の引数を持つ注釈 batch.job が作成されます。
さらに、バッチ処理中の発信 DB 呼び出し (つまり、Example.ProprietaryDatabaseClient 内のメソッド ExecuteQuery の呼び出し) で、DatabaseCall という名前のエグジット・スパン、定数値 Data Source=SomeServer;Initial Catalog=SomeDB を持つ注釈 db.connection_string、およびメソッド呼び出しの最初の引数を持つ注釈 db.statement が作成されます。
ExecuteJob を使用して新規バッチを処理すると、新しいトレースが開始され、ExecuteQuery による後続の DB 更新がその中に子スパンとしてリストされます。 無制限分析と同様、すべての Instana 機能は、Instana AutoTrace で作成されたトレースに同じように使用できます。
制限
構成ベースの .NET Core トレース SDK には、以下の制約事項が適用されます。
- コンストラクターのインスツルメントはサポートされていません。
- 静的メソッドへのインストルメンテーションはサポートされていません。
- あるメソッドでスパンを開始して別のメソッドでそれを閉じることはサポートされていません。このため、構成ベースの SDK には、自動トレースで使用される
MethodPairInstrumentationに相当するものはありません。 tagを明示的に作成せずにすべての引数または戻り値をキャプチャーする処理はサポートされていません。- クラスやメソッドの名前パターンの指定はサポートされていません。
- スパンを作成する前にトレース・コンテキストを復元することはサポートされていません。