from opentelemetry import metrics, trace from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import \ OTLPSpanExporter from opentelemetry.exporter.otlp.proto.http.metric_exporter import \ OTLPMetricExporter from opentelemetry.instrumentation.django import DjangoInstrumentor from opentelemetry.sdk.metrics import MeterProvider from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader from opentelemetry.sdk.resources import SERVICE_NAME, Resource from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import BatchSpanProcessor def setup_tracing(tracer_endpoint, service_name): # Set up a tracer provider span_exporter = OTLPSpanExporter(endpoint=f"{tracer_endpoint}/v1/traces") processor = BatchSpanProcessor(span_exporter=span_exporter) attributes = {SERVICE_NAME: service_name} resource = Resource(attributes=attributes) trace_provider = TracerProvider(resource=resource) trace_provider.add_span_processor(span_processor=processor) trace.set_tracer_provider(tracer_provider=trace_provider) reader = PeriodicExportingMetricReader( OTLPMetricExporter(endpoint=f"{tracer_endpoint}/v1/metrics")) meter_provider = MeterProvider(resource=resource, metric_readers=[reader]) metrics.set_meter_provider(meter_provider=meter_provider) # Instrument Django DjangoInstrumentor().instrument()