Tarun Kothandaraman
Associate Product Manager
Instrumenting a tech stack for distributed tracing is a complicated process that often takes weeks. For large fleets running services written in multiple languages, the timeline could be months. Every service needs a tracing library added, configured, and redeployed, and that work has to fit into each team’s release schedule.
Datadog’s Single Step Instrumentation (SSI) cuts the time it takes to instrument your applications to send traces to Datadog APM down to minutes. Because of this time savings, we recommend SSI as the default instrumentation option. However, there are still some cases where manual and custom instrumentation may make sense, if SSI can’t reach or see deep enough into a service.
In this post, we’ll cover the distinction between auto-instrumentation and SSI and explain why the latter is our default recommendation for instrumenting your applications to send traces to Datadog APM. Then, we’ll discuss some less common scenarios when manual instrumentation still makes sense, when to add custom instrumentation, and how to determine if your situation fits one of these categories.
Auto-instrumentation vs. SSI
While the terms auto-instrumentation and SSI sometimes get used interchangeably, they describe different things. The rest of this guide will be easier to follow once we distinguish between them.
Auto-instrumentation is a capability of the Datadog tracer. Once the tracer is loaded into an application, it integrates with the libraries already in use—e.g., the web framework, the database client, the cache, and the message queue—and produces spans for them automatically. No tracing code is required from the developer. Every Datadog tracer provides auto-instrumentation by default, regardless of how it was installed.
Single Step Instrumentation is a method for getting the tracer into the application in the first place. Instead of a developer adding the tracer as a build dependency, the Datadog Agent detects supported runtimes on the host and injects the tracer at process startup. The application code and build configuration are untouched. SSI is one of two installation methods; the other is manual instrumentation, where the tracer is added to the application as a dependency.
The tracer that ends up running is the same in either case, and so is the auto-instrumentation it provides. The choice between SSI and manual instrumentation is about installation methods, not tracing approaches.
Why we recommend SSI as the default instrumentation method
When manually instrumenting services to send traces to APM, a developer adds the tracer as a build dependency, configures it, and redeploys the service. For a fleet of hundreds of services across a dozen or more teams, this process could take months, as it has to be coordinated across every team’s roadmap and release calendar.
SSI removes that coordination problem. You install the Datadog Agent with APM Instrumentation enabled, and the Agent detects supported runtimes on the host and injects the tracing library at process startup. Because there are no code changes, build changes, or service-team involvement, the time to first trace across an entire fleet drops from weeks or months to minutes.
The magnitude of this reduction in the time and complexity required to instrument your services for APM is why we recommend SSI in almost all cases.
When to fall back to manual instrumentation
SSI works by injecting a tracing library at process startup. That mechanism has some structural limits that teams may encounter, including:
Go services: Go compiles to statically linked binaries, so there’s nothing for SSI to inject into. In this case, manual instrumentation with
dd-trace-go
is the only path.Unsupported runtime versions: SSI supports a specific range of language versions. If a service runs on something older, SSI will skip it silently.
Platforms without host-level Agent control: SSI needs the Datadog Agent positioned to inject into your processes, which works on Windows, Linux hosts, Docker, and Kubernetes. On platforms like Amazon ECS, you don’t have that control, so SSI can’t operate.
In these scenarios, manual instrumentation remains the fallback method to get your services sending traces to Datadog.
The process for determining if manual instrumentation is needed is simple. First, enable SSI across your fleet. The services that don’t show up in APM are the ones that need manual instrumentation. The only trade-off is that your team owns the tracer’s version and upgrade cadence, instead of the Agent doing it for you.
When to add custom instrumentation
Adding custom instrumentation is a different decision altogether. Here, you’re not choosing between SSI and custom instrumentation; you’re choosing whether to add spans of your own, on top of whichever method you used to get the tracer running.
Auto-instrumentation stops at the framework boundary. Anything happening inside your handler—such as a fraud check, a pricing calculation, or a feature flag lookup—is invisible. From the trace’s perspective, your handler is one opaque span.
Usually, that opacity is not a problem, but there are two situations where it may become one:
A slow endpoint with no detail in the flame graph:
POST /checkout
showing as one long bar tells you something is slow but not what. Wrapping cart validation, fraud check, and inventory reservation in their own spans turns that bar into a flame graph, which gives you a level of detail you can act on.Business context on traces: Adding custom tags like
user.tier
,order.value
, orpromo.code
to your spans lets you ask more targeted questions than you can with auto-instrumentation, such as “Are premium customers seeing higher latency?” or “Is this campaign driving the load spike?”
If business needs require this level of granularity, you can add custom instrumentation to your application code that will enable you to programmatically create or modify traces sent to Datadog. While managing and maintaining additional tracing code comes at some operational cost, it may be worth it for increased precision in your tracing data.
How to decide between SSI and manual or custom instrumentation
Here’s a framework for deciding whether you need to instrument your services manually or add custom instrumentation beyond what SSI offers.
Default to SSI: Use SSI to cover as many of your services as deeply as you can. For most services, you’ll likely be able to stop at this step.
Use manual for the gaps SSI can’t reach: If you have services that use Go, unsupported runtime versions, or ECS, you can fall back to manual instrumentation. You don’t need to predict or resort to guesswork as to where these gaps lie; you’ll be able to determine what’s missing in step 1.
Add custom instrumentation where auto-instrumentation isn’t enough: In cases where business context changes how you need to investigate issues, add custom instrumentation to get more granular visibility into your spans.
SSI is generally available on Linux hosts, Docker, and Kubernetes for Java, Python, Node.js, .NET, Ruby, and PHP, with Windows IIS support GA for .NET. Check out the SSI documentation for detailed setup instructions.
If you’re new to Datadog, sign up for a 14-day free trial.
Facts Only
* Instrumenting a tech stack for distributed tracing can take weeks or months for large fleets.
* Every service needs a tracing library added, configured, and redeployed.
* Datadog’s Single Step Instrumentation (SSI) cuts instrumentation time down to minutes.
* Auto-instrumentation integrates with existing libraries without requiring developer tracing code.
* Single Step Instrumentation is an installation method where the Datadog Agent injects the tracer at process startup, leaving application code untouched.
* The choice between SSI and manual instrumentation relates to installation methods, not tracing approaches.
* Manual instrumentation is required for Go services due to static linking limitations.
* Manual instrumentation may be necessary for unsupported runtime versions.
* SSI requires host-level Agent control, which is limited on platforms like Amazon ECS.
* Custom instrumentation allows adding spans of one's own data onto existing tracing mechanisms.
Executive Summary
Single Step Instrumentation (SSI) reduces the time required to instrument applications for distributed tracing to minutes, which addresses the weeks or months typically needed for manual instrumentation across large fleets. SSI operates by injecting the tracer at process startup using the Datadog Agent, thereby avoiding the coordination overhead associated with manual instrumentation across numerous development teams and release schedules. This recommendation is made because SSI eliminates the multi-month coordination required when manually instrumenting hundreds of services.
Manual instrumentation remains necessary in specific scenarios where SSI cannot achieve deep visibility or reachability. Limitations arise when services use statically linked binaries, run on unsupported runtime versions, or operate on platforms lacking host-level Agent control, such as Amazon ECS. When manual instrumentation is required for these gaps, the team assumes responsibility for managing the tracer's versioning and upgrades.
Custom instrumentation is introduced to add granular business context that automatic instrumentation misses. Auto-instrumentation only captures information up to framework boundaries; adding custom spans allows for capturing specific logic like fraud checks or feature flag lookups. This granularity is valuable when investigating slow endpoints or when correlating performance data with specific business metrics, despite introducing operational costs for maintaining the custom code.
Full Take
The framework presents a clear tension between operational velocity and observability depth. The recommendation of SSI as default reflects an optimization prioritizing systemic efficiency—reducing the coordination burden across large engineering organizations—over absolute, low-level control. This sets up a pattern where ease of deployment incentivizes a path that minimizes team friction, suggesting a paradigm where operational simplicity is weighted higher than granular control for baseline monitoring.
The fallback conditions identified (Go services, unsupported runtimes, platform constraints) reveal inherent structural limits to a generalized solution like SSI. These limitations define the boundary between high-level tooling abstraction and deep system interaction. When these boundaries are hit, the cost shifts from coordination delay to manual maintenance liability for the team. This structure implies an implicit cost/benefit analysis: sacrificing time for automation versus accepting increased operational responsibility for specific edge cases.
The discussion on custom instrumentation points toward a necessary evolution in tracing value beyond simple latency measurement into business causality. The gap between auto-instrumentation (opaque spans) and custom instrumentation (contextualized spans) highlights the divergence between system behavior and actionable business insight. The pattern suggests that real analytical power emerges not just from capturing events, but from structuring those events with relevant semantic context. The central implication is that true cognitive sovereignty requires defining when speed of deployment is sufficient versus when precision demands an intentional deviation from the automated path.
Sentinel — Human
The article functions as a well-structured, technically grounded explanation of instrumentation methods by balancing automated solutions against necessary manual intervention based on specific environmental constraints.
