Python

Python Integration

Instrument Python applications with OpenTelemetry

Overview

Instrument your Python applications to send traces, metrics, and logs to Qorrelate using OpenTelemetry. Supports automatic instrumentation for Flask, Django, and FastAPI.

Installation

pip install opentelemetry-api \
    opentelemetry-sdk \
    opentelemetry-exporter-otlp \
    opentelemetry-instrumentation

Auto-Instrumentation (Recommended)

# Install auto-instrumentation packages
pip install opentelemetry-distro opentelemetry-exporter-otlp
opentelemetry-bootstrap -a install

# Run your app with auto-instrumentation
OTEL_EXPORTER_OTLP_ENDPOINT="https://qorrelate.io" \
OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer YOUR_API_KEY,X-Organization-Id=YOUR_ORG_ID" \
OTEL_SERVICE_NAME="my-python-app" \
opentelemetry-instrument python app.py

Manual Instrumentation

from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter

provider = TracerProvider()
exporter = OTLPSpanExporter(
    endpoint="https://qorrelate.io/v1/traces",
    headers={"Authorization": "Bearer YOUR_API_KEY", "X-Organization-Id": "YOUR_ORG_ID"}
)
provider.add_span_processor(BatchSpanProcessor(exporter))
trace.set_tracer_provider(provider)

tracer = trace.get_tracer(__name__)

@tracer.start_as_current_span("my-operation")
def my_function():
    # Your code here
    pass

Logging Integration

from opentelemetry._logs import set_logger_provider
from opentelemetry.sdk._logs import LoggerProvider, LoggingHandler
from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
from opentelemetry.exporter.otlp.proto.http._log_exporter import OTLPLogExporter
import logging

logger_provider = LoggerProvider()
log_exporter = OTLPLogExporter(
    endpoint="https://qorrelate.io/v1/logs",
    headers={"Authorization": "Bearer YOUR_API_KEY", "X-Organization-Id": "YOUR_ORG_ID"}
)
logger_provider.add_log_record_processor(BatchLogRecordProcessor(log_exporter))
set_logger_provider(logger_provider)

handler = LoggingHandler(logger_provider=logger_provider)
logging.getLogger().addHandler(handler)
logging.info("Application started")

Flask

pip install opentelemetry-instrumentation-flask

from flask import Flask
from opentelemetry.instrumentation.flask import FlaskInstrumentor

app = Flask(__name__)
FlaskInstrumentor().instrument_app(app)

Django

pip install opentelemetry-instrumentation-django

# In manage.py
from opentelemetry.instrumentation.django import DjangoInstrumentor
DjangoInstrumentor().instrument()

FastAPI

pip install opentelemetry-instrumentation-fastapi

from fastapi import FastAPI
from opentelemetry.instrumentation.fastapi import FastAPIInstrumentor

app = FastAPI()
FastAPIInstrumentor.instrument_app(app)

💡 Pro Tip

Use the Qorrelate CLI for zero-code instrumentation: qorrelate run python app.py