The before code shows a simple Flask service without any tracing. The after code adds OpenTelemetry tracing, which automatically instruments the Flask app and manually creates a span for the request handler. This enables capturing trace data sent to a backend like Jaeger.
### Before: No tracing
from flask import Flask, request
app = Flask(__name__)
@app.route('/serviceA')
def service_a():
# Process request
return 'Service A response'
### After: With distributed tracing using OpenTelemetry
from flask import Flask, request
from opentelemetry import trace
from opentelemetry.instrumentation.flask import FlaskInstrumentor
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor, ConsoleSpanExporter
app = Flask(__name__)
# Setup tracer provider and exporter
trace.set_tracer_provider(TracerProvider())
tracer = trace.get_tracer(__name__)
span_processor = BatchSpanProcessor(ConsoleSpanExporter())
trace.get_tracer_provider().add_span_processor(span_processor)
# Instrument Flask app
FlaskInstrumentor().instrument_app(app)
@app.route('/serviceA')
def service_a():
with tracer.start_as_current_span('serviceA-handler'):
# Process request
return 'Service A response'