Advanced 2-4 hours

Migrate from Dynatrace to TraceKit

Replace Dynatrace OneAgent with TraceKit's SDK-based approach. No per-host licensing, no DDU calculations -- flat-rate pricing with full trace visibility.

Start Free
1

Remove OneAgent and Plan SDK Integration

Dynatrace uses an agent-based model (OneAgent) installed on each host. TraceKit uses lightweight SDK libraries embedded in your application code. Plan which services to migrate first, starting with the least critical.

CategoryDynatraceTraceKitNotes
DeploymentOneAgent (host-level installer)TraceKit SDK (application dependency)No host-level agent required
DeploymentActiveGate (cluster component)(not needed)No gateway component; SDK sends direct to cloud
DeploymentDT_TENANT (SaaS tenant URL)TRACEKIT_ENDPOINTSingle endpoint for all ingestion
2

Install TraceKit SDK Packages

Add TraceKit SDK to each service. Unlike OneAgent's automatic discovery, TraceKit uses explicit instrumentation for precise control over what gets traced.

CategoryDynatraceTraceKitNotes
PackageOneAgent auto-instrumentationgithub.com/tracekit/go-sdk (Go)Explicit SDK installation per service
PackageOneAgent auto-instrumentation@tracekit/node-apm (Node.js)npm package with auto-instrumentation hooks
PackageOneAgent auto-instrumentationtracekit-apm (Python)pip package with WSGI/ASGI middleware
3

Map Dynatrace Configuration to TraceKit

Translate Dynatrace environment configuration and OneAgent settings to TraceKit SDK configuration. Dynatrace uses tenant-level config and host groups; TraceKit uses per-service configuration.

CategoryDynatraceTraceKitNotes
AuthenticationDT_API_TOKEN (API v2 token)TRACEKIT_API_KEYSingle API key for all operations
Service IdentityDT_CUSTOM_PROP (host-level properties)TRACEKIT_TAGSService-level tags instead of host properties
Service IdentityDT_TAGS (host tags)TRACEKIT_TAGSBoth map to key=value tag pairs
Service IdentityDT_CLUSTER_IDTRACEKIT_SERVICE_NAMECluster grouping maps to service name
NetworkDT_NETWORK_ZONETRACEKIT_ENDPOINTUse region-specific endpoint URL
4

Replace PurePath Instrumentation with Spans

Dynatrace PurePaths are automatically captured end-to-end transactions. In TraceKit, you create explicit spans that link via context propagation. For custom services and request attributes, replace Dynatrace SDK calls.

CategoryDynatraceTraceKitNotes
TracingPurePath (automatic)tracekit.StartSpan(ctx, name)Explicit span creation with context propagation
TracingOneAgent SDK createTracer()tracekit.StartSpan(ctx, name)Custom tracer creation maps to span creation
AttributesaddCustomRequestAttribute(key, val)span.SetAttribute(key, val)Request attributes become span attributes
Errorsoneagentsdk.addCustomErrorInfo()span.RecordError(err)Error info attached to spans
5

Migrate Custom Services and Request Attributes

In Dynatrace, custom services are defined through rules in the UI or via OneAgent SDK. In TraceKit, services are identified by the TRACEKIT_SERVICE_NAME and custom attributes on spans.

CategoryDynatraceTraceKitNotes
ServicesCustom Service detection rules (UI)TRACEKIT_SERVICE_NAME per deploymentEach microservice sets its own service name
ServicesRequest Attribute rules (UI)span.SetAttribute() in codeAttributes set in code, not UI rules
ServicesCalculated service metricsTraceKit Dashboard metricsAutomatic latency/error rate metrics per service
6

Verify Traces and Update Alerting

Deploy the migrated services, generate traffic, and verify traces in TraceKit. Recreate Dynatrace problem detection rules as TraceKit alerts. Note that Davis AI anomaly detection does not have a direct equivalent -- you will set explicit threshold-based alerts.

CategoryDynatraceTraceKitNotes
VerificationDynatrace > PurePathsTraceKit Dashboard > TracesVerify end-to-end trace capture
VerificationDynatrace > Smartscape topologyTraceKit Service MapVerify service dependency mapping
AlertingDavis AI problem detectionTraceKit Alerts (threshold-based)Set explicit P95/error rate thresholds

Code Examples

Before (Dynatrace)

// Dynatrace: OneAgent auto-instruments Go applications
// No code changes needed for basic tracing
// For custom spans, use the OneAgent SDK:
import "github.com/Dynatrace/OneAgent-SDK-for-Go/onesdk"

func processOrder(ctx context.Context) {
    tracer := onesdk.CreateTracer()
    tracer.Start()
    defer tracer.End()

    tracer.AddCustomRequestAttribute("order.type", "premium")
    // ... business logic
}

After (TraceKit)

import "github.com/tracekit/go-sdk/tracekit"

func main() {
    tracekit.Init("tk_your_api_key",
        tracekit.WithService("order-service"),
        tracekit.WithEnvironment("production"),
    )
    defer tracekit.Shutdown(context.Background())
}

func processOrder(ctx context.Context) {
    ctx, span := tracekit.StartSpan(ctx, "process-order")
    defer span.End()

    span.SetAttribute("order.type", "premium")
    // ... business logic
}

Before (Dynatrace)

// Dynatrace: OneAgent auto-instruments Node.js
// Require the agent at the top of your entry file:
require('@dynatrace/oneagent-sdk');

const sdk = require('@dynatrace/oneagent-sdk').createInstance();
const tracer = sdk.traceIncomingRemoteCall({
  serviceMethod: 'processOrder',
  serviceName: 'OrderService',
  serviceEndpoint: '/api/orders',
});

tracer.start(() => {
  tracer.addCustomRequestAttribute('order.type', 'premium');
  // ... business logic
  tracer.end();
});

After (TraceKit)

const tracekit = require('@tracekit/node-apm');

tracekit.init({
  apiKey: 'tk_your_api_key',
  service: 'order-service',
  environment: 'production',
});

const span = tracekit.startSpan('processOrder');
span.setAttribute('order.type', 'premium');
// ... business logic
span.end();

Before (Dynatrace)

# Dynatrace: OneAgent auto-instruments Python
# Install OneAgent on the host, then use SDK for custom spans:
import oneagent

sdk = oneagent.get_sdk()

with sdk.trace_incoming_remote_call(
    'process_order', 'OrderService', '/api/orders'
) as tracer:
    sdk.add_custom_request_attribute('order.type', 'premium')
    # ... business logic

After (TraceKit)

import tracekit

tracekit.init(
    api_key='tk_your_api_key',
    service='order-service',
    environment='production',
)

with tracekit.start_span('process-order') as span:
    span.set_attribute('order.type', 'premium')
    # ... business logic

Ready to migrate?

Start your free TraceKit account and follow this guide to migrate from Dynatrace in 2-4 hours.

Start Free Migration