Migrating Observability from Datadog to Kloudfuse

Migrating Observability from Datadog to Kloudfuse

Table of Contents

When organizations outgrow their current observability platform due to different reasons like (cost constraints, feature limitations, or strategic shifts) the prospect of migration can seem daunting. Moving from Datadog to Kloudfuse represents a key concern:

How do you transition an entire observability stack without losing visibility into your systems or disrupting your team's workflows?

The good news is that Kloudfuse is designed to be Datadog-compatible. This guide walks you through migrating from Datadog to Kloudfuse across the three pillars of observability: metrics, logs, and traces.

Critically, Kloudfuse makes it easy to migrate your existing organizational assets - dashboards, alerts, and other observability configurations that represent valuable tribal knowledge built up over time. Unlike migrations that require complete re-instrumentation, most of the work involves simply reconfiguring endpoints and adjusting a few settings. We will see how to swap your Datadog agent’s pipelines to point at the Kloudfuse ingester, which will migrate the observability stack to Kloudfuse.

Why Migrate to Kloudfuse?

Datadog’s architecture and pricing often struggle to keep up with modern, high-scale engineering needs. Here are some reasons to migrate:

Holistic Telemetry for Faster Troubleshooting

With Datadog, engineers have to struggle with correlation issues as telemetry data is stored in different silos. Kloudfuse eliminates these issues by integrating all telemetry data in a single backend. This allows one query to surface related traces, logs, and metrics and reduces context-switching or stitching data together.

Predictable, Flat-Rate Pricing

The scaling nature of competitive services like Datadog leads to unanticipated spikes in costs, difficult decisions on retention rates, and increased chances for telemetry sampling artifacts. Kloudfuse ensures flat-rate deployment based billing which includes automatic deduplication and inline-reporting compression. This provides budget-friendly full observability as your telemetry footprint expands.

VPC Deployment with Open Standards

Kloudfuse runs directly inside your cloud environment. This eliminates egress costs and gives you complete control over your data. It is built on OpenTelemetry, meaning it supports open instrumentation, which includes existing deployed Datadog agents. This means you won’t need to rip out perfectly functional infrastructure during migration.

Now, let's look at how to migrate our Datadog observability stack to Kloudfuse.

Migration Strategy and Planning

Before discussing the technical steps, decide on a migration approach. Many teams use the following:

  1. Dual-shipping: Let the Datadog agent send data to both Datadog and Kloudfuse in parallel. This lets you verify data in Kloudfuse while still operating in Datadog. If you have an existing Datadog agent, you can use it to send your data streams to the Kloudfuse platform.

  2. Phased-cutover: In this approach, data streams are cut over one environment at a time to minimize risk. Agent configurations are updated in stages, metrics are verified in Kloudfuse, and Datadog is switched off for each stream. This ensures dashboards stay active and prevents gaps.

Whether you choose dual-shipping or cutover, remember that endpoint changes in the Datadog agent direct all streams (metrics, logs, APM) into Kloudfuse. So migrating one component at a time (e.g., metrics now, logs later) is possible.

Plan carefully to avoid missing data. Once endpoints are updated, Kloudfuse will receive exactly the same data streams the agent was sending. This strategy ensures the continuity of monitoring data.

Migrating the Datadog Agent

A key advantage of Kloudfuse is that you can keep using the Datadog agent on your hosts or Kubernetes nodes. Kloudfuse supports dual shipping, allowing you to send data to Kloudfuse instead of, or in addition to, Datadog. In practice, you only need to adjust the agent’s configuration, redirecting the agent’s endpoints to Kloudfuse’s ingester URLs.

Kubernetes

If you deploy the Datadog Agent via Helm on Kubernetes, Kloudfuse provides a sample values file (dd-values-kfuse.yaml). The key changes in this file involve fields ending in _url: namely, dd_url, logs_dd_url, apm_dd_url, and orchestrator_dd_url. For example, in a same-VPC scenario, you might set:

datadog: dd_url: "http://<KF_INGRESS_IP>/ingester" logs_dd_url: "<KF_INGRESS_IP>:80" # similarly set apm_dd_url, orchestrator_dd_url to point to KF endpoints

A default Kubernetes values file shows exactly these fields being replaced. For instance, an internal IP example is:

dd_url: http://10.53.250.80/ingester<br>logs_dd_url: "10.53.250.80:80"

And for a custom DNS name, it’s:

dd_url: http://customer.kloudfuse.io/ingester<br>logs_dd_url: "customer.kloudfuse.io:443"

The same pattern applies to APM (traces) and orchestrator telemetry URLs. Essentially, search the Helm values for_url keys and update them to your Kloudfuse host/IP. Then install (or upgrade) the agent using those values. A sample Helm command is:

helm upgrade --install kfuse-agent -f dd-values-kfuse.yaml datadog/datadog -n kfuse-agent --version <version>

If you're using Datadog's APM SDKs (for example: ddtrace in Python, Java, or Node), the good news is you don’t need to replace them to start sending traces to Kloudfuse. It supports ingesting traces emitted by Datadog APM SDKs with minimal configuration changes, mostly just updating the endpoint URLs that the agent forwards traces to. No code-level re-instrumentation is required.

Under the hood, Datadog APM SDKs send trace data to the Datadog agent. Kloudfuse simply receives this data by intercepting the agent output via a different backend endpoint:

# In your Datadog agent config<br>apm_dd_url: https://<kloudfuse-endpoint>/ingester/apm

Unless you're planning to switch SDKs or modify trace semantics, you can keep your existing instrumentation as-is and just reroute the agent.

After this, the Kubernetes nodes will continue running the Datadog agent, but all metrics, logs, and traces will stream into Kloudfuse instead of Datadog (or both, if dual-shipping).

Kloudfuse also provides guidance on handling more complex Kubernetes network layouts (same/different VPC or cluster) by using an internal Kubernetes service for Kloudfuse and the appropriate IPs. However, the core idea remains the same. The only major change is the endpoint URLs, while everything else, such as checks, tags, and custom metrics, stays configured as before.

Host & Container Agents

Similarly, for non-Kubernetes hosts (VMs, Docker, etc.), you update the agent’s datadog.yaml (or values file) with the Kloudfuse endpoints. The pattern is to set dd_url, logs_dd_url, apm_dd_url, orchestrator_dd_url to point at your Kloudfuse ingester.

For example, in a multi-AWS-VPC scenario, replace these fields with the VPC endpoint DNS name. If your agents are already deployed, you can also retroactively update their config or use the “existing agent” instructions Kloudfuse provides.

Validating Agent Data

After reconfiguring, verify that data flows to Kloudfuse. Check the Kloudfuse UI or use API calls to see if host metrics (CPU, memory), Kubernetes metrics (pod/container stats), and logs start appearing. Because you haven’t changed which metrics are collected, the numeric values and tags should match what you saw in Datadog. Any missing metric likely means the agent endpoint wasn’t updated correctly.

Use Kloudfuse’s query explorer or dashboards (see below) to confirm each stream.

Cloud Service Integrations

Datadog’s cloud integrations (CloudWatch, Azure Monitor, GCP, etc.) must be manually set up in Kloudfuse too. In Datadog, many cloud metrics/logs are enabled from the web console. In Kloudfuse, you configure them via the cloud providers (AWS, Azure, GCP). Here’s how to migrate each:

AWS

Different services from AWS can be migrated in the following way:

Fig 1: Creating Firehose Stream in Amazon

Enter the Kloudfuse API endpoint for logs:

https://<KF_HOST>/ingester/kinesis/logs

Fig 2: Enter the HTTP Endpoint URL

Now, in the AWS Console, click on CloudWatch Logs and pick your Log Groups:

Fig 3: Picking Log Groups in Cloudwatch Logs

Next, create Subscription Filters that use the Firehose you just created. Grant an IAM role so CloudWatch Logs can publish to Firehose.

Fig 4: Creating Amazon Data Firehose Subscription Filter

Once linked, every new log entry (from Lambda, VMs, RDS, etc.) flows through Firehose into Kloudfuse. Kloudfuse handles them via its logs ingester and parsing pipeline.

Fig 5: Creating Metric Streams in CloudWatch

We need to configure a CloudWatch Metrics stream to deliver metrics data to your Kloudfuse endpoint. This involves creating a Metric Stream destination (Kinesis Firehose) that points to:

https://<KF-INGRESS>/ingester/cw-metrics.

Fig 6: Creating Custom Setup with Firehose

Once set up, AWS will continuously stream EC2/ALB/RDS metrics into Kloudfuse. Optionally, enable Kloudfuse’s AWS enrichment to pull extra metadata. This requires adding the line in your Kloudfuse values (custom-values.yaml) and setting up a scraping IAM role:

global:<br>enrichmentEnabled:<br> - aws

This gives your logs richer AWS context (tags, resource names).

`kubectl get svc

Next, we will create a connection. In AWS EventBridge > Connections, click Create connection.

Fig 7: Selecting Connection in AWS EventBridge

Set the following values for the options:

Fig 8: Creating Connection in AWS EventBridge

Now, in API Destinations, click Create API destination. Fill in the endpoint as follows:

https://<your-kloudfuse-endpoint>/ingester/eventbridge

Set the HTTP method as POST and select the connection you previously created.

Fig 9: Creating API Destination in AWS Event Bridge

Now we will create a Rule in EventBridge > Rules and click Create rule. After this, create a use pattern form and add the following JSON:

{<br>"source": [{ "exists": true }]<br>}

Select your new API Destination as target and create a new Execution role when prompted. Once set up, AWS will send matching events directly to Kloudfuse Events, enabling real-time observability.

After AWS integration, Kloudfuse’s metrics dashboards for EC2, Lambda, etc., will populate automatically. In summary, the migration involves recreating in AWS the same pipelines you had for Datadog (streams, subscriptions, event rules), but pointing them at Kloudfuse endpoints. Then Kloudfuse will start consuming those metrics/logs.

Azure

In this section, we will see how to migrate Azure metrics and logs to Kloudfuse:

global:<br>cloud-exporter:<br> enabled: true

You must also create an Azure service principal (Client ID/Secret, Tenant ID) and list your subscriptions. Kloudfuse will then use those credentials to fetch metrics (VMs, Azure SQL, etc.) via the Datadog agent’s Azure integration under the hood. The configuration looks like:

global:<br>cloud-exporter:<br> enabled: true<br>kfuse-cloud-exporter:<br>azure-metrics-exporter:<br> enabled: true<br> subscriptions:<br> - <your-subscription-id><br>secrets:<br>AZURE_CLIENT_ID: "<id>"<br>AZURE_TENANT_ID: "<id>"<br>AZURE_CLIENT_SECRET: "<secret>"

Once applied, Kloudfuse will import Azure Monitor metrics automatically.

Essentially, logs from Azure are sent to Event Hubs, where the Function picks them up and POSTs them to Kloudfuse’s API. Kloudfuse provides sample code (in an index.js) where you set KF_API_KEY and KF_URL to your values. Finally, you create Diagnostic Settings in Azure for the resources you want and point them to the Event Hub. After all this, Azure logs stream into Kloudfuse as they did in Datadog.

In short, Azure’s metric migration uses Kloudfuse’s agent-based exporter, while Azure’s log migration uses an Event Hub → Function pipeline. These replace Datadog’s built-in Azure connectors.

GCP

In this section, we will see how to migrate GCP metrics and logs to Kloudfuse:

GCP Metrics

Kloudfuse integrates with Google Cloud to collect Stackdriver metrics from your GCP projects. The process involves creating credentials, adding them to your cluster as a secret, and configuring the Helm values. Follow these key steps:

In the Google Cloud Console, go to IAM & Admin > Service Accounts.

Fig 10: Selecting Service Accounts in IAM & Admin

Fig 11: Selecting Monitoring Viewer in Permission Section

Fig 12: Creating a New Key in the Project

Upload the credentials to your Kubernetes cluster:

kubectl create secret generic kfuse-sd-secret --from-file=credentials.json -n kfuse

Update your Helm chart values with the following config snippet:

kfuse-cloud-exporter:<br>Prometheus-stackdriver-exporter:<br> enabled: true<br> stackdriver:<br> httpTimeout: 30s<br> maxRetries: 3<br> projectId: "YOUR_PROJECT_ID"<br> serviceAccountSecret: kfuse-sd-secret<br> metrics:<br> typePrefixes: "compute.googleapis.com"

Once configured, Kloudfuse will begin collecting metrics from your GCP environment via the Stackdriver exporter.

GCP Logs

Kloudfuse collects logs from Google Cloud using Cloud Pub/Sub. This lets you stream logs (e.g., from Cloud Logging) directly into Kloudfuse for analysis. To set it up, follow these steps:

  1. Create a Pub/Sub Topic and Subscription
    • In the GCP Console, go to Pub/Sub
    • Create a new topic (e.g., MyLogsCollector)

Fig 13: Creating a New Topic

Fig 14: Creating a New Subscription

  1. Create a Log Sink
    • Go to Logs Explorer > More actions > Create sink

Fig 15: Creating a Sink

  1. In your Helm custom-values.yaml, enable GCP log ingestion:
logs-parser:<br>gcpConfig:<br> enabled: true<br> subscriptionId: "kloudfuse-gcp-subscription"<br> pubsubKey: "<GCP_SERVICE_ACCOUNT_JSON>"

Once applied, Kloudfuse connects to the subscription and begins ingesting logs in real time, similar to how Datadog ingests logs via Stackdriver.

Dashboards and Alerts

After your data streams into Kloudfuse, you’ll want dashboards and alerts. Kloudfuse comes with pre-built dashboards and alerts for common systems, and also provides tools to migrate your custom ones.

Fig 16: Pre-built Dashboard List in Kloudfuse

Similarly, Kloudfuse includes alert templates (e.g., high CPU on node, pod restarts, EC2 failures) out of the box. These are equivalent to Datadog’s standard monitors. Even without any migration, as soon as your metrics appear in Kloudfuse, you can use or customize these built-in Grafana dashboards and alert rules.

Migrating Custom Dashboards/Alerts: If you want to preserve Datadog dashboards or monitors, Kloudfuse offers migration tools. You can use its proprietary converter and Kloudfuse-provided Python scripts (dashboard.py, alert.py) to translate Datadog JSON and upload it to Grafana. Here’s the implementation plan for migration:

  1. Download the Datadog asset (dashboard or alert) in JSON format.

  2. Upload the converted JSON into Kloudfuse:

python dashboard.py upload <br> -s /path/to/converted_dashboard.json <br> -f "MyFolder" <br> -a https://<your-grafana-endpoint>/grafana <br> -u admin -p password

Similarly, for alerts, Kloudfuse provides alert.py. Here's how to upload an alert definition:

python alert.py upload -s /path/to/alert.json <br> -f "MyAlertFolder" <br> -a https://<grafana-instance>/grafana <br> -u admin -p password

You can also upload entire directories, manage multiple folders, or delete alerts in bulk. These scripts are especially useful when migrating alerts from Datadog monitors, letting you preserve folder structure and organize rules efficiently in Grafana.

Note: Kloudfuse uses the Grafana format for migrations to ensure dashboards and alerts remain compatible with PromQL, making onboarding easier by leveraging a widely adopted query language

Do note that some manual editing of JSON files might be required, Grafana and Datadog use different query models and alerting logic. However, these tools automate the majority of the migration, especially for bulk tasks. After uploading to Grafana, we can consume it into Kloudfuse using the following guide. This approach is better when there is a bulk of dashboards and importing manually doesn’t scale well.

Note: Because Kloudfuse uses Grafana’s alerting (or its own built-in alert engine), some Datadog monitor logic may not map 1:1. Check each imported alert carefully.

In practice, many teams start by reusing Kloudfuse’s default dashboards to cover common needs, and selectively migrate only critical custom ones. But rest assured: Kloudfuse anticipates this need and equips you with conversion helpers.

Conclusion

Migrating observability to Kloudfuse involves minimal per-agent changes plus some cloud setup and dashboard conversion. In short:

  1. Reconfigure the Datadog agent(s): Update dd_url, logs_dd_url, apm_dd_url, etc., to point to Kloudfuse’s ingester. Then install/upgrade the agent. This ensures all host/cluster metrics, logs, and traces begin flowing into Kloudfuse.

  2. Set up cloud data streams: For AWS, Azure, and GCP, recreate your Datadog cloud integrations:

  1. Verify data arrival: After configuring, check Kloudfuse dashboards or query interfaces. Compare against Datadog to ensure no gaps. Use dual-shipping if needed during validation.

  2. Migrate dashboards and alerts: Start with Kloudfuse’s built-in dashboards. For custom visuals or monitors, export them from Datadog and import them into Kloudfuse’s Grafana using the provided scripts. Adjust any mismatches.

  3. Cut over and decommission: Once all vital data and alerts are validated in Kloudfuse, you can retire Datadog by stopping the agent’s Datadog API key or uninstalling the agent. Monitor the transition closely for a short period to ensure no missing telemetry.

Throughout this process, the only required agent changes are endpoint URLs, an easy, low-friction cutover. Cloud integrations are “set-and-forget” once configured. The result is a smooth migration where all your observability data (metrics, logs, and traces) end up in Kloudfuse with your dashboards and alerts intact.