{"id":58568,"date":"2026-01-26T02:13:50","date_gmt":"2026-01-26T02:13:50","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=58568"},"modified":"2026-01-26T02:13:50","modified_gmt":"2026-01-26T02:13:50","slug":"datadog-single-step-apm-instrumentation-ssi-vs-universal-service-monitoring-usm","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/datadog-single-step-apm-instrumentation-ssi-vs-universal-service-monitoring-usm\/","title":{"rendered":"Datadog: Single Step APM Instrumentation (SSI) VS Universal Service Monitoring (USM)"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Major difference (SSI vs USM)<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Single Step APM Instrumentation (SSI)<\/strong>: <strong>in-process APM<\/strong>. Datadog Agent <strong>loads Datadog APM language SDKs into supported processes<\/strong> to enable <strong>distributed tracing<\/strong> \u201cwithout requiring code changes.\u201d (<a href=\"https:\/\/docs.datadoghq.com\/tracing\/trace_collection\/single-step-apm\/\">Datadog Monitoring<\/a>)<\/li>\n\n\n\n<li><strong>Universal Service Monitoring (USM)<\/strong>: <strong>service health metrics for uninstrumented services<\/strong>. USM provides visibility \u201cwithout having to instrument your code,\u201d relying on a <strong>configured Datadog Agent + Unified Service Tagging<\/strong>, and brings performance data into <strong>Software Catalog and Service Map<\/strong>. (<a href=\"https:\/\/docs.datadoghq.com\/universal_service_monitoring\/\">Datadog Monitoring<\/a>)<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Datadog Single Step APM Instrumentation (SSI)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">What you get (when it fits)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Distributed traces<\/strong> collected by loading the <strong>Datadog SDK into supported processes<\/strong>, with <strong>no code changes required<\/strong>. (<a href=\"https:\/\/docs.datadoghq.com\/tracing\/trace_collection\/single-step-apm\/\">Datadog Monitoring<\/a>)<\/li>\n\n\n\n<li>Designed to reduce onboarding by <strong>automatically installing Datadog SDKs<\/strong> with \u201cno additional configuration required.\u201d (<a href=\"https:\/\/docs.datadoghq.com\/tracing\/trace_collection\/single-step-apm\/\">Datadog Monitoring<\/a>)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Use cases<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You want <strong>APM distributed tracing quickly<\/strong> across services in supported languages\/environments, <strong>without adding SDKs in code<\/strong>. (<a href=\"https:\/\/docs.datadoghq.com\/tracing\/trace_collection\/single-step-apm\/\">Datadog Monitoring<\/a>)<\/li>\n\n\n\n<li>You\u2019re running on supported environments like <strong>Linux hosts<\/strong>, <strong>containers (Kubernetes\/Docker)<\/strong>, or <strong>.NET apps in Windows IIS<\/strong>, and want auto-instrumentation without changing app dependencies\/images. (<a href=\"https:\/\/docs.datadoghq.com\/tracing\/trace_collection\/single-step-apm\/troubleshooting\/\">Datadog Monitoring<\/a>)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Not-fit scenarios (from Datadog docs)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If your app already has <strong>custom instrumentation code<\/strong>: SSI requires removing it; <strong>SSI is automatically disabled if custom instrumentation is detected<\/strong>. (<a href=\"https:\/\/docs.datadoghq.com\/tracing\/trace_collection\/single-step-apm\/\">Datadog Monitoring<\/a>)<\/li>\n\n\n\n<li><strong>ECS Fargate is not supported<\/strong>. (<a href=\"https:\/\/docs.datadoghq.com\/tracing\/trace_collection\/single-step-apm\/compatibility\/?tab=linuxhost\">Datadog Monitoring<\/a>)<\/li>\n\n\n\n<li><strong>Hardened SELinux environments are not supported<\/strong> (listed under limitations). (<a href=\"https:\/\/docs.datadoghq.com\/tracing\/trace_collection\/single-step-apm\/compatibility\/?tab=linuxhost\">Datadog Monitoring<\/a>)<\/li>\n\n\n\n<li><strong>Very small VM instances<\/strong> (example <code>t2.micro<\/code>) can hit timeouts; Datadog recommends a larger instance type. (<a href=\"https:\/\/docs.datadoghq.com\/tracing\/trace_collection\/single-step-apm\/compatibility\/?tab=linuxhost\">Datadog Monitoring<\/a>)<\/li>\n\n\n\n<li>Kubernetes gotcha: SSI <strong>does not instrument applications in the namespace where the Datadog Agent is installed<\/strong>. (<a href=\"https:\/\/docs.datadoghq.com\/tracing\/trace_collection\/single-step-apm\/kubernetes\/?tab=agentv764recommended\">Datadog Monitoring<\/a>)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">High-level implementation steps<\/h3>\n\n\n\n<p><strong>Common prerequisites<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Remove any custom instrumentation code and restart<\/strong> the app. (<a href=\"https:\/\/docs.datadoghq.com\/tracing\/trace_collection\/single-step-apm\/\">Datadog Monitoring<\/a>)<\/li>\n\n\n\n<li><strong>Confirm compatibility<\/strong> (languages \/ OS \/ architecture) in the SSI compatibility guide. (<a href=\"https:\/\/docs.datadoghq.com\/tracing\/trace_collection\/single-step-apm\/\">Datadog Monitoring<\/a>)<\/li>\n<\/ol>\n\n\n\n<p><strong>Linux host \/ VM (high level)<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>In Datadog\u2019s Linux Agent install flow, turn on <strong>APM Instrumentation<\/strong>. (<a href=\"https:\/\/docs.datadoghq.com\/tracing\/trace_collection\/single-step-apm\/linux\/\">Datadog Monitoring<\/a>)<\/li>\n\n\n\n<li><strong>Install the Datadog Agent<\/strong> using the provided command. (<a href=\"https:\/\/docs.datadoghq.com\/tracing\/trace_collection\/single-step-apm\/linux\/\">Datadog Monitoring<\/a>)<\/li>\n\n\n\n<li><strong>Restart your applications<\/strong>. (<a href=\"https:\/\/docs.datadoghq.com\/tracing\/trace_collection\/single-step-apm\/linux\/\">Datadog Monitoring<\/a>)<\/li>\n<\/ol>\n\n\n\n<p><strong>Kubernetes (high level)<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Install the Agent in a <strong>separate namespace<\/strong> (SSI won\u2019t instrument apps in the Agent namespace). (<a href=\"https:\/\/docs.datadoghq.com\/tracing\/trace_collection\/single-step-apm\/kubernetes\/?tab=agentv764recommended\">Datadog Monitoring<\/a>)<\/li>\n\n\n\n<li>Follow Datadog\u2019s Kubernetes Agent install flow (Helm\/Operator), and turn on <strong>APM Instrumentation<\/strong>. (<a href=\"https:\/\/docs.datadoghq.com\/tracing\/trace_collection\/single-step-apm\/kubernetes\/?tab=agentv764recommended\">Datadog Monitoring<\/a>)<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Supported platforms (what Datadog explicitly states)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Works for apps on <strong>Linux hosts<\/strong>, <strong>containers such as Kubernetes and Docker<\/strong>, and <strong>.NET applications served by Windows IIS<\/strong>. (<a href=\"https:\/\/docs.datadoghq.com\/tracing\/trace_collection\/single-step-apm\/troubleshooting\/\">Datadog Monitoring<\/a>)<\/li>\n\n\n\n<li><strong>Supported languages (SSI)<\/strong> include: <strong>Java, Python, Ruby, Node.js, .NET, PHP<\/strong>. (<a href=\"https:\/\/docs.datadoghq.com\/tracing\/trace_collection\/single-step-apm\/compatibility\/?tab=linuxhost\">Datadog Monitoring<\/a>)<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Datadog Universal Service Monitoring (USM)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">What you get (when it fits)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Visibility into service health metrics<\/strong> across your stack <strong>without instrumenting your code<\/strong>. (<a href=\"https:\/\/docs.datadoghq.com\/universal_service_monitoring\/\">Datadog Monitoring<\/a>)<\/li>\n\n\n\n<li>Depends on <strong>Datadog Agent + Unified Service Tagging<\/strong> and shows performance data for <strong>uninstrumented services<\/strong> in places like <strong>Software Catalog and Service Map<\/strong>. (<a href=\"https:\/\/docs.datadoghq.com\/universal_service_monitoring\/\">Datadog Monitoring<\/a>)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Use cases<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You want broad <strong>service health visibility for services that don\u2019t (yet) have APM libraries<\/strong>, and you still want them represented in <strong>Service Map \/ Software Catalog<\/strong> views. (<a href=\"https:\/\/docs.datadoghq.com\/universal_service_monitoring\/\">Datadog Monitoring<\/a>)<\/li>\n\n\n\n<li>You want monitoring that <strong>does not require installing tracing libraries<\/strong>. (<a href=\"https:\/\/docs.datadoghq.com\/universal_service_monitoring\/setup\/?tab=docker\">Datadog Monitoring<\/a>)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Not-fit scenarios (from Datadog docs)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>USM <strong>requires Datadog system-probe<\/strong> and is <strong>not supported on GKE Autopilot<\/strong>. (<a href=\"https:\/\/docs.datadoghq.com\/universal_service_monitoring\/setup\/?tab=docker\">Datadog Monitoring<\/a>)<\/li>\n\n\n\n<li>Platform constraints:\n<ul class=\"wp-block-list\">\n<li>Linux: <strong>Kernel 4.14+<\/strong>, and (for containerized) <strong>CentOS\/RHEL 8.0+<\/strong>. (<a href=\"https:\/\/docs.datadoghq.com\/universal_service_monitoring\/setup\/?tab=docker\">Datadog Monitoring<\/a>)<\/li>\n\n\n\n<li>Windows: <strong>Windows 2012 R2+<\/strong>. (<a href=\"https:\/\/docs.datadoghq.com\/universal_service_monitoring\/setup\/?tab=docker\">Datadog Monitoring<\/a>)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Protocol scope: supported application-layer protocols listed are <strong>HTTP<\/strong> and <strong>HTTPS (OpenSSL)<\/strong>. (<a href=\"https:\/\/docs.datadoghq.com\/universal_service_monitoring\/setup\/?tab=docker\">Datadog Monitoring<\/a>)<\/li>\n\n\n\n<li>Service-name detection caveat: USM reads environment variables <strong>as they exist when a process starts<\/strong> (Linux <code>\/proc\/PID\/environ<\/code>, or Windows APIs). Changes after start may not be seen. (<a href=\"https:\/\/docs.datadoghq.com\/universal_service_monitoring\/setup\/?tab=docker\">Datadog Monitoring<\/a>)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">High-level implementation steps<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Ensure your <strong>Datadog Agent version meets requirements<\/strong> (containerized services: <strong>Agent 6.40+ or 7.40+<\/strong>, with some preview features requiring higher). (<a href=\"https:\/\/docs.datadoghq.com\/universal_service_monitoring\/setup\/?tab=docker\">Datadog Monitoring<\/a>)<\/li>\n\n\n\n<li>Meet prerequisites:\n<ul class=\"wp-block-list\">\n<li>Linux: service running <strong>in a container<\/strong> (non-containerized Linux is documented as <strong>Preview<\/strong>). (<a href=\"https:\/\/docs.datadoghq.com\/universal_service_monitoring\/setup\/?tab=docker\">Datadog Monitoring<\/a>)<\/li>\n\n\n\n<li>Windows: service running on a <strong>virtual machine<\/strong>. (<a href=\"https:\/\/docs.datadoghq.com\/universal_service_monitoring\/setup\/?tab=docker\">Datadog Monitoring<\/a>)<\/li>\n\n\n\n<li>Tracing library <strong>not required<\/strong>. (<a href=\"https:\/\/docs.datadoghq.com\/universal_service_monitoring\/setup\/?tab=docker\">Datadog Monitoring<\/a>)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Apply <strong>Unified Service Tagging<\/strong> at least for <code>env<\/code> (service\/version optional), and ensure env vars are set <strong>before the process starts<\/strong>. (<a href=\"https:\/\/docs.datadoghq.com\/universal_service_monitoring\/setup\/?tab=docker\">Datadog Monitoring<\/a>)<\/li>\n\n\n\n<li>Enable USM in the Agent (examples shown in docs include Helm\/Operator toggles and system-probe env vars such as <code>DD_SYSTEM_PROBE_SERVICE_MONITORING_ENABLED=true<\/code>). (<a href=\"https:\/\/docs.datadoghq.com\/universal_service_monitoring\/setup\/?tab=docker\">Datadog Monitoring<\/a>)<\/li>\n\n\n\n<li>For <strong>non-containerized services on Linux (documented as available)<\/strong>: enable in <code>system-probe.yaml<\/code> under <code>service_monitoring_config<\/code> and note <strong>Agent 7.42+<\/strong> requirement. (<a href=\"https:\/\/docs.datadoghq.com\/universal_service_monitoring\/setup\/?tab=docker\">Datadog Monitoring<\/a>)<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Supported platforms (explicit in docs)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Linux<\/strong>: Kernel <strong>4.14+<\/strong>; (containerized) <strong>CentOS\/RHEL 8.0+<\/strong>. (<a href=\"https:\/\/docs.datadoghq.com\/universal_service_monitoring\/setup\/?tab=docker\">Datadog Monitoring<\/a>)<\/li>\n\n\n\n<li><strong>Windows<\/strong>: <strong>2012 R2+<\/strong>. (<a href=\"https:\/\/docs.datadoghq.com\/universal_service_monitoring\/setup\/?tab=docker\">Datadog Monitoring<\/a>)<\/li>\n\n\n\n<li>Requires <code>system-probe<\/code> (with the GKE Autopilot limitation). (<a href=\"https:\/\/docs.datadoghq.com\/universal_service_monitoring\/setup\/?tab=docker\">Datadog Monitoring<\/a>)<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Summary comparison table<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Area<\/th><th>SSI (Single Step APM Instrumentation)<\/th><th>USM (Universal Service Monitoring)<\/th><\/tr><\/thead><tbody><tr><td>Primary outcome<\/td><td><strong>Distributed tracing<\/strong> by loading Datadog SDK into supported processes (no code changes). (<a href=\"https:\/\/docs.datadoghq.com\/tracing\/trace_collection\/single-step-apm\/\">Datadog Monitoring<\/a>)<\/td><td><strong>Service health metrics<\/strong> for uninstrumented services, shown in Software Catalog\/Service Map (no code instrumentation). (<a href=\"https:\/\/docs.datadoghq.com\/universal_service_monitoring\/\">Datadog Monitoring<\/a>)<\/td><\/tr><tr><td>How it works<\/td><td>Agent instruments apps by <strong>loading Datadog APM SDKs<\/strong> into processes. (<a href=\"https:\/\/docs.datadoghq.com\/tracing\/trace_collection\/single-step-apm\/\">Datadog Monitoring<\/a>)<\/td><td>Relies on <strong>Datadog Agent + Unified Service Tagging<\/strong>; requires <strong>system-probe<\/strong>. (<a href=\"https:\/\/docs.datadoghq.com\/universal_service_monitoring\/\">Datadog Monitoring<\/a>)<\/td><\/tr><tr><td>Best fit<\/td><td>You need <strong>full APM traces<\/strong> quickly without adding SDKs in code. (<a href=\"https:\/\/docs.datadoghq.com\/tracing\/trace_collection\/single-step-apm\/\">Datadog Monitoring<\/a>)<\/td><td>You need <strong>broad visibility<\/strong> where you <strong>can\u2019t\/won\u2019t add tracing libraries<\/strong> yet. (<a href=\"https:\/\/docs.datadoghq.com\/universal_service_monitoring\/setup\/?tab=docker\">Datadog Monitoring<\/a>)<\/td><\/tr><tr><td>Not fit (examples)<\/td><td>Custom instrumentation present (SSI disables), <strong>ECS Fargate unsupported<\/strong>, hardened SELinux unsupported, very small VMs may timeout. (<a href=\"https:\/\/docs.datadoghq.com\/tracing\/trace_collection\/single-step-apm\/\">Datadog Monitoring<\/a>)<\/td><td>Requires <code>system-probe<\/code> (not on <strong>GKE Autopilot<\/strong>), limited to stated OS\/kernel\/protocol constraints; env vars must be present at process start. (<a href=\"https:\/\/docs.datadoghq.com\/universal_service_monitoring\/setup\/?tab=docker\">Datadog Monitoring<\/a>)<\/td><\/tr><tr><td>Supported platforms (high level)<\/td><td>Linux hosts, Docker\/Kubernetes containers, Windows IIS for .NET; languages include Java\/Python\/Ruby\/Node.js\/.NET\/PHP. (<a href=\"https:\/\/docs.datadoghq.com\/tracing\/trace_collection\/single-step-apm\/troubleshooting\/\">Datadog Monitoring<\/a>)<\/td><td>Linux kernel 4.14+ (containerized prereq), Windows 2012 R2+; supports HTTP and HTTPS (OpenSSL). (<a href=\"https:\/\/docs.datadoghq.com\/universal_service_monitoring\/setup\/?tab=docker\">Datadog Monitoring<\/a>)<\/td><\/tr><tr><td>High-level enablement<\/td><td>Enable <strong>APM Instrumentation<\/strong> in Agent install\/update; restart apps; follow Linux\/K8s guides. (<a href=\"https:\/\/docs.datadoghq.com\/tracing\/trace_collection\/single-step-apm\/linux\/\">Datadog Monitoring<\/a>)<\/td><td>Ensure Agent version, enable USM in Agent\/system-probe; apply Unified Service Tagging (env required) before process start. (<a href=\"https:\/\/docs.datadoghq.com\/universal_service_monitoring\/setup\/?tab=docker\">Datadog Monitoring<\/a>)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Table takeaways (quick summary)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Choose <strong>SSI<\/strong> when you need <strong>distributed traces\/APM<\/strong> with minimal onboarding and supported runtimes. (<a href=\"https:\/\/docs.datadoghq.com\/tracing\/trace_collection\/single-step-apm\/\">Datadog Monitoring<\/a>)<\/li>\n\n\n\n<li>Choose <strong>USM<\/strong> when you need <strong>code-free service health visibility<\/strong> across uninstrumented services, and your platform supports <code>system-probe<\/code>. (<a href=\"https:\/\/docs.datadoghq.com\/universal_service_monitoring\/\">Datadog Monitoring<\/a>)<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Major difference (SSI vs USM) Datadog Single Step APM Instrumentation (SSI) What you get (when it fits) Use cases Not-fit scenarios (from Datadog docs) High-level implementation steps&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[11138],"tags":[],"class_list":["post-58568","post","type-post","status-publish","format-standard","hentry","category-best-tools"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/58568","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=58568"}],"version-history":[{"count":1,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/58568\/revisions"}],"predecessor-version":[{"id":58569,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/58568\/revisions\/58569"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=58568"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=58568"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=58568"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}