SigNoz Cloud - This page is relevant for SigNoz Cloud editions.
Self-Host - This page is relevant for 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).

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=<SIGNOZ_INGESTION_KEY>

Replace:

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: "<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:

  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:

Last updated: November 30, 2025

Edit on GitHub

Was this page helpful?