日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

通過開源鏈路追蹤客戶端獲取異常信息

本文介紹如何使用開源鏈路追蹤客戶端進行異常埋點,并在可觀測鏈路 OpenTelemetry 版中進行異常分析。

前提條件

您已通過開源客戶端接入可觀測鏈路 OpenTelemetry 版,具體操作,請參見接入指南

設置Span的異常信息

OpenTelemetry異常規范

此規范適用于通過OpenTelemetry協議上報方式。

根據OpenTelemetry協議的異常規范,Span的異常信息存儲在event屬性中,當event的attributes中包含exception.type字段時,可觀測鏈路 OpenTelemetry 版將認為該Span發生了異常并會展示在異常分析頁面;如果能夠獲取到異常堆棧,可以添加至attributes的exception.stacktrace字段中,那么異常分析頁面即可查看對應的異常堆棧。

通過OpenTelemetry SDK,您無需手動在event的attributes中添加exception.type字段與exception.stacktrace字段,SDK提供了相關方法記錄異常,下面以Java SDK為例展示如何為Span記錄異常:

Span span = myTracer.startSpan("spanName");
try {
  // 執行業務代碼
} catch (Throwable e) {
  span.recordException(e);
  throw e;
} finally {
  span.end();
}
說明

當使用OpenTelemetry自動埋點方式時,探針或框架會自動捕捉異常信息,并上報至服務端,可觀測鏈路 OpenTelemetry 版將識別OpenTelemetry Span中的異常信息并展示在異常分析頁面。

OpenTracing異常規范

此規范適用于通過Jaeger、Skywalking和Zipkin協議上報方式。

根據OpenTracing協議的異常規范,Span的異常信息存儲在log屬性中,當log屬性的tags中包含event字段為"error"且包含error.kind字段時,可觀測鏈路 OpenTelemetry 版將認為該Span發生了異常并會展示在異常分析頁面;如果能夠獲取到異常堆棧,可以添加至tags的stack字段中,那么異常分析頁面可以查看對應的異常堆棧。

  • OpenTracing SDK異常埋點

    以Java OpenTracing SDK為例,下面展示如何為Span記錄異常:

    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提供了大量無侵入式探針接入,通常探針埋點均會記錄異常信息上報至服務端,可觀測鏈路 OpenTelemetry 版將識別SkyWalking Span中的異常信息并展示在異常分析頁面。

通過可觀測鏈路 OpenTelemetry 版進行異常分析

在端側埋點設置Span的異常信息后,可觀測鏈路 OpenTelemetry 版將生成異常信息的統計數據,您可以前往可觀測鏈路 OpenTelemetry 版控制臺的異常分析頁面查看,詳細信息可參見異常分析