Skip to content

Logs data model canonical OTLP encoding for null any values #4392

@aabmass

Description

@aabmass

What are you trying to achieve?

Updating the Python OTLP exporter to support None values nested within the Logs SDK any value open-telemetry/opentelemetry-python#4400. It is unclear how to convert null values into OTLP protobuf AnyValue messages. I may have missed it in the spec already but there are some unclear cases:

  1. KeyValue with null value: {"foo": None}. Should KeyValue.value be left unset or get an empty AnyValue?

  2. ArrayValue containing null: {"foo": [1, 2, None]}. The common spec is pretty clear that exporters should preserve the ordering:

    If exporters do not support exporting null values, they MAY replace those values by 0, false, or empty strings. This is required for map/dictionary structures represented as two arrays with indices that are kept in sync

    I think the empty AnyValue would be appropriate here.

  3. Body is null. Should LogRecord.body be left unset or be set to an explicit empty AnyValue?

For languages with undefined vs null distinction, this all gets more complicated so we should consider OTel JS too.

Additional context.

Note that 2 affects tracing and metrics as well since "null values within arrays MUST be preserved as-is (i.e., passed on to span processors / exporters as null)".

Metadata

Metadata

Assignees

Labels

maintainer-requestEscalated by SIG maintainerssig-issueA specific SIG should look into this before discussing at the specspec:logsRelated to the specification/logs directory

Type

No type

Projects

Status

No status

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions