Skills
Skill 65 of 69
Set up Datadog Continuous Profiler for a service in the local repository.
5 minutes · 1,023 words · 10 sections
Install
npx skills add datadog-labs/agent-skills --skill dd-profiler-setupnpx skills add datadog-labs/agent-skills/plugin marketplace add datadog-labs/agent-skillsThe first command installs just this skill, by the name in its SKILL.md; the second installs the whole repository.
Enable Continuous Profiler for one service in the current repository. The profiler ships inside the Datadog SDK (tracer) for each language. It is not enabled by default when APM is installed; it must be turned on explicitly.
Do not instrument other products (logs, RUM, LLM Observability) and do not change tracing configuration beyond what profiling needs.
Optional, taken from the user’s request (for example “set up the profiler for my Java service”):
| Input | Values | Effect |
|---|---|---|
language | java, python, go, ruby, nodejs, dotnet, php | Skips language detection and loads that language’s reference file in Step 4. Still verify against project files and warn if they disagree. |
runtime | Java: jvm (default) or graalvm. .NET: linux, windows, iis, azure-app-service, nuget. Any language: ssi, kubernetes, docker, host for the deployment target | Selects the install and enablement variant instead of inferring it. |
When neither is given, detect them in Step 1. When the repo contains several languages, ask which service to profile.
Resolve these from the repo. Ask the user only for what cannot be found.
| Variable | How to find it |
|---|---|
LANGUAGE / runtime version (skip if given as an input) | pom.xml, build.gradle*, requirements.txt, pyproject.toml, go.mod, Gemfile, package.json, *.csproj, composer.json |
SERVICE_NAME | Existing DD_SERVICE / -Ddd.service / service: tag; otherwise the app or repo name. Confirm with the user. |
ENV | Existing DD_ENV; otherwise ask (for example staging, prod). |
DEPLOYMENT | Dockerfile, docker-compose*.yml, Kubernetes manifests or Helm values, systemd units, Procfile, serverless config |
| Existing Datadog setup | Search for ddtrace, dd-java-agent, dd-trace, dd-trace-go, datadog gem, Datadog.Trace, datadog-setup.php, DD_AGENT_HOST, DD_PROFILING_ENABLED |
AGENT | Whether a Datadog Agent is reachable (see Step 2) |
APP_URL | The Datadog web app URL for the user’s site. Take DD_SITE from the repo or environment (for example datadoghq.eu) and map it with the Datadog sites table (opens in a new tab) (US1 https://app.datadoghq.com, EU1 https://app.datadoghq.eu, US3 https://us3.datadoghq.com, and so on). If the site is unknown, ask the user. Never assume US1. |
If the repo contains several services, ask which one to profile.
Unsupported targets. Stop and tell the user if:
Runtime minimums.
| Language | Minimum runtime | Notes |
|---|---|---|
| Java | JDK 8+ (Linux: 8u352+, 11.0.17+, 17.0.5+, 21+ for OpenJDK) | JDK 11+ recommended for allocation and live heap profiles |
| Python | 2.7+ (3.6+ recommended) | Needs pip 18+ |
| Go | One of the latest two major Go releases | |
| Ruby | 2.5+ (3.2.3+ recommended) | |
| Node.js | 18+ | |
| .NET | .NET Core 2.1+, .NET 5+, .NET Framework 4.6.1+ | .NET 7+ recommended |
| PHP | 7.1+ on 64-bit Linux | PHP debug builds unsupported; Alpine needs 3.13+ and apk add libgcc |
C, C++, and Rust use the ddprof profiler and are out of scope for this skill; point to https://docs.datadoghq.com/profiler/enabling/?prog_lang=c (opens in a new tab).
Datadog Agent. The profiler sends data to a Datadog Agent (v7+ recommended, v6+ supported) with APM enabled, which listens on port 8126 by default. Check how the service reaches the Agent (DD_AGENT_HOST, Kubernetes Agent DaemonSet, sidecar, host Agent). If no Agent is configured anywhere, tell the user an Agent is required and link <APP_URL>/account/settings/agent/latest. Do not install the Agent unless the user asks.
DD_PROFILING_ENABLED=auto set on the installation (host: next to DD_APM_INSTRUMENTATION_ENABLED in the install command; Helm: datadog.profiling.enabled: auto, chart 3.71.0+, Agent 7.57.0+; Operator: DD_ADMISSION_CONTROLLER_AUTO_INSTRUMENTATION_PROFILING_ENABLED=auto on the Cluster Agent). This is a Preview feature. See https://docs.datadoghq.com/profiler/enabling/ssi/ (opens in a new tab). Per-process, DD_PROFILING_ENABLED=true also works. Running processes are not affected until restarted. For systemd services on a host, add EnvironmentFile=/etc/environment to the unit.Show the user the planned file changes and get a yes before editing anything.
Set DD_SERVICE, DD_ENV, and DD_VERSION on every service so profiles link to traces and deployments. Use the project’s existing mechanism for environment variables (Dockerfile ENV, compose, manifests, .env files already used by the app, systemd unit).
Read only the reference file for the detected language and follow it. Do not proceed from memory.
| Language | Reference |
|---|---|
| Java | references/java.md |
| Python | references/python.md |
| Go | references/go.md |
| Ruby | references/ruby.md |
| Node.js | references/nodejs.md |
| .NET | references/dotnet.md |
| PHP | references/php.md |
Offer, do not apply without asking:
<APP_URL>/profiling filtered by service:<SERVICE_NAME> env:<ENV>.pup or Datadog MCP tools are available, check that profiles exist for the service. Otherwise ask the user to confirm in the UI.DD_PROFILING_ENABLED is present in the running process’s environment (not just in the repo).DD_TRACE_DEBUG=true, then search for profiler errors).End with a summary: service, env, files changed, settings added, anything the user must still do (deploy, restart, Agent setup), and the profiling link to check.
Set up Datadog Continuous Profiler for a service in the local repository. Detect the language, runtime, and how the service is deployed, check the Datadog Agent and SDK prerequisites, add the profiler dependency and enablement settings (Java, Python, Go, Ruby, Node.js, .NET, PHP), and verify profiles arrive. Use when asked to enable, set up, install, configure, or turn on Datadog profiling or the Continuous Profiler, or when profiles are missing after setup.
The verbatim description from this skill’s front matter — the string an agent matches on to decide whether to load it.
main, last pushed 6 November 2026.SKILL.md, not by matching a directory convention. 11 distinct layouts observed: agent-observability/*/SKILL.md, */SKILL.md, dd-android-sdk/*/SKILL.md, dd-apm/*/SKILL.md, dd-apm/k8s-ssi/*/SKILL.md, dd-apm/linux-ssi/*/SKILL.md, dd-apps/*/SKILL.md, dd-audit/*/SKILL.md, dd-browser-sdk/*/SKILL.md, dd-security/csm/*/SKILL.md, dd-software-delivery/*/SKILL.md.h1 and no skipped levels:.claude-plugin/marketplace.json by datadog-labs, declaring 1 plugin. It is read for editorial metadata only — never as the skill index, which is always the repository tree./datadog-labs/agent-skills.md, and each skill at its own .md URL.7 files · 7 KB
Everything this skill ships beside its prose. All of it is set here, as subchapters of skill 65.
Documentation the agent loads on demand, rather than up front.