|
| 1 | +import logging |
| 2 | + |
| 3 | +from opentelemetry import trace |
| 4 | +from opentelemetry._logs import set_logger_provider |
| 5 | +from opentelemetry.exporter.otlp.proto.grpc._log_exporter import OTLPLogExporter |
| 6 | +from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter |
| 7 | +from opentelemetry.instrumentation.django import DjangoInstrumentor |
| 8 | +from opentelemetry.instrumentation.logging import LoggingInstrumentor |
| 9 | +from opentelemetry.instrumentation.psycopg import PsycopgInstrumentor |
| 10 | +from opentelemetry.sdk._logs import LoggerProvider |
| 11 | +from opentelemetry.sdk._logs import LoggingHandler |
| 12 | +from opentelemetry.sdk._logs.export import BatchLogRecordProcessor |
| 13 | +from opentelemetry.sdk.trace import TracerProvider |
| 14 | +from opentelemetry.sdk.trace.export import BatchSpanProcessor |
| 15 | + |
| 16 | + |
| 17 | +# This is experimental and not recommended for production use. |
| 18 | +# https://github.com/open-telemetry/opentelemetry-python/discussions/4294 |
| 19 | +class CustomLoggingHandler(LoggingHandler): |
| 20 | + def __init__(self, level=logging.NOTSET, logger_provider=None) -> None: |
| 21 | + logger_provider = LoggerProvider() |
| 22 | + set_logger_provider(logger_provider) |
| 23 | + logger_provider.add_log_record_processor(BatchLogRecordProcessor(OTLPLogExporter())) |
| 24 | + super().__init__(level, logger_provider) |
| 25 | + |
| 26 | + |
| 27 | +def configure_opentelemetry(): |
| 28 | + # https://opentelemetry-python.readthedocs.io/en/stable/exporter/otlp/otlp.html |
| 29 | + # Don't customize the provider, exporter, and so on programmatically. Use environment variables instead. |
| 30 | + tracer_provider = TracerProvider() |
| 31 | + trace.set_tracer_provider(tracer_provider) |
| 32 | + tracer_provider.add_span_processor(BatchSpanProcessor(OTLPSpanExporter())) |
| 33 | + # TSHOOT PURPOSES ONLY: tracer_provider.add_span_processor(BatchSpanProcessor(ConsoleSpanExporter())) |
| 34 | + # https://opentelemetry-python-contrib.readthedocs.io/en/latest/instrumentation/django/django.html#usage |
| 35 | + LoggingInstrumentor().instrument(tracer_provider=tracer_provider) |
| 36 | + DjangoInstrumentor().instrument(tracer_provider=tracer_provider) |
| 37 | + # https://opentelemetry-python-contrib.readthedocs.io/en/latest/instrumentation/psycopg/psycopg.html#module-opentelemetry.instrumentation.psycopg |
| 38 | + PsycopgInstrumentor().instrument(tracer_provider=tracer_provider, enable_commenter=True) |
0 commit comments