Migrate from Datadog
Step-by-step guide to switch your observability to Qorrelate
Why Migrate?
Transparent pricing with no host-based fees
100% OpenTelemetry native
MCP integration for AI assistants
This guide walks you through migrating from Datadog to Qorrelate. The process typically takes 1-2 weeks for most teams, with minimal disruption to your monitoring.
Migration Support
Need help with your migration? Contact us for personalized migration assistance and a cost comparison analysis.
Feature Comparison
| Feature | Datadog | Qorrelate |
|---|---|---|
| Logs | ✓ | ✓ |
| Metrics | ✓ | ✓ |
| APM / Traces | ✓ | ✓ |
| Session Replay | ✓ (RUM) | ✓ |
| Dashboards | ✓ | ✓ (Perses) |
| Alerts | ✓ | ✓ |
| Service Map | ✓ | ✓ |
| AI Assistant | ✓ (Bits AI) | ✓ (MCP for any AI) |
| OpenTelemetry Native | Partial | ✓ 100% |
| Self-Hosted Option | ✗ | ✓ |
| Transparent Pricing | ✗ | ✓ |
Planning Your Migration
Before starting, gather this information:
Migration Checklist
- List of services sending data to Datadog
- Current dashboards to recreate
- Active alerts and their thresholds
- Notification channels (Slack, PagerDuty, etc.)
- Custom metrics and their cardinality
- Log volume per day (GB)
Recommended Approach
We recommend a parallel run approach: send data to both Datadog and Qorrelate for 1-2 weeks before fully cutting over. This lets you validate data accuracy and build confidence.
Set Up Qorrelate Account
- Create your Qorrelate account
- Create an organization for your team
- Generate an API key in Settings → API Keys
- Note your Organization ID from Settings → General
Replace Datadog Agent with OpenTelemetry
Replace the Datadog Agent with the OpenTelemetry Collector. The OTel Collector can send data to both Datadog and Qorrelate during your parallel run.
Kubernetes
# otel-collector-values.yaml
mode: daemonset
config:
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318
exporters:
# Send to Qorrelate
otlphttp/qorrelate:
endpoint: https://qorrelate.io
headers:
Authorization: "Bearer YOUR_API_KEY"
X-Organization-Id: "YOUR_ORG_ID"
# Keep sending to Datadog during migration (optional)
datadog:
api:
key: "${DD_API_KEY}"
service:
pipelines:
traces:
receivers: [otlp]
exporters: [otlphttp/qorrelate, datadog] # Remove datadog after migration
metrics:
receivers: [otlp]
exporters: [otlphttp/qorrelate, datadog]
logs:
receivers: [otlp]
exporters: [otlphttp/qorrelate, datadog]
Docker / VM
# Download the OTel Collector
curl -LO https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.91.0/otelcol-contrib_0.91.0_linux_amd64.tar.gz
tar -xzf otelcol-contrib_0.91.0_linux_amd64.tar.gz
# Run with config
./otelcol-contrib --config otel-config.yaml
Update Application Instrumentation
If you're using the Datadog SDK, switch to OpenTelemetry SDK. Here's a Python example:
# Before (Datadog)
from ddtrace import tracer
# After (OpenTelemetry)
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
provider = TracerProvider()
provider.add_span_processor(BatchSpanProcessor(
OTLPSpanExporter(endpoint="https://qorrelate.io/v1/traces",
headers={"Authorization": "Bearer YOUR_API_KEY"})
))
trace.set_tracer_provider(provider)
Migrate Dashboards
Recreate your key dashboards in Qorrelate. Start with your most important dashboards first.
AI-Assisted Dashboard Creation
Use the MCP integration to have your AI assistant create dashboards:
"Create a dashboard showing request rate, error rate, and P99 latency for the checkout service"
Common Dashboard Queries
| Metric | Datadog Query | PromQL (Qorrelate) |
|---|---|---|
| Request Rate | sum:http.requests{*}.as_rate() |
sum(rate(http_requests_total[5m])) |
| Error Rate % | sum:http.errors{*}/sum:http.requests{*}*100 |
100*sum(rate(http_requests_total{status=~"5.."}[5m]))/sum(rate(http_requests_total[5m])) |
| P99 Latency | p99:http.request.duration{*} |
histogram_quantile(0.99, sum(rate(http_request_duration_seconds_bucket[5m])) by (le)) |
| CPU Usage | avg:system.cpu.user{*} |
avg(rate(process_cpu_seconds_total[5m])) * 100 |
Migrate Alerts
Recreate your critical alerts in Qorrelate. Keep Datadog alerts active during the parallel run period.
Alert Conversion Examples
Datadog: High Error Rate
avg(last_5m):sum:http.errors{service:api}/sum:http.requests{service:api} > 0.05
Qorrelate Equivalent:
{
"name": "High Error Rate - API",
"type": "metric",
"condition": {
"query": "sum(rate(http_requests_total{service=\"api\",status=~\"5..\"}[5m])) / sum(rate(http_requests_total{service=\"api\"}[5m]))",
"operator": ">",
"threshold": 0.05,
"for": "5m"
}
}
Notification Channel Mapping
- Datadog Slack integration → Qorrelate Slack integration
- Datadog PagerDuty integration → Qorrelate PagerDuty integration
- Datadog email → Qorrelate email notifications
- Datadog webhooks → Qorrelate webhooks
Validate & Cutover
Validation Checklist
- All services sending data to Qorrelate
- Dashboards showing correct data
- Alerts triggering correctly (test with intentional threshold breach)
- Notifications reaching correct channels
- Team members can access and use Qorrelate
- Query performance is acceptable
Complete the Cutover
- Remove Datadog exporter from OTel Collector config
- Disable Datadog alerts
- Uninstall Datadog agents
- Cancel Datadog subscription
Congratulations!
You've successfully migrated to Qorrelate. Enjoy your cost savings and vendor-free observability!
Query Mapping Reference
Common Datadog queries and their PromQL equivalents:
| Datadog | PromQL |
|---|---|
avg:metric{*} |
avg(metric) |
sum:metric{*} |
sum(metric) |
max:metric{*} |
max(metric) |
metric{tag:value} |
metric{tag="value"} |
.as_rate() |
rate(metric[5m]) |
.rollup(avg, 60) |
avg_over_time(metric[1m]) |
p99:metric |
histogram_quantile(0.99, ...) |
Cost Savings Calculator
Estimate your savings by comparing your current Datadog bill to Qorrelate pricing.