SigNoz
Docs
PricingCustomers
Get Started - Free
Docs
IntroductionContributingMigrate from DatadogSigNoz API
OpenTelemetry
What is OpenTelemetryOpenTelemetry Collector GuideOpenTelemetry Demo
Community
Support
Slack
X
Launch Week
Changelog
Dashboard Templates
DevOps Wordle
Newsletter
KubeCon, Atlanta 2025
More
SigNoz vs DatadogSigNoz vs New RelicSigNoz vs GrafanaSigNoz vs Dynatrace
Careers
AboutTermsPrivacySecurity & Compliance
SigNoz - Open Source Datadog Alternative
SigNoz
All systems operational
HIPAASOC-2
SigNoz Cloud - This page applies to SigNoz Cloud editions.
Self-Host - This page applies to self-hosted SigNoz editions.

Migrate Traces/APM from LGTM Stack

Overview

This guide walks you through migrating distributed tracing and APM from Tempo (LGTM Stack) to SigNoz. You will:

  1. Check your current trace sources in Tempo
  2. Redirect your trace data to SigNoz
  3. Validate traces are flowing correctly
  4. Explore SigNoz's APM capabilities

SigNoz is built natively on OpenTelemetry, making it compatible with most existing instrumentation used with Tempo (OpenTelemetry, Jaeger, Zipkin).

Most steps are identical. To adapt this guide, update the endpoint and remove the ingestion key header as shown in Cloud → Self-Hosted.

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 TypeMigration Path
OpenTelemetry SDKRedirect OTLP exporter
Grafana AgentMigrate to OTel Collector
Jaeger ClientUse Jaeger Receiver
Zipkin ClientUse 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=<your-ingestion-key>

Replace:

  • <region>: Your SigNoz Cloud region
  • <your-ingestion-key>: Your SigNoz ingestion key

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.

  1. Install OpenTelemetry Collector: Follow the installation guide.
  2. Configure Receivers: Copy your receiver configuration (e.g., otlp, jaeger, zipkin) from Grafana Agent to the OTel Collector's config.yaml.
  3. Configure Exporter: Set up the OTLP exporter to send to SigNoz.
otel-collector-config.yaml
exporters:
  otlp:
    endpoint: "https://ingest.<region>.signoz.cloud:443"
    headers:
      signoz-ingestion-key: "<your-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:

  1. Install OpenTelemetry Collector: Installation guide.
  2. Enable Jaeger Receiver: Add the Jaeger receiver to your config.yaml.
otel-collector-config.yaml
receivers:
  jaeger:
    protocols:
      grpc:
        endpoint: 0.0.0.0:14250
      thrift_http:
        endpoint: 0.0.0.0:14268
  1. Update Pipeline:
otel-collector-config.yaml
service:
  pipelines:
    traces:
      receivers: [jaeger]
      exporters: [otlp]
  1. 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:

  1. Install OpenTelemetry Collector: Installation guide.
  2. Enable Zipkin Receiver: Add the Zipkin receiver to your config.yaml.
otel-collector-config.yaml
receivers:
  zipkin:
    endpoint: 0.0.0.0:9411
  1. Update Pipeline:
otel-collector-config.yaml
service:
  pipelines:
    traces:
      receivers: [zipkin]
      exporters: [otlp]
  1. 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

  1. In SigNoz, navigate to Services in the left sidebar.
  2. Verify each service from your inventory appears in the list.
  3. Click a service to see its metrics (latency, error rate, throughput).

Verify Traces

  1. Navigate to Traces in the left sidebar.
  2. Select a service and time range.
  3. Verify spans appear with expected attributes.
  4. Check that trace context propagates across service boundaries (parent-child relationships).

Troubleshooting

Traces not appearing in SigNoz

  1. Check connectivity: Verify your application or collector can reach ingest.<region>.signoz.cloud:443.
  2. Verify service name: Ensure OTEL_SERVICE_NAME or the equivalent config is set.
  3. Check application logs: Look for exporter errors.
  4. Enable debug logging: Set OTEL_LOG_LEVEL=debug to see detailed SDK logs.

Broken or incomplete traces

If traces appear fragmented across services:

  1. Check context propagation: Ensure all services use compatible propagation (W3C Trace Context is recommended).
  2. 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:

  1. Check auto-instrumentation coverage: Some libraries may not be auto-instrumented.
  2. 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

Last updated: November 30, 2025

Edit on GitHub

Was this page helpful?

Your response helps us improve this page.

Prev
Migrating Metrics
Next
Migrating Logs
On this page
Overview
Prerequisites
Step 1: Assess Your Current Tracing Setup
List Your Services
Categorize Your Services
Step 2: Migrate Each Service
From OpenTelemetry SDK
From Grafana Agent
From Jaeger Clients
From Zipkin Clients
Validate
Check Services Are Reporting
Verify Traces
Troubleshooting
Traces not appearing in SigNoz
Broken or incomplete traces
Missing spans within a service
Next Steps

Is this page helpful?

Your response helps us improve this page.