Missing spans or fields

The trace appears but spans are missing or fields like input/output are blank. Usual causes: masking is on, the instrumentor isn't attached, or a custom key isn't indexed.

Symptom

The trace shows up, but it’s incomplete — a nested span is missing, or fields like input and output are blank, or a custom attribute you set isn’t there. The usual causes are redaction being switched on (in which case blank is expected), the framework’s instrumentor not being attached, or an attribute set on the wrong span or after it closed. Check redaction first, because a hidden field is working as designed, not a bug.

  • A span’s input/output show as hidden or blank.
  • A framework’s child spans (e.g. nested LangGraph nodes) don’t appear.
  • A custom attribute you set isn’t on the span, or you can’t filter by it.

Quick checks

  • Redaction is off for the fields you expect to see (FI_HIDE_INPUTS / FI_HIDE_OUTPUTS and TraceConfig masking).
  • The framework’s instrumentor is installed and instrument() ran against the same tracer provider.
  • Custom attributes are set while the span is still active, before its with block closes.
  • Anything you filter on uses a semantic-convention key with a supported value type.

Causes and fixes

CauseWhat you seeFix
Redaction is on (check first)Input/output render as hidden or blank, but the span is otherwise completeConfirm whether FI_HIDE_INPUTS / FI_HIDE_OUTPUTS or TraceConfig masking is set — if so, the blank is expected. See Mask span attributes.
Instrumentor not attached for that frameworkA framework’s child spans (e.g. nested LangGraph nodes) never appearInstall and instrument() the instrumentor for the missing framework, attached to the provider.
Attribute set on the wrong span / after closeA custom attribute you set isn’t on the spanSet attributes while the span is active; a value set after the with block closes is dropped.
Custom key isn’t indexed for filteringThe attribute is on the span but you can’t filter by itUse a semantic-convention key where one exists — the UI filters on standard keys.
Unsupported value typeThe attribute is silently droppedAttribute values must be string, bool, int, float, or an array of those.

Diagnostic commands

Print one span’s attributes from a span exporter to confirm what actually reached the SDK, so you can tell a redacted field from a missing one:

from opentelemetry.sdk.trace.export import SimpleSpanProcessor, SpanExporter

class PrintAttributes(SpanExporter):
    def export(self, spans):
        for span in spans:
            print(span.name, dict(span.attributes))

trace_provider.add_span_processor(SimpleSpanProcessor(PrintAttributes()))

If the attribute prints here but isn’t filterable in the UI, the key isn’t indexed; if it doesn’t print at all, it was set on the wrong span or after close.

Minimal smoke test

Re-run one request, then open the trace, click the span, and check the attributes list. The previously-missing span or attribute should now show in the span detail, and you should be able to filter by it for standard keys.

Escalate

If you’re still stuck, contact support@futureagi.com with your project_name, the trace ID, the framework + instrumentor versions, and the attribute you expected.

Prevent recurrence

  • Decide masking deliberately and document it, so blank fields aren’t mistaken for bugs.
  • Prefer semantic-convention keys for anything you’ll filter or evaluate on.

Next steps

Was this page helpful?

Questions & Discussion