これらのOpenTelemetryトレーストピックをよく理解して、トレースとスパンがNewRelicに表示されるようにしてください。
必須項目
トレースデータのOpenTelemetryプロトコルに従って、スパンのstartTimeUnixNano
フィールドとendTimeUnixNano
フィールドが必要です。 startTimeUnixNano
が存在しない場合、スパンは削除され、 NrIntegrationError
が作成されます。 endTimeUnixNano
が存在しない場合、スパンの期間は長く、負になります。
スパンイベントのtimeUnixNano
フィールドは必須です。 timeUnixNano
が存在しない場合、spanイベントはドロップされ、 NrIntegrationError
が作成されます。
トレースデータのOpenTelemetryプロトコルに従って、スパンのtraceId
フィールドとspanId
フィールドが必要です。 traceId
またはspanId
が存在しない場合、スパンは削除され、 NrIntegrationError
が作成されます。
非推奨および削除されたフィールド
スパン ステータス コードはOTLP v0.6.0で廃止され、 v0.12.0で削除されました。これらのメッセージとフィールドを設定して送信するクライアントには、 UNRECOGNIZED
に設定された値が表示されます。これにより問題が発生する場合は、サポートにお問い合わせください。
サンプリング
トレースデータは、最も成熟したOpenTelemetryのデータタイプです。このため、New Relic の OpenTelemetry のユーザーエクスペリエンスは、主にトレースデータに基づいており、したがって、サンプリング戦略に影響されます。
サンプリングの設定は様々な場所で行うことができます。
- サービス: お使いの言語のOpenTelemetry SDKをご利用ください。
- コレクター: OpenTelemetry コレクターの独自のインスタンスを実行している場合は、テールベースのサンプリング (以下を参照) など、より高度な形式のサンプリングを実行するように構成できます。
さまざまなタイプのサンプリングを設定する方法については、こちらのドキュメントをご覧ください。
リソース属性と格納されたバイト
OpenTelemetry リソース属性は、 テレメトリを生成するエンティティの不変の表現として定義され、 attributes
として保存されます。 これらの属性が New Relic 内のトレース データにどのように適用され、保存されたバイトにどのように影響するかを理解することが重要です。OTLP ペイロードの例を使用し、結果の NRQL クエリ出力を検査することで、リソース属性の影響を観察できます。
OTLP トレース ペイロードの例
{ "resourceSpans": [ { "resource": { "attributes": [ { "key": "service.name", "value": { "stringValue": "newrelic-otlp-service" } }, { "key": "process.command_line", "value": { "stringValue": "/opt/java/openjdk/bin/java -javaagent:agent/opentelemetry-agent.jar" } } ] }, "scopeSpans": [ { "scope": { "name": "newrelic-instrumentation-library", "version": "1.0.0" }, "spans": [ { "attributes": [ { "key": "message_id", "value": { "stringValue": "000000-aaaaaa-111111-bbbbbb" } } ], "startTimeUnixNano": "1677182057000000000", "endTimeUnixNano": "1677182059000000000", "kind": "SPAN_KIND_INTERNAL", "name": "example-span", "spanId": "c469d81892057f5f", "traceId": "aa04993b9acefbedea802f8d96e4bc58" } ] } ] } ]}
NRQLクエリの表現
{ "duration.ms": 2000.0, "entity.guid": "OBFUSCATED", "entity.name": "newrelic-otlp-service", "entity.type": "SERVICE", "entityGuid": "OBFUSCATED", "guid": "c469d81892057f5f", "id": "c469d81892057f5f", "instrumentation.provider": "opentelemetry", "message_id": "000000-aaaaaa-111111-bbbbbb", "name": "example-span", "newRelic.ingestPoint": "api.traces", "newrelic.source": "api.traces.otlp", "nr.isPrimaryEntityData": true, "otel.library.name": "newrelic-instrumentation-library", "otel.library.version": "1.0.0", "process.command_line": "/opt/java/openjdk/bin/java -javaagent:agent/opentelemetry-agent.jar", "service.name": "newrelic-otlp-service", "span.kind": "internal", "timestamp": 1677182057000, "trace.id": "aa04993b9acefbedea802f8d96e4bc58", "traceId": "aa04993b9acefbedea802f8d96e4bc58"}
ヒント
この例は、基本的な概念を説明するための単純化された比較です。実際のバージョンは、より複雑であるため、外観が少し異なります。
リソース属性で注意すべき最も重要なことは、送信されるペイロードのサイズが NRDB に格納されているものと比べて異なる可能性があることです。すべてのリソース属性値は、OTLP ペイロードのすべてのスパンに適用されます。上記の例では、単一のスパンのみが送信されていますが、ペイロードに 100 のスパンが含まれている場合、それぞれにprocess.command_line
とservice.name
が適用されます。
一部の Java ベースのアプリケーションでは、デフォルトのprocess.command_line
属性が数千文字になる場合があり、その結果、請求可能なバイト数が予期せず大幅に増加する場合があります。これらのリソース属性が値を提供しない場合は 、OpenTelemetry と属性の長さに従って無効にすることができます。