処理されていないスパン

一部のスパンが Splunk AppDynamics によって処理されていない場合は、次を試してください。

発信に必要な属性を確認する

発信をインストゥルメントするスパンの場合Splunk AppDynamicsSplunk AppDynamics では、スパンオブジェクトに一意の属性を追加する必要があります。そうしないと、スパンは パイプラインからドロップされます。スパンの必須属性と推奨属性の両方について、以下の表を参照してください。

一部の属性は必須ではありませんが、フローマップでより正確に表現するために強く推奨されます。

表 1. HTTP
属性 タイプ 説明 必要条件
http.method 文字列 HTTP 要求メソッド GET、POST、HEAD 必須
http.url 文字列 完全な HTTP リクエスト URL https://www.foo.bar/search?q=OpenTelemetry#SemConv *条件付き要件

HTTPHost

文字列 HTTP ホストヘッダーの値 www.example.org

*条件付き要件

http.target 文字列 HTTP リクエスト行または同等のもので渡される完全なリクエストターゲット。 /path/12314/?q=ddds#123 *条件付き要件
http.scheme 文字列 使用されたプロトコルを識別するスキーム http、https *条件付き要件
net.peer.ip 文字列 ピアのリモートアドレス 127.0.0.1 *条件付き要件
net.peer.port int リモートポート番号 80、8080、443 *条件付き要件
net.peer.name 文字列 リモートホスト名など example.com 必須

*条件付き要件:スパンの作成時に次のいずれかが含まれている必要があります。

  • http.url
  • http.schemehttp.hosthttp.target
  • http.schemenet.peer.namenet.peer.porthttp.target
  • http.schemenet.peer.ipnet.peer.porthttp.target
表 2. データベース
属性 タイプ 説明 必要条件
db.system 文字列 使用されているデータベース管理システム(DBMS)製品の識別子 other_sql 必須
net.peer.ip 文字列 ピアのリモートアドレス(IPv4 の場合はドット付き 10 進数、https://datatracker.ietf.org/doc/html/rfc5952IPv6 の場合は RFC5952) 127.0.0.1 *条件付き要件
net.peer.name 文字列 Remote Hostname example.com *条件付き要件

*条件付き要件:net.peer.ip または net.peer.name のいずれかを使用する必要があります。

表 3. メッセージングキュー
属性 タイプ 説明 必要条件
messaging.system 文字列 メッセージングシステムを識別する文字列 kafka、rabbitmq、rocketmq、activemq 必須
messaging.destination 文字列 メッセージの宛先名。これはスパン名と同じかもしれませんが、それでも必要です。 MyQueue、MyTopic 必須

デフォルトの SpanKind を変更する

Splunk AppDynamics は、デフォルトのスパンの種類INTERNAL を処理しません。実装で INTERNAL スパンを送信している場合、それらのスパンはコントローラ UI フローマップに反映されません。SpanKind を次の代替スパンの種類のいずれかに設定する必要があります。

  • SERVER:スパンが同期 RPC または他のリモート要求のサーバー側の処理をカバーすることを示します。このスパンは、多くの場合、応答を待機することが予期されていたリモート CLIENT スパンの子です。
  • CLIENT:スパンが何らかのリモートサービスへのリクエストを記述していることを示します。このスパンは通常、リモート SERVER スパンの親であり、応答を受信するまで終了しません。
  • PRODUCER:スパンが非同期リクエストのイニシエータを記述することを示します。この親スパンは、対応する子 CONSUMER スパンの前に終了することが多く、子スパンが開始する前に終了することもあります。バッチ処理を使用したメッセージングシナリオでは、個々のメッセージをトレースするには、メッセージごとに新しい PRODUCER スパンを作成する必要があります。
  • CONSUMER:スパンが非同期 PRODUCER リクエストの子を記述することを示します。

SERVER スパンと CONSUMER スパンは entry スパンで、CLIENT スパンと PRODUCER スパンは exit スパンです。exit コールを検出可能にするには、entry スパンが exit スパンの前になければなりません。また、entry スパンが exit スパンの前にある限り、entry スパンと exit スパンの間に 1 つ以上の INTERNAL スパンが存在できます。

詳細については、「OpenTelemetry の仕様」を参照してください。

OpenTelemetry SDK(Java)を使用して SpanKindSERVER に設定する OpenTelemetry ドキュメントの例を次に示します。

Span span = tracer.spanBuilder("/resource/path").setSpanKind(SpanKind.SERVER).startSpan();
span.setAttribute("http.method", "GET");
span.setAttribute("http.url", url.toString());