例外

この記事は英語の原文を日本語に翻訳したものです。原文: https://opentelemetry.io/docs/specs/otel/trace/exceptions/

翻訳元: open-telemetry/opentelemetry-specification v1.60.0(コミット 29ae8c7

ステータス: 特記のない限りStable

この文書は、例外とその属性をどのように記録するかを定義します。

例外の記録

例外は、それがスパン終了時に未処理のまま残り、スパンのステータスがERRORに設定される原因となった場合に限り、その例外が発生した間のスパン上のEventとして記録すべきです(SHOULD)。

イベントの名前は"exception"でなければなりません(MUST)。

ステータス: Development - 各シグナルをまたいでエラーを報告する方法の詳細については、Recording Errors文書を参照してください。

このセマンティック規約を実装する自動計装の典型的なテンプレートは、APIが提供するrecordExceptionメソッドを使うと、以下のようになります(疑似Javaコード)。

Span span = myTracer.startSpan(/*...*/);
try {
  // Code that does the actual work which the Span represents
} catch (Throwable e) {
  span.recordException(e);
  span.setAttribute(AttributeKey.stringKey("error.type"), e.getClass().getCanonicalName())
  span.setStatus(StatusCode.ERROR, e.getMessage());
  throw e;
} finally {
  span.end();
}

属性

例外を表すイベントは、イベント名としてexceptionを持たなければなりません(MUST)。

さらに、以下の属性を記入すべきです(SHOULD)。

  • exception.message
  • exception.stacktrace
  • exception.type

これらの属性の形式と意味は、セマンティック規約で定義されています。