Copy as Markdown[Open in ChatGPT](https://chatgpt.com/?q=Read%20https%3A%2F%2Fcoralogix.com%2Fdocs%2Fuser-guides%2Fdata_exploration%2Fspans%2Fuse-cases%2Fotel-link.md%20and%20help%20me%20with%20my%20question%20about%20this%20Coralogix%20documentation%20page.)[Open in Claude](https://claude.ai/new?q=Read%20https%3A%2F%2Fcoralogix.com%2Fdocs%2Fuser-guides%2Fdata_exploration%2Fspans%2Fuse-cases%2Fotel-link.md%20and%20help%20me%20with%20my%20question%20about%20this%20Coralogix%20documentation%20page.)

# Follow OTel span links across traces

Async handoffs cut a single logical request into multiple traces. When a service publishes to a message queue, schedules a retry, or spawns a background job, the work continues under a new trace ID—and the current trace loses the thread. OpenTelemetry [span links](https://opentelemetry.io/docs/concepts/signals/traces/#span-links) preserve the reference across those boundaries, and the Coralogix trace drilldown surfaces them as controls you can select to jump to the linked trace without leaving your investigation.

## When to use this[​](#when-to-use-this "Direct link to When to use this")

Reach for OTel links whenever the trace you're investigating references work that happens in a separate trace and you need to follow the thread. Common cases:

* **Message-broker flows.** A producer publishes to Kafka, RabbitMQ, or SQS; a consumer picks the message up later. The publish and consume paths run as two separate traces linked by a span reference. Use an OTel link to jump from the publish side to the consume side (or the other way) to see how the message was handled.
* **Async retries.** The original request failed and your instrumentation scheduled a retry. The retry runs under a new trace ID; the original trace holds a link to it so you can confirm the retry succeeded (or explain why it didn't).
* **Background jobs and scheduled work.** A synchronous request enqueues a job that runs minutes or hours later. The enqueue and execution live in different traces—the link keeps them connected.
* **Fan-out patterns.** One request spawns several async workers, each running as its own trace. The parent trace collects outgoing links to every worker, so you can pivot into whichever branch looks slow or failed.

If your investigation stays inside a single trace (no async boundary), the OTel link controls stay out of the way—they only appear on traces that carry links.

## What you need[​](#what-you-need "Direct link to What you need")

* Tracing data ingested through OpenTelemetry. For a refresher on span links, see the OpenTelemetry [tracing concepts](https://opentelemetry.io/docs/concepts/signals/traces/#span-links).
* Span-link references emitted by your instrumentation. Auto-instrumentation for common messaging clients typically emits them; custom producers must call the span-link API when they hand work off.
* A trace open in the [span drilldown](https://coralogix.com/docs/docs/user-guides/data_exploration/spans/span-drilldown/.md) that carries at least one span link.

## Where OTel link controls appear[​](#where-otel-link-controls-appear "Direct link to Where OTel link controls appear")

The trace drilldown exposes the same set of span links from two of its views. Which control you use depends on where you're already looking:

* In the **Gantt** view, a marker on the timeline positions the link at the linked span's start time, and a **Span links** column adds a per-row button on any span that carries links.
* In the **Dependencies** view (both **Span view** and **Service view**), an OTel link icon sits on each node whose spans carry links, and a hover control opens the link.

All three controls funnel to the same [Related OTel links popover](#related-otel-links-popover) whenever more than one link is available.

## In the Gantt view[​](#in-the-gantt-view "Direct link to In the Gantt view")

Open a trace in the drilldown Gantt view. When the trace has span links, two things change:

* Each span bar that carries links gets a small OTel link marker positioned at the linked span's start time (relative to the current trace timeline).
* The **Span links** column appears at the right of the Gantt (Coralogix hides it entirely when no span in the trace carries any links).

**Use it to**

* Spot every span in the current trace that carries OTel links, and see where each linked span starts on the timeline.
* Follow a specific link to its target trace from a single point on the Gantt.
* Handle spans with multiple links via the grouped marker or the multi-link Span links column button.

[![OTel link in Gantt](/docs/assets/images/otel-link-gantt-1b1ba4614e63746f9a32dd75155f4b0d.gif)](https://coralogix.com/docs/docs/assets/images/otel-link-gantt-1b1ba4614e63746f9a32dd75155f4b0d.gif)

### Timeline marker[​](#timeline-marker "Direct link to Timeline marker")

Hover a marker to see the linked span's context. For a single link, the tooltip shows:

* The linked span's start timestamp.
* `traceId` — the trace ID of the linked trace.
* `spanId` — the ID of the linked span.
* `service` — the service that emitted the linked span (when available).
* `operation` — the operation name of the linked span (when available).
* An `Open OTel Link` button that opens the linked trace's drilldown in a new tab.

[![OTel link tooltip](/docs/assets/images/otel-link-tooltip-429600490f00dcdc9424f6456a083d21.webp)](https://coralogix.com/docs/docs/assets/images/otel-link-tooltip-429600490f00dcdc9424f6456a083d21.webp)

Links whose linked span starts before or after the visible time window pin to the timeline edge so they stay reachable.

When several linked spans start at (or near) the same point on the timeline, Coralogix consolidates them into a single grouped marker instead of stacking icons on top of each other. Selecting the grouped marker opens the [Related OTel links popover](#related-otel-links-popover) so you can pick which link to follow.

### Span links column[​](#span-links-column "Direct link to Span links column")

Each cell in the **Span links** column shows a button sized to the number of links on that row:

* **Open related link**: the span carries one link. Selecting the button opens the linked trace's drilldown in a new tab.
* **N OTel links**: the span carries multiple links. Selecting the button opens the Related OTel links popover.

## In the Dependencies view[​](#in-the-dependencies-view "Direct link to In the Dependencies view")

Switch to the **Dependencies** view. It has two sub-views—**Span view** and **Service view**—and both surface the same OTel link controls. In either sub-view, an OTel link icon draws on the corner of any node whose spans carry links, and stays visible at rest so you can spot linked nodes before hovering.

* In the **Span view**, each node represents a single span. The icon draws on any span node whose span carries links.
* In the **Service view**, each node aggregates every span from that service. The icon draws on any service node whose spans (collectively) carry links. Service nodes marked unavailable don't get the icon.

**Use it to**

* Discover cross-trace connections from architectural context—no need to scan the timeline.
* Open a linked trace from any node that carries links, without picking a specific span first.
* Follow every link emitted anywhere in a service by using the Service view's aggregated control.

[![Dependencies view link](/docs/assets/images/otel-link-node-b3b9268f756c180041fe69152b0074de.webp)](https://coralogix.com/docs/docs/assets/images/otel-link-node-b3b9268f756c180041fe69152b0074de.webp)

Hovering the node reveals the interactive control aligned with the node's actions menu. What it does depends on how many links the node has:

* **Single link**: the button (or icon-only tooltip **Show OTel link** on compact nodes) opens the linked trace's drilldown in a new tab directly. No popover.
* **Multiple links**: the button reads **Show OTel links (N)** (or shows the same count in its tooltip on compact nodes) and opens the Related OTel links popover on select.

Because a Service view node groups every span from a service, its control may reveal more links than any single Span view node—it collects every link emitted anywhere in that service.

## Related OTel links popover[​](#related-otel-links-popover "Direct link to Related OTel links popover")

The popover is the shared picker for cases where more than one link is available—the grouped Gantt marker, the multi-link Span links button, and the multi-link Dependencies view control all open it.

**Use it to**

* Choose which of several linked traces to open when a marker or button groups multiple links.
* Separate outgoing links (from this trace to others) from incoming links (from others to this one) before you pick.
* Compare linked-span metadata—service, operation, start time, duration—side by side to prioritize which link to follow first.

[![Related OTel links popover](/docs/assets/images/multiple-otel-links-a0fc69f94a416c40c48c8492efa19620.gif)](https://coralogix.com/docs/docs/assets/images/multiple-otel-links-a0fc69f94a416c40c48c8492efa19620.gif)

The popover header shows the title **Related OTel links** and a `Close` button that dismisses the popover without navigating. Under the header, Coralogix splits the links into two collapsible groups:

* **Outgoing (N)**: links emitted by spans in the current trace to a linked span in another trace.
* **Incoming (N)**: links from spans in other traces that point back into the current trace.

Coralogix hides empty groups. Each row shows:

* The service icons for both sides of the link, with an arrow pointing from the current-trace span to the linked span.
* The linked span's service name and operation.
* The linked span's start time.
* The linked span's duration.

Select a row to open the linked trace's drilldown in a new tab with the linked span already selected.

## What "opens in a new tab" means for your investigation[​](#what-opens-in-a-new-tab-means-for-your-investigation "Direct link to What \"opens in a new tab\" means for your investigation")

Every control described here navigates in a new tab so that your current trace and drilldown state stay untouched in the original tab. Switch between tabs to compare the two traces side by side or to walk back to the point you started from.

The new-tab target is the linked trace's drilldown with the linked span pre-selected. The Info panel, Related data, and the timeline are all scoped to the linked span, ready to inspect as if you had opened that trace directly from Explore spans.

Note

The drilldown's time range picker doesn't affect OTel links. Every span link stays visible in the marker, column, and popover regardless of the range you set—narrowing the range to investigate a specific interval never hides your async connections.

## Limitations[​](#limitations "Direct link to Limitations")

Coralogix only surfaces the span-link references your instrumentation emits. If a producer or consumer doesn't call the span-link API, the connection is invisible—Coralogix has no other way to infer that two traces are related.

## Related resources[​](#related-resources "Direct link to Related resources")

* [Understanding traces and spans](https://coralogix.com/docs/docs/user-guides/data_exploration/spans/trace-span-concepts/.md)
* [Span drilldown](https://coralogix.com/docs/docs/user-guides/data_exploration/spans/span-drilldown/.md)
* [Visualize spans and traces](https://coralogix.com/docs/docs/user-guides/data_exploration/spans/visualize/.md)
* [OpenTelemetry: span links](https://opentelemetry.io/docs/concepts/signals/traces/#span-links)
