Skip to main content
OpenTelemetry (OTel) distributed tracing gives request-level visibility across the Fusion microservice stack. Where Prometheus provides aggregate metrics, OTel traces individual requests from the moment they enter the API Gateway through the Query Service and into Solr, making it possible to pinpoint exactly which service is responsible for a slowdown.
Version and deployment applicability:The services that support OpenTelemetry are API Gateway, Query, Indexing, Admin, and Apps Manager.

How it works

The following flow shows the default pipeline used in Lucidworks-managed environments, where spans are sent to Grafana Tempo. Self-hosted Fusion 5.17 and later uses the same span instrumentation, but you can redirect the OTel Collector output to a collector you provide instead of Grafana Tempo. See Configure a customer-provided collector.
1

API Gateway creates the root span

The API Gateway receives the incoming request and creates the root trace . It propagates trace context downstream using a traceparent header. Only query-path traffic is sampled, which keeps overhead minimal.
2

Query Service creates child spans

The Query Service picks up the trace context and creates child spans for each integration it calls. The following spans are created for every traced request:
  • Solr span: captures query execution time within Solr.
  • Feign/downstream span: captures HTTP calls made to downstream services.
The following span is optional and enabled per environment:
  • Kafka span: captures Kafka producer and consumer calls made during query processing.
3

OTel Collector batches the spans

The receives spans from the Query Service and batches them for export.
4

Grafana Tempo stores the traces

The OTel Collector forwards the batched spans to Grafana Tempo, which stores them for search and analysis.
5

Grafana Dashboard surfaces the traces

stored in Grafana Tempo are available in the Grafana Dashboard, where Lucidworks engineers can search, filter, and drill into individual traces to identify performance bottlenecks.

Viewing traces in Grafana

You can use the Grafana Tempo dashboard to search and visualize traces. A trace can be filtered by service, time window, latency threshold, or error status. Drilling into a trace shows the full span tree: API Gateway root span, Query Service child spans, and Solr spans nested within them. This makes the following workflow possible:
  1. Open Grafana and navigate to the Tempo traces dashboard.
  2. Select the time window that corresponds to the reported latency spike or other incident.
  3. Identify the slowest trace for that window.
  4. Drill into the span tree to see which service or integration was the bottleneck.
This full workflow is achievable in under five minutes, without code changes or log searches.

Instrumented integrations

Solr, Kafka, Feign HTTP client, and JDBC tracing are each controlled by a boolean Helm value, opentelemetry.integrations.<name> (for example, opentelemetry.integrations.solr), set in each service’s Helm chart. Each defaults to false, so set the ones you want to true to enable that integration’s spans. Not every integration is available on every service — see Configure a customer-provided collector for which services support which integrations. Trace volume and overhead can be tuned per integration without touching application code or requiring a Fusion release.

Configure a customer-provided collector (self-hosted Fusion 5.17 and later)

Self-hosted Fusion 5.17 and later can export OTLP traces directly to a collector you provide, instead of Grafana Tempo. Five services support this:
  • API Gateway
  • Query
  • Indexing
  • Admin
  • Apps Manager
The Query, Indexing, Admin, and Apps Manager services all share the same configuration structure; only the API Gateway differs, since it’s the entry point that also controls trace propagation to each downstream service.
Both sides of a trace must be configured consistently. If a downstream service is listed as true in the API Gateway’s opentelemetry.services map, that service must also have opentelemetry.enabled: true in its own Helm values — otherwise the trace chain breaks or spans are orphaned.The only valid states are both enabled or both disabled for a given service.
The API Gateway is the single entry point for external traffic. It creates the root span and, for each service enabled in opentelemetry.services, propagates trace context downstream using a traceparent header. Enabling OTel on the gateway automatically disables Spring Cloud Sleuth.
These services share the same configuration structure under opentelemetry in their Helm values.
Point the endpoint at any OTLP-compatible collector. Traces continue to include the same span coverage described in Instrumented integrations; only the export destination changes.

Fusion 5.9.x: sending observability data to your own platform

Self-hosted Fusion 5.9.x does not support OTLP export. Use the following supported paths to send observability data to your own platform instead.
Fusion 5.9.x exports traces using Spring Cloud Sleuth with Zipkin/Brave, in Zipkin v2 format. Configure the export endpoint with:Most modern observability platforms and OTel Collector builds accept Zipkin v2 format through a Zipkin receiver.