構成ベースの .NET Core トレース SDK

構成ベースの .NET Core トレース SDK を使用すると、スパンの仕様およびスパンで伝達するタグを宣言し、アプリケーションの特定のメソッドを実行してそれらを作成することができます。

宣言型のアプローチは、コードベースのトレースSDKを使用する場合よりも若干表現力に富んでいますが、すべての機能を提供しているわけではありません。

カスタムトレースを実装する前に、 トレースのベストプラクティスを確認してください。

特記事項

構成ベースの SDK は、アプリケーションの変更に対して不安定です。 クラスまたはメソッドを名前変更すると、構成が突然一致しなくなり、トレース・データが失われます。 可能な限り、.NET Core SDK のご利用をお勧めします。このSDKはコードの変更に対する耐性がはるかに高く、目的を達成するための機能も豊富に備えています。

構成

設定は ファイル configuration.yaml に記述されています。

注: 構成ベースの .NET Core トレース SDK の構成に対する変更は、Instana エージェントによって自動的に取得されます。 変更された構成を使用するには、既にインスツルメントされているアプリケーションを再始動する必要があります。
注:.NET Core Trace SDK(設定ベース)は、Nugetパッケージ版 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 つの targetmatch オブジェクトは、インスツルメンテーションの適用先のメソッドを指定します。 span オブジェクトは、スパンの作成方法を指定します。これには、スパンの名前 (call.name フィルターの無制限分析などで使用される) および設定するタグが含まれます。

インスツルメントするメソッドの突き合わせ

注: 設定ベースのSDKは、現在、クラス上のメソッドの照合のみをサポートしています。 インターフェースまたは基本クラスに基づく (継承パスをトラバースする) インスツルメンテーションはまだサポートされていません。

このオブジェクトは、インスツルメンテーションを実行するコード・ポイントを記述します。

  • type: インスツルメントするコードのタイプ。サポートされる値は以下のとおりです。
  • class: 具象クラスと一致
  • name: 一致させるクラス、インターフェース、または基底クラスの完全修飾名。ネストされたクラスの場合は、 a.b.c.OutsideClass$NestedClass `` 記法を使用する必要があります
  • method: 呼び出しの記録対象とする特定のクラス、インターフェース、または基本クラスのメソッドの名前
  • arguments: メソッドが受け取る引数の数 (この引数の数の過負荷のみが照合されます)。 引数が渡されない場合は 0。

スパンの形式の指定

このオブジェクトは、match で記述したメソッドが呼び出された場合に作成されるスパンのプロパティーを記述します。

  • name: スパンの名前
  • type: スパン・タイプ (オプション)。サポートされる値は以下のとおりです。
    • ENTRY。外部システムからの「着信」呼び出しを示すために使用されます。
    • INTERMEDIATE。「関心対象の」メソッドへの内部呼び出しのキャプチャーに使用されます (デフォルト)。
    • EXIT。外部システムへの「発信」呼び出しを示すために使用されます。
  • tags: キャプチャーするタグ/注釈のリストとその値の取得方法 (オプション)。サポートされる値は以下のとおりです。
    • constant、定数値をキャプチャーします。
      • kind: constant
      • name: 作成するタグの名前
      • value: 作成するタグの定数値
    • return、メソッド呼び出しの戻り値をキャプチャーします。
      • kind: return
      • name: 作成するタグの名前。値は、戻りオブジェクトの値です。
    • argument、メソッド呼び出しの特定の引数値をキャプチャーします。
      • kind: argument
      • name: 作成するタグの名前
      • 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 を明示的に作成せずにすべての引数または戻り値をキャプチャーする処理はサポートされていません。
  • クラスやメソッドの名前パターンの指定はサポートされていません。
  • スパンを作成する前にトレース・コンテキストを復元することはサポートされていません。