Vertx OpenTelemetry

Vert.x 与 OpenTelemetry 的集成。

Vertx vertx = Vertx.vertx(new VertxOptions()
  .setTracingOptions(
    new OpenTelemetryOptions()
  )
);

您还可以传递自定义的 OpenTelemetry,以对配置进行更精细的控制。

Vertx vertx = Vertx.vertx(new VertxOptions()
  .setTracingOptions(
    new OpenTelemetryOptions(openTelemetry)
  )
);

如果只添加此库,您将获得一个默认的 noop Tracer 的 OpenTelemetry API 访问权限,它会为跟踪和 Span ID 提供虚拟值(全零)。要获取正确的值,需要 OpenTelemetry SDK。

SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder().build();
OpenTelemetry openTelemetry = OpenTelemetrySdk.builder()
  .setTracerProvider(sdkTracerProvider)
  .setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance()))
  .buildAndRegisterGlobal();

vertxOptions.setTracingOptions(new OpenTelemetryOptions(openTelemetry));

本项目提供了一个 OpenTelemetry ContextStorageProvider,当在 Vert.x 线程上调用时,它会使用 Vert.x Context。否则,它将回退到默认存储。

如果 classpath 上存在多个 ContextStorageProvider 实现,您可以强制 OpenTelemetry 选择 Vert.x 的实现

-Dio.opentelemetry.context.contextStorageProvider=io.vertx.tracing.opentelemetry.VertxContextStorageProvider

追踪策略

追踪策略定义了当追踪启用时组件的行为。

  • PROPAGATE:组件在当前活跃的追踪中报告一个 span。

  • ALWAYS:组件在当前活跃的追踪中报告一个 span,或者创建一个新的活跃追踪。

  • IGNORE:组件将不参与任何追踪。

追踪策略通常在组件选项中配置。

HTTP 追踪

Vert.x HTTP 服务器和客户端围绕 HTTP 请求报告 span。

  • name:HTTP 方法

  • 标签

  • http.method:HTTP 方法

  • http.url:请求 URL

  • http.status_code:HTTP 状态码(String 类型)

默认的 HTTP 服务器追踪策略是 ALWAYS,你可以通过 setTracingPolicy 来配置该策略。

HttpServer server = vertx.createHttpServer(new HttpServerOptions()
  .setTracingPolicy(TracingPolicy.IGNORE)
);

默认的 HTTP 客户端追踪策略是 PROPAGATE,你可以通过 setTracingPolicy 来配置该策略。

HttpClient client = vertx.createHttpClient(new HttpClientOptions()
  .setTracingPolicy(TracingPolicy.IGNORE)
);

EventBus 追踪

Vert.x EventBus 围绕消息交换报告 span。

默认的发送策略是 PROPAGATE,你可以通过 setTracingPolicy 来配置该策略。

DeliveryOptions options = new DeliveryOptions().setTracingPolicy(TracingPolicy.ALWAYS);
vertx.eventBus().send("the-address", "foo", options);