このトピックでは、オープンソースのトレースクライアントを使用して、Managed Service for OpenTelemetry の例外をトレースおよび分析する方法について説明します。
前提条件
オープンソースクライアントは、Managed Service for OpenTelemetry にデータをレポートするために使用されます。詳細については、接続の説明を参照してください。
スパンの例外情報を設定する
OpenTelemetry 例外仕様
この仕様は、OpenTelemetry を使用したデータレポートに適用されます。
OpenTelemetry 例外仕様によると、スパンに関する例外情報はイベントの属性に格納されます。イベントの属性に exception.type
が含まれている場合、Managed Service for OpenTelemetry は、スパンで例外が発生したと見なし、コンソールの 例外 ページに例外を表示します。例外スタックトレースが利用可能な場合は、exception.stacktrace
属性に追加できます。その後、例外 ページで例外スタックトレースを表示できます。
OpenTelemetry SDK を使用する場合、exception.type
属性と exception.stacktrace
属性をイベントに手動で追加する必要はありません。 SDK は、例外を記録するためのメソッドを提供します。次のコードは、Java 用 OpenTelemetry SDK を使用してスパンの例外を記録する方法の例を示しています。
Span span = myTracer.startSpan("spanName");
try {
// ビジネスコードを実行します。
} catch (Throwable e) {
span.recordException(e);
throw e;
} finally {
span.end();
}
アプリケーションが OpenTelemetry を使用して自動的にインストゥルメントされている場合、エージェントまたはフレームワークは例外情報を自動的にキャプチャしてサーバーにレポートします。 Managed Service for OpenTelemetry は、スパンに関する例外情報を識別し、例外 ページに表示します。
OpenTracing 例外仕様
この仕様は、Jaeger、SkyWalking、または Zipkin を使用したデータレポートに適用されます。
OpenTracing 例外仕様によると、スパンに関する例外情報はログフィールドに格納されます。ログのフィールドに event
と error.kind
が含まれており、event フィールドの値が "error"
の場合、Managed Service for OpenTelemetry は、スパンで例外が発生したと見なし、コンソールの 例外 ページに例外を表示します。例外スタックトレースが利用可能な場合は、stack
フィールドに追加できます。その後、例外 ページで例外スタックトレースを表示できます。
OpenTracing SDK を使用して例外をトレースする
次のコードは、Java 用 OpenTracing SDK を使用してスパンの例外を記録する方法の例を示しています。
public static void test() { Tracer tracer = GlobalTracer.get(); Span span = tracer.buildSpan("spanName").start(); try (Scope scope = tracer.activateSpan(span)) { // ... ビジネスコードを実行します。 } catch (Exception e) { onException(e, span); } finally { span.finish(); } } public static void onException(Throwable throwable, Span span) { if (span != null) { Tags.ERROR.set(span, Boolean.TRUE); if (throwable != null) { span.log(errorLogs(throwable)); } } } private static Map<String, Object> errorLogs(Throwable throwable) { Map<String, Object> errorLogs = new HashMap<>(); errorLogs.put("event", Tags.ERROR.getKey()); errorLogs.put("error.object", throwable); errorLogs.put("error.kind", throwable.getClass().getName()); String message = throwable.getCause() != null ? throwable.getCause().getMessage() : throwable.getMessage(); if (message != null) { errorLogs.put("message", message); } StringWriter sw = new StringWriter(); throwable.printStackTrace(new PrintWriter(sw)); errorLogs.put("stack", sw.toString()); return errorLogs; }
SkyWalking を使用して例外をトレースする
SkyWalking は、非侵入型インストゥルメンテーションのためのさまざまなエージェントを提供します。ほとんどの場合、エージェントは例外情報を記録してサーバーにレポートします。 Managed Service for OpenTelemetry は、スパンに関する例外情報を識別し、例外ページに表示します。
Managed Service for OpenTelemetry を使用して例外を分析する
クライアント側でスパンの例外情報を設定した後、Managed Service for OpenTelemetry は、報告された例外情報の統計を生成します。 Managed Service for OpenTelemetry コンソールの 例外 ページに移動して、例外情報と統計を表示できます。詳細については、例外分析を参照してください。