OpenCensus Shim

This example shows how to use the opentelemetry-opencensus-shim package to interact with libraries instrumented with opencensus-python.

The source files required to run this example are available here.

Installation

Jaeger

Start Jaeger

docker run --rm \
    -p 6831:6831/udp \
    -p 6832:6832/udp \
    -p 16686:16686 \
    jaegertracing/all-in-one:1.13 \
    --log-level=debug

Python Dependencies

Install the Python dependencies in requirements.txt

pip install -r requirements.txt

Alternatively, you can install the Python dependencies separately:

pip install \
    opentelemetry-api \
    opentelemetry-sdk \
    opentelemetry-exporter-jaeger \
    opentelemetry-opencensus-shim \
    opentelemetry-instrumentation-sqlite3 \
    opencensus \
    opencensus-ext-flask \
    Flask

Run the Application

Start the application in a terminal.

flask --app app run -h 0.0.0.0

Point your browser to the address printed out (probably http://127.0.0.1:5000). Alternatively, just use curl to trigger a request:

curl http://127.0.0.1:5000

Jaeger UI

Open the Jaeger UI in your browser at http://localhost:16686 and view traces for the “opencensus-shim-example-flask” service. Click on a span named “span” in the scatter plot. You will see a span tree with the following structure:

  • span
    • query movies from db
      • SELECT

    • build response html

The root span comes from OpenCensus Flask instrumentation. The children query movies from db and build response html come from the manual instrumentation using OpenTelemetry’s opentelemetry.trace.Tracer.start_as_current_span(). Finally, the SELECT span is created by OpenTelemetry’s SQLite3 instrumentation. Everything is exported to Jaeger using the OpenTelemetry exporter.