SigNoz Cloud - This page is relevant for SigNoz Cloud editions.
Self-Host - This page is relevant for self-hosted SigNoz editions.

View Traces in SigNoz

This page shows how you can use distributed tracing to retrieve detailed telemetry data and see how your applications are performing. This section explains:

  • How to visualize aggregate metrics from traces
  • How to filter your spans
  • How to inspect a span

Prerequisites

  • This section assumes that your application is already instrumented. For details about how you can instrument your application, see the Instrument Your Application section.
  • This section assumes that you are familiar with the basics of monitoring applications.

Open the Traces Section

From the sidebar, select Traces:

Traces Explorer
Traces Explorer

Visualize Aggregate Metrics from Traces

SigNoz allows you to create aggregates of your filtered traces with various aggregate functions. Refer to query builder aggregation docs

Filter Spans by Tags/Attributes

The Traces Explorer in SigNoz provides a feature for quick filtering of spans using various parameters. This functionality allows users to quickly search their specific spans, making it easier to analyze and debug applications.

There are two ways in which you can filter traces by tags:

  • You can select a filter from the Quick Filter. More details on available quick filters are here
Quick Filters in Traces Explorer
Quick Filters in Traces Explorer
  • You can use the query builder. To access the query builder, select the Search Filter input. Then, use the dropdown list to select a key from the list of your attributes, select an operator and enter a value. When you’ve finished, select the Stage and Run Query button. Refer to this doc for more details on Query Builder.

Inspect a Span

To further troubleshoot your application, you can select a span from the list to view its details. For details, see the Span Details page.

Missing Spans

A "missing span" occurs when a span's parent span is not found in the collected trace.

Common Causes

  • Tail Sampling: If you have configured tail sampling in your OpenTelemetry Collector pipeline, the sampler randomly selects a subset of spans to keep and drops the rest. This means some spans from a trace may be retained while others are discarded, resulting in incomplete traces with missing spans.

  • Network Issues: Spans may be dropped in transit due to network issues between your application and the OpenTelemetry Collector, or between the Collector and SigNoz. This can happen due to transient connectivity failures, timeouts, or packet loss.

  • Misconfigured Services: If a service in your request chain is not exporting its spans to SigNoz, the spans it generates will be missing from the trace. Since its span ID is used as the parent span ID by downstream services, those downstream spans will appear as missing spans.

Diagram showing a normal trace with all spans present vs a trace with a missing span where no collected span matches the referenced Parent ID
Normal trace vs trace with missing span
Click to read more details

Every span has two key identifiers: a Span ID (its own unique ID) and a Parent Span ID (the ID of the span that called it). When a service makes a call to a downstream service, it propagates context via the traceparent header. This header carries the current span's Span ID, which the downstream service uses as the Parent Span ID of the new span it creates. A span is flagged as "missing" when no span in the collected trace matches its Parent Span ID — the parent span exists but was never collected.

Learn more about how traces work in OpenTelemetry.

The root span is the first span in a trace — it does not have a Parent Span ID because no upstream service initiated it.

For example, consider three services — Frontend, Auth, and Database:

  1. Frontend creates the root span (Span ID: abc1, Parent ID: none).
  2. Frontend calls Auth, passing its Span ID abc1 in the traceparent header. Auth creates a new span (Span ID: def2, Parent ID: abc1).
  3. Auth calls Database, passing its Span ID def2. Database creates a new span (Span ID: ghi3, Parent ID: def2).

If Auth fails to export its span (Span ID: def2), the Database span will reference a Parent Span ID (def2) that does not exist in the collected trace — resulting in a missing span.

Span Gaps

Sometimes it's possible that there are gaps between consequent spans. This happens when some process/code are not traced. For Example, by default OpenTelemetry auto instrumentation libraries do not trace the custom functions/methods. This can be fixed by adding manual instrumentation to the code.

Example of span gaps:
Span Gap

Understanding Trace Duration Discrepancies

When analyzing latency metrics in the traces list, you may notice that the duration shown differs from what appears in the trace details. This is because:

The duration column in the traces list shows the duration of the root span, not the entire trace duration.

This can lead to apparent discrepancies for several reasons:

  • The root span may complete before all child spans finish - The root operation might return a response while background tasks continue processing
  • Asynchronous operations - Child spans can run longer than the root span when operations are performed asynchronously
  • Total trace duration - The trace details view shows the complete duration including all spans, which may be longer than just the root span

Example Scenario

You might see a trace listed as 38.9 seconds in the traces page, but when you open the trace details, it shows a total duration of 1 minute. This happens when:

  1. The root span (the initial request handler) completed in 38.9 seconds
  2. Other spans in the trace (such as background jobs, async tasks, or queued operations) continued running
  3. The total time from the first span start to the last span end was 1 minute

This behavior is expected and reflects how distributed systems actually work. If you need to measure specific service-to-service latencies rather than root span duration, see the writing ClickHouse queries documentation for guidance on using kind_string = 'Client' filters.

Get Help

If you need help with the steps in this topic, please reach out to us on SigNoz Community Slack.

If you are a SigNoz Cloud user, please use in product chat support located at the bottom right corner of your SigNoz instance or contact us at cloud-support@signoz.io.

Last updated: March 5, 2026

Edit on GitHub