• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..20-Nov-2020-

examples/bridge/H20-Nov-2020-144114

utils/H20-Nov-2020-197150

README.mdH A D20-Nov-20202.5 KiB7351

bridge.goH A D20-Nov-20205.7 KiB191144

bridge_test.goH A D20-Nov-20209.1 KiB278214

doc.goH A D20-Nov-2020778 171

go.modH A D20-Nov-2020205 117

go.sumH A D20-Nov-20205.7 KiB6059

README.md

1# OpenCensus Bridge
2
3The OpenCensus Bridge helps facilitate the migration of an application from OpenCensus to OpenTelemetry.
4
5## The Problem: Mixing OpenCensus and OpenTelemetry libraries
6
7In a perfect world, one would simply migrate their entire go application --including custom instrumentation, libraries, and exporters-- from OpenCensus to OpenTelemetry all at once.  In the real world, dependency constraints, third-party ownership of libraries, or other reasons may require mixing OpenCensus and OpenTelemetry libraries in a single application.
8
9However, if you create the following spans in a go application:
10
11```golang
12ctx, ocSpan := opencensus.StartSpan(context.Background(), "OuterSpan")
13defer ocSpan.End()
14ctx, otSpan := opentelemetryTracer.Start(ctx, "MiddleSpan")
15defer otSpan.End()
16ctx, ocSpan := opencensus.StartSpan(ctx, "InnerSpan")
17defer ocSpan.End()
18```
19
20OpenCensus reports (to OpenCensus exporters):
21
22```
23[--------OuterSpan------------]
24    [----InnerSpan------]
25```
26
27OpenTelemetry reports (to OpenTelemetry exporters):
28
29```
30   [-----MiddleSpan--------]
31```
32
33Instead, I would prefer (to a single set of exporters):
34
35```
36[--------OuterSpan------------]
37   [-----MiddleSpan--------]
38    [----InnerSpan------]
39```
40
41### The bridge solution
42
43The bridge implements the OpenCensus trace API using OpenTelemetry.  This would cause, for example, a span recorded with OpenCensus' `StartSpan()` method to be equivalent to recording a span using OpenTelemetry's `tracer.Start()` method.  Funneling all tracing API calls to OpenTelemetry APIs results in the desired unified span hierarchy.
44
45### User Journey
46
471. Instantiate OpenTelemetry SDK and Exporters
482. Override OpenCensus' DefaultTracer with the bridge
493. Migrate libraries from OpenCensus to OpenTelemetry
504. Remove OpenCensus Exporters
51
52To override OpenCensus' DefaultTracer with the bridge:
53```golang
54import (
55    octrace "go.opencensus.io/trace"
56    "go.opentelemetry.io/otel/bridge/opencensus"
57    "go.opentelemetry.io/otel"
58)
59
60tracer := otel.GetTracerProvider().Tracer("bridge")
61octrace.DefaultTracer = opencensus.NewTracer(tracer)
62```
63
64Be sure to set the `Tracer` name to your instrumentation package name instead of `"bridge"`.
65
66### Incompatibilities
67
68OpenCensus and OpenTelemetry APIs are not entirely compatible.  If the bridge finds any incompatibilities, it will log them.  Incompatibilities include:
69
70* Custom OpenCensus Samplers specified during StartSpan are ignored.
71* Links cannot be added to OpenCensus spans.
72* OpenTelemetry Debug or Deferred trace flags are dropped after an OpenCensus span is created.
73