-
Notifications
You must be signed in to change notification settings - Fork 2
Description
We are bringing OTel support to Flagsmith backend! In this issue, we're tracking the bare minimum required to start tracking log events for logs emitted from the Django veiew context, and attach the incoming W3C baggage to them.
1. Instrumentation setup
In ensure_cli_env:
- Setup
- Setup tracer and logger providers.
- Setup configurable OTLP log and trace exporters.
- Setup
TraceContextTextMapPropagatorandW3CBaggagePropagator. - Invoke otel's
DjangoInstrumentor.
Having completed this, we should start seeing traces and spans for Django views invoked via HTTP, enriched by W3C baggage.
2. Structured logging integration
Add a Structlog processor that routes events to OTel's LoggerProvider.
- Normalise event names by dot-prepending the logger name, and applying
inflection.underscore. Use the result as OTLP 'EventName'. - Convert dunders to dots in Structlog attribute names, e.g.
organisation__id -> organisation.id. - Make sure span/trace baggage is propagated for the Amplitude exporter.
amplitude.device_idandamplitude.session_idare expected.
For a log emitted like this:
structlog.get_logger("code_references").info("scan-created", code_references__count=3, feature__count=2)We should see an OTLP event like this:
Resource:
service.name = "flagsmith-api"
LogRecord:
EventName = "code_references.scan_created"
SeverityNumber = Info
Body = "scan.created"
Attributes:
code_references.count = 3
feature.count = 2
Refer to https://github.com/Flagsmith/flagsmith/blob/527f72c55b8326b4c857d3f3f5c99cdf25f6065e/api/observability/otel.py and https://github.com/Flagsmith/flagsmith/blob/f4be7bbb8aba92c10b0cc4e93500c56a68550b7b/api/tests/unit/observability/test_unit_otel.py for implementation details.
3. Release, test and integrate in Core API
Acceptance criteria: Core API is configurable to send traces and logs over OTLP.