I recently set up multi-tenant Tempo Instance and wanted a quick solution to dump traces into an OTEL Collector. I couldn’t find a simple tutorial from which I could just copy and paste commands, so below is a super quick demo container to achieve this.

Start a Python Container

kubectl run python --image python:3.9 --env="OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector-headless:4317" -- sleep 999d

Exec into the container and install the OTel Python packages, as well as an editor.

pip install opentelemetry-api opentelemetry-sdk opentelemetry-exporter-otlp
apt update && apt install nano

Insert this simple script into a Python file

from opentelemetry import trace
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
 
import time
import os
 
endpoint = os.environ['OTEL_EXPORTER_OTLP_ENDPOINT']
 
if __name__ == "__main__":
    trace.set_tracer_provider(TracerProvider())
    trace.get_tracer_provider().add_span_processor(
        BatchSpanProcessor(OTLPSpanExporter(endpoint=endpoint))
    )
 
    tracer = trace.get_tracer(__name__)
 
    with tracer.start_as_current_span("foo"):
        time.sleep(0.1)
        print("span1")
        with tracer.start_as_current_span("bar"):
            time.sleep(0.1)
            print("span2")

Run the script & you should see this trace appear.

Remember to delete the container after you are done with kubectl delete pod python

🔭 Happy Tracing! :)

Hits