Skip to content

Quickstart

Install

pip install opentelemetry-instrumentation-gunicorn opentelemetry-api opentelemetry-sdk
# Exporters (choose one)
pip install opentelemetry-exporter-otlp
# or
pip install opentelemetry-exporter-jaeger

Minimal app (Flask)

# app.py
from flask import Flask
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor, ConsoleSpanExporter
from opentelemetry.instrumentation.wsgi import OpenTelemetryMiddleware
from opentelemetry.instrumentation.gunicorn import GunicornInstrumentor

trace.set_tracer_provider(TracerProvider())
trace.get_tracer_provider().add_span_processor(BatchSpanProcessor(ConsoleSpanExporter()))

app = Flask(__name__)
app.wsgi_app = OpenTelemetryMiddleware(app.wsgi_app)
GunicornInstrumentor().instrument()

@app.route("/")
def hello():
    return "ok"

Run

export OTEL_SERVICE_NAME=gunicorn-app
# Optional worker metrics
export OTEL_GUNICORN_TRACE_WORKERS=true

gunicorn app:app --workers 2
  • Console exporter prints spans; for OTLP, set OTEL_TRACES_EXPORTER=otlp and OTEL_EXPORTER_OTLP_ENDPOINT.
  • For a full example (Prometheus demo metrics, Console exporters), see example_app/app.py.