Overview
This guide walks you through migrating distributed tracing and APM from Tempo (LGTM Stack) to SigNoz. You will:
- Check your current trace sources in Tempo
- Redirect your trace data to SigNoz
- Validate traces are flowing correctly
- Explore SigNoz's APM capabilities
SigNoz is built natively on OpenTelemetry, making it compatible with most existing instrumentation used with Tempo (OpenTelemetry, Jaeger, Zipkin).
Prerequisites
Before starting, ensure you have:
- A SigNoz account (Cloud) or a running SigNoz instance (Self-Hosted)
- Access to your Grafana/Tempo instance to review current services
- Access to your application source code or collector configuration
Step 1: Assess Your Current Tracing Setup
Before migrating, inventory what you're collecting in Tempo.
List Your Services
In Grafana Explore (select Tempo datasource), you can usually see a list of services in the "Service Name" dropdown of the Search tab. Make a note of:
- Service Names: The applications sending traces.
- Instrumentation: Are they using OpenTelemetry SDKs, Jaeger agents, Zipkin, or Grafana Agent?
Categorize Your Services
Group services by how they're instrumented:
| Instrumentation Type | Migration Path |
|---|---|
| OpenTelemetry SDK | Redirect OTLP exporter |
| Grafana Agent | Migrate to OTel Collector |
| Jaeger Client | Use Jaeger Receiver |
| Zipkin Client | Use Zipkin Receiver |
Step 2: Migrate Each Service
Work through each service from your inventory.
From OpenTelemetry SDK
If your applications are already instrumented with OpenTelemetry and sending to Tempo (directly or via a collector), you just need to update the exporter configuration.
For new applications or to switch from other agents, see our Instrumentation Guides.
Before (Tempo/Grafana Agent):
OTEL_EXPORTER_OTLP_ENDPOINT=http://tempo:4317
After (SigNoz Cloud):
OTEL_EXPORTER_OTLP_ENDPOINT=https://ingest.<region>.signoz.cloud:443
OTEL_EXPORTER_OTLP_HEADERS=signoz-ingestion-key=<SIGNOZ_INGESTION_KEY>
Replace:
<region>: Your SigNoz Cloud region (us,eu, orin)<SIGNOZ_INGESTION_KEY>: Your ingestion key from Settings → Ingestion Settings
From Grafana Agent
If you are using Grafana Agent to collect traces, we recommend migrating to the OpenTelemetry Collector. The OTel Collector is the upstream project for Grafana Agent's tracing features and provides the most compatibility.
- Install OpenTelemetry Collector: Follow the installation guide.
- Configure Receivers: Copy your receiver configuration (e.g.,
otlp,jaeger,zipkin) from Grafana Agent to the OTel Collector'sconfig.yaml. - Configure Exporter: Set up the OTLP exporter to send to SigNoz.
exporters:
otlp:
endpoint: "https://ingest.<region>.signoz.cloud:443"
headers:
signoz-ingestion-key: "<SIGNOZ_INGESTION_KEY>"
tls:
insecure: false
service:
pipelines:
traces:
receivers: [otlp] # Add jaeger/zipkin if needed
processors: [batch]
exporters: [otlp]
From Jaeger Clients
If your applications use legacy Jaeger clients sending to Tempo:
- Install OpenTelemetry Collector: Installation guide.
- Enable Jaeger Receiver: Add the Jaeger receiver to your
config.yaml.
receivers:
jaeger:
protocols:
grpc:
endpoint: 0.0.0.0:14250
thrift_http:
endpoint: 0.0.0.0:14268
- Update Pipeline:
service:
pipelines:
traces:
receivers: [jaeger]
exporters: [otlp]
- Point Applications: Update your application to send traces to the Collector's Jaeger endpoint (e.g.,
http://localhost:14268/api/traces).
From Zipkin Clients
If your applications use Zipkin clients:
- Install OpenTelemetry Collector: Installation guide.
- Enable Zipkin Receiver: Add the Zipkin receiver to your
config.yaml.
receivers:
zipkin:
endpoint: 0.0.0.0:9411
- Update Pipeline:
service:
pipelines:
traces:
receivers: [zipkin]
exporters: [otlp]
- Point Applications: Update your application to send traces to the Collector's Zipkin endpoint (e.g.,
http://localhost:9411/api/v2/spans).
Validate
Verify traces are flowing correctly by comparing against your service inventory.
Check Services Are Reporting
- In SigNoz, navigate to Services in the left sidebar.
- Verify each service from your inventory appears in the list.
- Click a service to see its metrics (latency, error rate, throughput).
Verify Traces
- Navigate to Traces in the left sidebar.
- Select a service and time range.
- Verify spans appear with expected attributes.
- Check that trace context propagates across service boundaries (parent-child relationships).
Troubleshooting
Traces not appearing in SigNoz
- Check connectivity: Verify your application or collector can reach
ingest.<region>.signoz.cloud:443. - Verify service name: Ensure
OTEL_SERVICE_NAMEor the equivalent config is set. - Check application logs: Look for exporter errors.
- Enable debug logging: Set
OTEL_LOG_LEVEL=debugto see detailed SDK logs.
Broken or incomplete traces
If traces appear fragmented across services:
- Check context propagation: Ensure all services use compatible propagation (W3C Trace Context is recommended).
- Verify all services are instrumented: Missing instrumentation on any service breaks the trace chain.
Missing spans within a service
If some operations aren't being traced:
- Check auto-instrumentation coverage: Some libraries may not be auto-instrumented.
- Add manual instrumentation: For custom code, add manual spans using the OTel API.
Next Steps
Once your traces are flowing to SigNoz:
- Create dashboards with trace-based panels
- Set up trace-based alerts for latency and errors
- Correlate traces with logs for debugging
- Explore the Service Map to understand dependencies
- Migrate your logs next