SigNoz Cloud - This page is relevant for SigNoz Cloud editions.
Self-Host - This page is relevant for self-hosted SigNoz editions.

Migrate Metrics from LGTM Stack

Overview

This guide walks you through migrating metrics from Prometheus, Mimir, or Grafana Cloud to SigNoz. You will:

  1. Inventory your current metric sources
  2. Set up the OpenTelemetry Collector
  3. Configure receivers for your existing exporters
  4. Validate metrics are flowing correctly

SigNoz supports Prometheus metrics natively, so migration typically involves pointing your existing exporters to the OpenTelemetry Collector or using the Collector to scrape your targets.

Prerequisites

Before starting, ensure you have:

  • A SigNoz account (Cloud) or a running SigNoz instance (Self-Hosted)
  • Access to your Prometheus/Mimir configuration (prometheus.yml or Grafana Agent config)
  • Administrative access to deploy the OpenTelemetry Collector

Step 1: Assess Your Current Metrics

Before migrating, list what you are currently collecting.

List Your Metric Jobs

Run this PromQL query in Grafana (against your Prometheus/Mimir datasource) to see active jobs:

count({__name__=~".+"}) by (job)

This will give you a list of jobs (e.g., node_exporter, kubernetes-pods, myapp) and the number of series for each.

Categorize Your Sources

Group your metrics by how they are collected:

Source TypeMigration Path
Prometheus Exportersnode_exporter, postgres_exporter, etc.
Application Metrics/metrics endpoint on your app
Grafana AgentUsing Grafana Agent for collection

Step 2: Set Up the OpenTelemetry Collector

Most migration paths require the OpenTelemetry Collector.

  1. Install the OpenTelemetry Collector in your environment.
  2. Configure the OTLP exporter to send metrics to SigNoz Cloud.

Step 3: Migrate Each Metric Source

Work through each source type from your inventory.

From Prometheus Exporters

If you have existing Prometheus exporters running (like node_exporter), you can configure the OpenTelemetry Collector to scrape them just like Prometheus did.

  1. Copy Scrape Configs: Take the scrape_configs section from your prometheus.yml.
  2. Add to Collector: Paste them into the prometheus receiver in otel-collector-config.yaml.
otel-collector-config.yaml
receivers:
  prometheus:
    config:
      scrape_configs:
        - job_name: 'node-exporter'
          scrape_interval: 60s
          static_configs:
            - targets: ['localhost:9100']
  1. Enable in Pipeline:
otel-collector-config.yaml
service:
  pipelines:
    metrics:
      # Ensure 'prometheus' is in this list
      receivers: [otlp, prometheus]
      processors: [batch]
      exporters: [otlp]

For more details on configuring the Prometheus receiver, see Prometheus Metrics in SigNoz.

Replace Prometheus Exporters with OpenTelemetry Receivers

While the Prometheus Receiver allows you to continue using your existing Prometheus exporters, we highly recommend migrating to native OpenTelemetry receivers for many common systems and services. These provide a more direct integration with the OpenTelemetry ecosystem.

Here are some common Prometheus exporters and their OpenTelemetry equivalents:

Prometheus ExporterOpenTelemetry ReceiverDescription
node_exporterhostmetricsCollects system metrics (CPU, memory, disk, network)
mysqld_exportermysqldCollects MySQL server metrics
redis_exporterredisCollects Redis metrics
mongodb_exportermongodbCollects MongoDB metrics
postgres_exporterpostgresqlCollects PostgreSQL metrics
kafka_exporterkafkaCollects Kafka metrics
nginx_exporternginxCollects NGINX metrics

SigNoz supports all the receivers that are listed in the OpenTelemetry Registry. To configure a new metric receiver, follow these instructions here.

From Application Metrics

If your applications expose a /metrics endpoint (common in Go, Java, Python apps using Prometheus client libraries):

  1. Add Scrape Job: Add a job to the prometheus receiver to scrape your app.
otel-collector-config.yaml
receivers:
  prometheus:
    config:
      scrape_configs:
        - job_name: 'my-app'
          scrape_interval: 30s
          static_configs:
            - targets: ['app-host:8080']

From Grafana Agent

Grafana Agent is based on the Prometheus and OpenTelemetry Collector codebases. Migrating to the official OpenTelemetry Collector is usually straightforward.

  1. Identify Receivers: Check your Grafana Agent config for integrations or metrics sections.
  2. Map to OTel:
    • node_exporter integration -> hostmetrics receiver or prometheus receiver scraping node_exporter.
    • prometheus.scrape -> prometheus receiver.
    • otlp -> otlp receiver.

Refer to OpenTelemetry Metrics Receivers for more details.

Finding More Metric Sources

For a complete list of all supported metric collection methods, see Send Metrics to SigNoz.

Switching to Native OTel Metrics

For new applications, we recommend using OpenTelemetry SDKs directly instead of Prometheus client libraries. This avoids the need for scraping and provides better context (exemplars).

See Instrumentation Guides for your language.

Validate

Compare your SigNoz metrics against your original inventory.

Check Metrics Are Arriving

  1. In SigNoz, navigate to Metrics in the left sidebar.
  2. Use the List View to browse available metrics.
  3. Click a metric name to see its attributes and values.
SigNoz Metrics Explorer showing list of available metrics
SigNoz Metrics Explorer interface

Troubleshooting

Metrics not appearing in SigNoz

  1. Check Collector status: Verify the OpenTelemetry Collector is running.
  2. Verify endpoint: Confirm https://ingest.<region>.signoz.cloud:443 matches your account region.
  3. Check ingestion key: Ensure signoz-ingestion-key header is set correctly.
  4. Check scrape targets: Look at Collector logs to see if Prometheus scrapes are failing (connection refused, timeout).

Missing attributes on metrics

If metrics appear but lack expected labels:

  1. Check relabel configs: Ensure you aren't dropping labels in your scrape config.
  2. Verify resource attributes: Ensure service.name and other resource attributes are set.

Metric values don't match

  1. Align time ranges: Ensure both queries cover the exact same period.
  2. Match aggregations: PromQL rate() vs irate() can produce different results.

Next Steps

Once your metrics are flowing to SigNoz:

Last updated: November 30, 2025

Edit on GitHub

Was this page helpful?