You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Add end-to-end OpenTelemetry distributed tracing to Numaflow so that each message's journey through a pipeline (source → map → sink) is captured as a connected trace. This enables teams to attribute latency to either the Numaflow platform or user-defined functions (UDFs).
Span Hierarchy: Sequential Siblings
upstream producer (optional — W3C traceparent or B3 headers)
└── numaflow.platform.process (root — accurate duration via AckHandle)
├── numaflow.monovertex.source.read (sibling)
├── numaflow.monovertex.map (sibling)
│ └── udf.map.process (UDF, child of map)
└── numaflow.monovertex.sink.write (sibling)
└── udf.sink.process (UDF, child of sink.write)
For Pipeline topology, ISB read/write spans are added between vertices, and span names use numaflow.pipeline.* prefix instead of numaflow.monovertex.*.
Key Design Decisions
W3C Trace Context as internal propagation format via sys_metadata["tracing"]
Summary
Add end-to-end OpenTelemetry distributed tracing to Numaflow so that each message's journey through a pipeline (source → map → sink) is captured as a connected trace. This enables teams to attribute latency to either the Numaflow platform or user-defined functions (UDFs).
Span Hierarchy: Sequential Siblings
For Pipeline topology, ISB read/write spans are added between vertices, and span names use
numaflow.pipeline.*prefix instead ofnumaflow.monovertex.*.Key Design Decisions
sys_metadata["tracing"]"tracing"holdsplatform.processcontext (shared parent),"tracing_udf"holds stage-specific context for UDF parentSub-Issues
Span Attributes
All platform spans carry:
messaging.system=numaflowmessaging.operation.namemessaging.message.idnumaflow.topologymonovertexorpipelinenumaflow.pipeline.namenumaflow.vertex.nameReferences