このドキュメントでは、New Relic が専用の OTLP エンドポイントを通じて受信した OpenTelemetry ログを処理する方法に焦点を当てています。
OpenTelemetry ログを New Relic に送信するための一般的なワークフローは 2 つあります。
- アプリケーションは、ログを New Relic OTLP エンドポイントに直接送信できます。
- 具体的な実装の詳細については、関連するOpenTelemetry 言語ドキュメントを参照してください。New Relic を使用したサービスの監視の詳細については、 OpenTelemetry APM 監視を参照してください。
この方法では、ファイルまたは標準出力 (
stdout
) に書き込まれたアプリケーション ログをスクレイピングします。通常、このタスクにはOpenTelemetry Collector が使用されます。 スクレイピングされたログは New Relic OTLP エンドポイントに転送されます。
詳細な設定情報については、次のOpenTelemetryリソースを参照してください。
選択した収集方法に関係なく、統合を成功させるには、ログをこのエージェントにエクスポートするようにログ ソースを構成する必要があります。 続行する前に、必ず デバイスの設定要件を確認してください。
OTLP ログレコードのマッピング
New Relic は OTLP ログ レコードをLog
データ型にマッピングします。 以下の表は、 LogRecord
proto メッセージのフィールドが New Relic Log
にどのようにマッピングされるかを示しています。
OTLP | New Relic |
---|---|
| 各キー値は |
|
|
|
|
| 各キー値は |
|
|
|
|
|
|
|
|
| 各キー値は |
|
|
|
|
|
|
|
|
表の脚注
[1]リソース属性、スコープ属性、ログレコード属性、最上位ログレコードフィールド、およびLogRecord.body
[3]からの解析された属性に競合がある場合、優先順位(最高から最低)は次のようになります: LogRecord.body
からの解析された属性 -> 最上位LogRecord.*
フィールド > LogRecord.attributes
> ScopeLogs.InstrumentationScope.attributes
> ResourceLogs.Resource.attributes
。
OTLP New Relicエンドポイントでサポートされるプロパティ タイプ の詳細については「OTLP プロパティ タイプ」を、プロパティに対して実行される検証の詳細については 「OTLP プロパティ制限」を 参照してください。
[2] LogRecord.time_unix_nanos
が存在しない場合は、 timestamp
New Relicがデータを受信した時刻に設定されます。
[3]ログ解析はLogRecord.body
に適用され、次の属性を抽出しようとします:
- プレーン ログ テキスト: 文字列値が
message
属性として設定されます。 - 文字列化された JSON: ログが JSON としてフォーマットされていて、プレーン テキスト文字列として送信された場合、キーの値のペアが結果のログのプロパティになります。 詳細については、 JSON 解析のドキュメントを参照してください。 これは、ファイルまたは
stdout
からログを収集する場合に特に便利です。 この場合、ログ レコードに関連付けられたリソース属性 ( APM サービス相関に必要) がなく、LogRecord.trace_id
/LogRecord.span_id
の値 (トレース相関に必要) がないのが一般的です。 必要なフィールドを正常に解析できる場合、コンテキスト内のログは意図したとおりに機能します。 - マップ構造: データがOTLP 仕様に従ってマップとしてフォーマットされている場合、JSON 解析と同様に解析され、属性にフラット化されます。 詳細については、 JSON 解析のドキュメントを参照してください。
OpenTelemetry APM サービスとの相関
ログは、 必要な属性が含まれている場合、サービス エンティティと相関関係にあります。 通常、これらはResourceLogs.Resource.attributes
などのログのリソース属性から取得されますが、 OTLP マッピングの脚注 3で説明されているようにLogRecord.body
から解析することもできます。
サービスのログを表示するには、そのサービスのログ ページに移動します。
トレースとの相関
trace.id
属性とspan.id
属性を解決できる場合、ログはトレースと相関付けられます。 通常、これらはLogRecord.trace_id
フィールドとLogRecord.span_id
フィールドから取得されますが、 OTLP マッピングの脚注 3 で説明されているようにLogRecord.body
から解析することもできます。
特定のトレースのコンテキストで記録されたログを表示するには、次の 2 つのオプションがあります。
- トレースの詳細ページ 内の Logs [ログ]タブに移動します。
- サービスのログ ページに移動し、ログをクリックしてログの詳細を開きます。 トレースに関連付けられている場合は、Log details[ログの詳細]からTrace details[トレースの詳細]に移動できます。
New Relicカスタムイベントとしてログオン
OpenTelemetry は、空でない LogRecord
EventName を持つ として イベント を定義します。カスタムイベントは、 New Relicプラットフォームのコア信号です。 ただし、同じ名前を使用しているにもかかわらず、 OpenTelemetryイベントとNew Relicカスタムイベントは同一の概念ではありません。
- OpenTelemetry
EventName
は、カスタムイベント タイプと同じ形式または セマンティクスを共有しません。 OpenTelemetryイベント名はネームスペースで完全修飾され、小文字のスネークケースに従います。com.acme.my_event
.カスタムイベントタイプはパスカルケースです。例:MyEvent
. - OpenTelemetry イベントは、拡張された構造化ログと考えることができます。構造化ログと同様に、データは自由形式のテキストではなくキーの値のペアでエンコードされます。 さらに、
EventName
は発生したイベントのクラス/タイプを明確に示すシグナルとして機能します。カスタムイベントはまったく新しいイベント タイプとして扱われ、SELECT * FROM MyEvent
を使用してNRQL経由でアクセスできます。
これらの違いにより、OpenTelemetry New RelicLogs
イベントは、ほとんどの場合、OpenTelemetry New RelicLogs
New RelicRelicカスタムイベントよりも に類似しているため、 イベントは として取り込まれます。
ただし、 newrelic.event.type=<EventType>
形式に従ってLogRecord.attributes
にエントリを追加することで、 OpenTelemetry LogRecord
カスタムイベントとして取り込む必要があることを明示的に通知できます。
たとえば、プロパティnewrelic.event.type=MyEvent
を持つLogRecord
は、 type=MyEvent
のカスタムイベントとして取り込まれ、 SELECT * FROM MyEvent
を使用してNRQL経由でアクセスできます。