Migrating Observability from ELK Stack to Kloudfuse
Published on
Sep 3, 2025
Table of Contents
Observability relies on three main types of data, including logs, metrics, and traces. These are often expanded to include DEM and continuous profiling. When combined, they give teams a deep and detailed view of how systems are behaving under the hood.
Most teams begin with the ELK (Elasticsearch, Logstash, and Kibana) Stack to manage logging. But when it comes to handling metrics and traces, they usually add on tools like Metricbeat or Elastic APM. That creates a patchwork stack. And if you want DEM or continuous profiling, the complexity only grows.
This kind of siloed setup makes it hard to connect the dots. You might spot error spikes in Kibana, but then have to jump into Prometheus to investigate the related metrics. Each tool has its own interface, its own storage, and its own query language. That adds mental overhead and makes it easy to miss what matters.
Kloudfuse takes a different path. It brings logs, metrics, and traces into one backend. Teams can search across all of them together, without bouncing between dashboards.
In this guide, we’ll walk through how to move from ELK to Kloudfuse. First, we’ll review your current setup, then go step by step through migrating logs, metrics, and traces.
Why Teams Move from ELK to Kloudfuse
The ELK Stack is great for beginners, but as your system grows, so do the challenges with more data, more tools, and increased complexity. Here are some pain points:
Rigid upfront schemas: ELK often requires defining log schemas early on to map log lines into structured fields. As applications evolve and new log formats appear, these schemas become brittle, forcing constant updates and reindexing.
Index sprawl and overhead: Managing a growing number of Elasticsearch indexes quickly becomes operationally heavy. Teams must balance index lifecycles, retention, and storage tuning or otherwise costs skyrocket and queries slow down.
Complex sharding decisions: Choosing shard counts is a guessing game; too few shards lead to hotspots and bottlenecks, while too many waste resources. Adjusting sharding after the fact is disruptive and time-consuming.
Kloudfuse offers a cleaner path forward.
Everything in One Place
With ELK, you start with logs but often need to add other tools for metrics, traces, and dashboards. Kloudfuse combines everything from the start. It gives you one query engine, one timeline, and full context without needing extra tools.No Vendor Lock-In
Kloudfuse is built on OpenTelemetry from the beginning, meaning there’s no need for custom agents or complicated plugins. You have complete control over what data to collect, how to enrich it, and where it goes.Predictable Costs, Even as You Scale
ELK costs can quickly increase as log volumes grow. Kloudfuse helps manage costs by cutting out unnecessary data early, storing it more efficiently, and providing a self-hosted, Self-SaaS deployment, keeping observability expenses under control while maintaining full visibility.Preserve What You’ve Built
Kloudfuse provides complimentary migration of existing dashboards and alerts so teams don’t have to start from scratch. This safeguards business continuity and ensures past organizational knowledge is carried forward seamlessly.
Fast Adoption, Zero Friction
Because Kloudfuse works with your existing collectors and query languages, teams can get started quickly without retraining or retooling. Familiar workflows remain intact, making the transition smooth and adoption effortless.
Before migrating, it’s important to assess the current state of your ELK setup. Let’s take a closer look at that next.
Assessing Current ELK Observability
Before moving to Kloudfuse, start by taking an inventory of everything that feeds your ELK stack. List all the data sources and pipelines, and make sure to note every service, node, or agent that sends data. The goal is to map everything end-to-end and identify the logs, metrics, and traces each service emits and where they go.
Next, document your ELK deployment. Outline your Elasticsearch clusters, index structure, Logstash pipelines, filters, and any Beats configurations. Also, list all Kibana dashboards, saved searches, and alert rules in use. You can run an automated audit using Elasticsearch’s REST API or Logstash’s pipeline listing to ensure you don’t miss anything. The aim is to create a checklist so nothing is overlooked when you switch.
Lastly, plan how to handle your existing data. You may not need to backfill all your old logs into Kloudfuse. Many teams keep their old Elasticsearch cluster for historical searches. But if you have important dashboards or compliance records, consider exporting key indices.
One key advantage of Kloudfuse is its affordable long-term storage. It stores data in object stores like S3, where logs can be fingerprinted, deduplicated, and compressed, making archiving cheaper. Think about how much historical data you really need. If it’s important, Kloudfuse’s flat-pricing model and cloud storage make it easy and cost-effective to store long-term data.
Migration Strategy and Planning
Once you have an understanding of your current setup, it's time to choose a migration approach. There are three main strategies:
Dual-run (parallel): Configure your apps to send logs, metrics, and traces to both ELK and Kloudfuse during the transition period. This method allows you to keep the old system running while verifying that Kloudfuse is capturing everything. While it’s the safest option, it also means extra load for ingestion and duplicate dashboards until the cutover.
Cutover (big-bang): Switch all pipelines to Kloudfuse at once and retire ELK. This is faster but riskier. Any missing data, like a misconfigured shipper, could go unnoticed until the system is live.
Phased (by service or signal): This is a hybrid approach where you migrate services or systems in stages. For example, point non-critical services to Kloudfuse first or move logs over while keeping metrics on the old system until they’re verified. Once that’s done, switch the remaining services in batches.
Trade-offs: Dual-run requires effort to maintain two systems and compare outputs, but it provides a safety net. Cutover can be tempting if ELK is problematic, but it’s important to be prepared to roll back or troubleshoot quickly if something’s missed. Phased rollouts work well for larger environments. For instance, you might migrate dev/test namespaces first or low-priority microservices, then learn from those migrations before moving to core systems.
Whichever approach you take, make sure to involve all stakeholders early. Meet with your SRE, DevOps, and development teams to review the inventory together. Someone might recall a legacy log shipper, a hidden JMX exporter, or a forgotten alert. The goal is to identify any “dark data” pipelines.
Set up a test environment ahead of time. Spin up a Kloudfuse staging cluster, perhaps in a sandbox AWS or Azure project. Use it to validate pipelines by sending a subset of data and practicing queries. This helps you catch any onboarding issues, such as network access, agent configurations, or alert routing, before touching production.
Migration by Stream
In this section, we’ll walk through how to migrate each data stream to Kloudfuse. We’ll begin with the logs first.
Logs Migration
Migrating logs is often the simplest initial step in the migration process. The process involves reconfiguring your existing log shippers, such as Filebeat, Fluent Bit, Fluentd, or Logstash forwarders, to send data to Kloudfuse instead of Elasticsearch or Logstash. Kloudfuse provides ingestion endpoints that are compatible with standard log formats, or you can use the OpenTelemetry Collector with log receivers to forward entries.
Kloudfuse can directly ingest from popular collectors like Fluent Bit, Fluentd, and Beats, which makes migration fast and hassle-free. Users can simply redirect their existing pipelines to Kloudfuse without changing the way data is collected. In practice, this typically involves updating the configuration of your Beats or Fluent Bit outputs to point to the Kloudfuse host and port (very similar to how you would configure an Elasticsearch endpoint). Here’s an example of how this looks in a fluent-bit.conf file:
|
Fingerprinting-based indexing is a key feature of Kloudfuse. As logs come in, Kloudfuse automatically parses them to extract fields and tag values (such as HTTP status codes, user IDs, or service names). This means you don’t have to pre-define all your index mappings or grok patterns.
Reconfigure log shippers: Update your existing log shippers (Filebeat, Fluent Bit, etc.) to point to Kloudfuse’s ingest endpoint, or install an OpenTelemetry Collector as a proxy. This step ensures that logs flow seamlessly into Kloudfuse.
Leverage automatic indexing: Verify that Kloudfuse extracted your key fields (e.g., timestamps, log levels) from incoming logs. Use these facets to filter logs in the new system.
Recreate dashboards/alerts: Import or rewrite Kibana queries in Kloudfuse/Grafana. Kloudfuse’s Grafana compatibility and conversion tools can pull in existing visualizations and alert rules.
As you migrate, run test searches to verify that everything works as expected. For example, select a time range with known errors and compare the log count and events in Kloudfuse with what you saw in Kibana. This will help identify any missing pipelines or parsing issues early on.
Metrics Migration
Next, move on to metrics. First, identify all current metric exporters. These might include Prometheus servers scraping applications, Metricbeat on hosts, StatsD or Statsite agents, cloud provider metrics agents, etc. You will repoint each exporter to send data into Kloudfuse instead of (or in addition to) your old systems. For example, change Prometheus’s remote_write or scrape target from localhost:9090 (itself) to the Kloudfuse endpoint. Here’s how:
|
If you’re using Prometheus Operator (kube‑prometheus), it would look like this in your values.yaml:
|
OpenTelemetry collectors can also receive various metric formats and forward them.
One advantage of Kloudfuse is that it supports standard query languages. Kloudfuse understands PromQL out of the box, as well as SQL, GraphQL, and its own TraceQL. A PromQL query for CPU load or HTTP request rate should work seamlessly after repointing the data source, with perhaps only minor adjustments to label names. In short, your team’s Prometheus/Grafana expertise will carry over easily.
Cardinality is a critical consideration in metrics. Kloudfuse is built to handle high-cardinality data, but it’s still wise to review your labels and tags. Remove any unnecessary labels that explode the metric series (for example, don’t tag metrics with user IDs or highly unique fields). Instead, rely on dimension reduction after ingestion if needed.
Kloudfuse includes cardinality analysis tools that detect high-cardinality series as they stream in. Catching this early allows you to rewrite exporters or use relabeling to trim labels before ingestion. Here’s a summary of the steps:
Reconfigure exporters: Point Metricbeat/Prometheus/StatsD/etc to Kloudfuse’s ingestion. Verify that key system metrics (CPU, memory, error rates) flow in correctly.
Use familiar queries: Kloudfuse supports PromQL and SQL, so reuse existing Grafana dashboards. Adjust any labels if necessary.
Manage cardinality: Trim unnecessary metric labels. Use Kloudfuse’s cardinality alerts to catch any runaway high-cardinality data.
Traces Migration
Kloudfuse supports Elastic APM natively. If you're already using Elastic APM agents, you can start sending trace data directly to Kloudfuse without the need to re-instrument your code. However, for long-term flexibility and vendor neutrality, we recommend migrating to OpenTelemetry (OTel).
Migrating distributed tracing typically requires more orchestration. First, decide on your instrumentation approach. Kloudfuse natively accepts OTLP trace data if you’re using OpenTelemetry (OTel) SDKs or agents. In this case, simply point your OTel Collector (or application exporters) at Kloudfuse’s trace endpoint. In Helm, we configure our otel-values.yaml like this:
|
This sets up an OpenTelemetry Collector daemonset that listens for application-generated spans and metrics, then securely pushes them to Kloudfuse via OTLP–HTTP. You can install it like this:
|
If you were using Elastic APM or another proprietary agent, you’ll need to switch to an OTel-compatible agent for each language. For example, use the OpenTelemetry Python/Go/Java agent instead of Elastic’s. This step ensures your applications emit spans in a format Kloudfuse understands.
Migrating APM Dashboard
With tracing enabled on both systems, start rebuilding your APM dashboards. Anything you had in Elastic APM (service maps, latency histograms, flame graphs, span detail tables) will need to be replicated in Kloudfuse.
Kloudfuse provides a trace-view UI and also integrates with Grafana. It supports a query language called TraceQL for filtering and analyzing spans. You can often import a Grafana dashboard JSON and then tweak queries to point to the Kloudfuse data source. The goal is to have equivalent trace views so engineers can navigate services and drill into request paths just as before.
Adopt OpenTelemetry: Instrument applications with OTel SDKs or agents. Point the OTel Collector or agents to Kloudfuse (Kloudfuse is OTLP-native, so no new proprietary agents are needed).
Replace APM agents: If using Elastic APM or others, swap to OTel-compatible equivalents so you can send trace data to Kloudfuse.
Rebuild APM views: Migrate service maps, latency percentiles, and span tables into Kloudfuse’s UI or Grafana dashboards. Kloudfuse’s TraceQL can recreate custom queries.
Validate with test traces: Generate sample transactions and compare the trace results in ELK vs Kloudfuse. Ensure all spans and attributes match.
After setup, validate tracing end-to-end by triggering known transactions (e.g., loading a web page or running a test job) and ensure the corresponding trace appears in Kloudfuse. The trace graph should display all hops (e.g., calls between microservices, database calls), just as in Elastic APM.
DEM & Continuous Profiling Migration
Let’s expand beyond logs, metrics, and traces to include Digital Experience Monitoring (DEM) and Continuous Profiling in your migration.
Digital Experience Monitoring
Kloudfuse’s DEM integrates Real User Monitoring (RUM) and session replays into the same platform. That means slow page loads, JavaScript errors, or user frustrations captured live can be tied directly to backend metrics, logs, and traces. Here’s how to migrate:
Add the RUM configuration into your Helm
custom-values.yaml(under the RUM or DEM settings). Install or update Kloudfuse via Helm:
|
Insert the Kloudfuse RUM SDK into your frontend code (React, Vue, etc.). It collects view, resource, action, error, and long‑task events.
Deploy and verify events appear in the Kloudfuse RUM dashboard (geographic maps, load times, user frustrations, etc.).
Continuous Profiling
Continuous Profiling operates at the line-level of code execution. Kloudfuse can pull profiling data from running services via pprof endpoints, collecting it in production with minimal overhead. In your Helm custom-values.yaml, enable profiling:
|
Ensure your services expose
/debug/pprof/*endpoints (common in Go, Java, Python).Kloudfuse’s Alloy collector will scrape these endpoints automatically and send the data to the Profiler Server component within the platform.
By default, profiling data is stored locally (PVC ~50 GB). For extended retention, configure S3 or GCS as the backend:
|
This saves profiles in Parquet format for long-term analysis and cost efficiency. For validity, do the following:
Trigger real user interactions (DEM) and ensure sessions, performance metrics, and errors show up in Kloudfuse RUM UI.
Cause workload bursts or code-intensive tasks (profiling) and confirm CPU, memory, and hotspot data appear in the Profiler dashboards.
Dashboards & Alerts Migration
By now, your data is flowing into Kloudfuse. The final step is to migrate the dashboards and alerting logic that your teams depend on.
Dashboards
For dashboards, Kloudfuse provides tooling to import or manually recreate key Kibana and Grafana dashboards. In Grafana, you can simply add Kloudfuse as a data source and import dashboard JSON (you may need to adjust queries for naming differences).
Kloudfuse also has built-in dashboards for common use cases and a community of shared templates. Here’s how to import a single dashboard:
|
To upload a whole directory:
|
Alerts
Alerts and SLOs should be translated next. Any Kibana Watcher alerts or Prometheus alert rules ought to be redefined in Kloudfuse’s alerting engine. Kloudfuse lets you set simple thresholds (e.g., “error rate > 5%”) or define more advanced SLO alerts (e.g., “99.9% of requests should return 200 in the last 30 days”). Make sure to recreate notification channels.
For example, configure Slack or PagerDuty integrations so alerts get sent to the right on-call rotations.
Once everything is in place, take advantage of unified views. One big win with Kloudfuse is that you can now mix logs, metrics, and traces on the same dashboard.
For example, you could build a troubleshooting panel that shows a latency graph (metric), recent error logs (log), and a request trace (trace) side by side. This cross-signal visibility speeds up root-cause hunts.
Best Practices
A few best practices will help the migration run smoothly and deliver the most value once you’re on Kloudfuse:
Leverage open standards: Keep using OpenTelemetry for instrumentation, and PromQL or SQL for queries. Kloudfuse is built on these open standards, so this minimizes lock-in.
Consistent tagging: Enforce uniform resource labels (environment, team, service name, region, etc.) across all signals. For example, if your metrics use a label
service="payments", ensure your logs and traces use the same tag. Consistent tags make filtering and correlating data trivial.Monitor the migration: If you do a dual-run, keep an eye on data volumes and counts. Continuously compare the number of log lines and metric datapoints ingested by ELK vs Kloudfuse for the same interval. Aim for >99% parity before switching off the old pipeline.
Optimize as you go: Use Kloudfuse’s schema-on-ingest and fingerprinting features to reduce storage. For example, Kloudfuse can auto-deduplicate repetitive log messages. Actively drop or aggregate unneeded fields if you see spikes in storage
Train the team: Make sure everyone is comfortable with Kloudfuse’s query languages and UI. Many teams can reuse PromQL or Grafana, but consider a quick workshop on any new features (e.g., TraceQL or the log-facet interface).
Conclusion
Migrating from a DIY ELK stack to Kloudfuse consolidates your entire observability pipeline into a single platform, eliminating siloed tools and surprising usage fees. In practice, this means one place to search logs, one place to graph metrics, and one place to follow traces. Kloudfuse’s open, OTLP-based architecture makes onboarding relatively painless. You keep your existing agents and often your same dashboards.
The payoff goes beyond simplicity. With a unified observability data lake, teams gain powerful cross-signal analytics. For example, you might automatically extract log facets (thanks to Kloudfuse fingerprinting) and then correlate a slow trace with matching error logs in one query. This rich context cuts mean-time-to-repair.

