Generated banner for Verify Ssi
Generated logo for Verify Ssi

Verify Ssi

DatadogOfficialCreated by datadog-labs

  • Skill
  • Review and audit
  • Cloud and DevOps
  • MIT
  • Low risk

From the author

Verify Single Step Instrumentation (SSI) is working end-to-end on Kubernetes — SSI automatically instruments applications for APM without code changes. Only use after enable-ssi has run.
— the description by datadog-labs

AutoGineer summary

Written by AutoGineer from the skill’s own files, not by the author

This skill provides a systematic verification process to ensure that Single Step Instrumentation (SSI) is correctly configured and operational within a Kubernetes cluster. It validates that init containers are properly injected, the tracer is successfully reporting telemetry to the Datadog platform, and that specific tracer configurations are correctly applied to application pods. It is intended for use immediately following the initial SSI setup to confirm successful deployment.

What it does

  • Verifies the presence of Datadog SSI init containers in Kubernetes pods.
  • Checks if the application service is correctly reporting traces to Datadog.
  • Validates that custom tracer configurations are correctly applied as environment variables.
  • Automates traffic generation to verify telemetry reporting for inactive services.
  • Provides a clear path to troubleshooting if verification steps fail.
  • Automatically transitions to an onboarding summary upon successful verification.

When to use it

  • Immediately after running the enable-ssi skill.
  • When you need to confirm that pods are being instrumented without code changes.
  • To verify that the tracer is active and reporting telemetry for a specific service.
  • To audit whether custom tracer configurations have reached the target application pods.

Advantages

  • Ensures end-to-end visibility into the SSI instrumentation process.
  • Reduces manual effort by automating pod inspection and traffic generation.
  • Provides clear diagnostic feedback for configuration mismatches.
  • Standardizes the verification workflow across different services and environments.

Usage examples

“Verify that my SSI setup is working for the order-service in the production namespace.”
The agent will inspect the pod's init containers, check the Datadog service list for active traces, and confirm that all environment-based configurations are correctly applied.
“Is my application being instrumented by SSI correctly?”
The agent will guide you through the verification steps, checking for the necessary init containers and confirming telemetry reporting.

Install

  1. Download the skill as a ZIP:

    https://mp-staging.autogineer.com/agent-skills/datadog-labs/verify-ssi-vnma/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip verify-ssi.zip -d .agents/skills

Documentation by datadog-labs

Verify APM SSI on Kubernetes

Before doing anything else: Fully resolve all variables in ## Context to resolve before acting. Do not begin Step 1 until every variable has a concrete value.

Triggers

Invoke this skill when the user expresses intent to:

  • Confirm SSI is working after enabling APM

  • Check whether pods are being instrumented

  • Verify the tracer is running and reporting telemetry

  • Confirm tracer config is applied correctly

Do NOT invoke this skill if:

  • SSI has not been enabled yet — run enable-ssi first

  • Pods are not being instrumented at all — use troubleshoot-ssi


Prerequisites

  • [ ] enable-ssi is complete

  • [ ] Application pods have been restarted since SSI was enabled

pup-cli: check, install, and authenticate
Claude runs
pup --version

If not found:

Claude runs
brew tap datadog-labs/pack
brew install datadog-labs/pack/pup

Check auth:

pup auth status --site <DD_SITE>

If not authenticated:

Claude runs
pup auth login --site <DD_SITE>

This opens a browser tab for OAuth. Complete the login there — Claude will continue once the command exits.

If valid token — proceed. ERROR: No browser available — use API key fallback: export DD_APP_KEY=<your-app-key>


Context to resolve before acting

VariableHow to resolve
CLUSTER_NAMECheck spec.global.clusterName in datadog-agent.yaml, or kubectl config current-context
ENVCheck tags.datadoghq.com/env label on the application Deployment
SERVICE_NAMECheck tags.datadoghq.com/service label on the application Deployment

Step 1: Confirm Pods are Instrumented

Claude runs
kubectl get pod -l app=<APP_LABEL> -n <APP_NAMESPACE> \
  -o jsonpath='{.items[0].spec.initContainers[*].name}'

If the output includes datadog-lib-<language>-init and datadog-init-apm-inject — SSI init containers are injected.

ERROR: Init containers missing — pod was not restarted after SSI was enabled, or namespace targeting is not matching. Restart the pod and recheck.


Step 2: Confirm the Tracer is Reporting Telemetry

Claude runs
DD_SITE=<DD_SITE> pup apm services list --env <ENV> --from 1h

If <SERVICE_NAME> appears in the services list with isTraced: true — continue to Step 3.

ERROR: Service missing — send some traffic to the app first, then retry:

Claude runs
# Port-forward and send test traffic
kubectl port-forward deployment/<DEPLOYMENT_NAME> 8099:8000 -n <APP_NAMESPACE> &
sleep 2 && for i in $(seq 1 10); do curl -s -o /dev/null http://localhost:8099/; done
sleep 30 && kill %1 2>/dev/null
DD_SITE=<DD_SITE> pup apm services list --env <ENV> --from 10m

ERROR: Still missing after traffic — check the agent's trace receiver: kubectl exec -n <AGENT_NAMESPACE> <AGENT_POD> -c agent -- agent status | grep -A 10 "Receiver (previous minute)". If receiver shows 0 traces, go to troubleshoot-ssi.


Step 3: Confirm Tracer Configuration

Only run this step if ddTraceConfigs was explicitly configured in enable-ssi (e.g. profiling, AppSec, Data Streams). If basic SSI was set up without ddTraceConfigs, skip this step. No ddTraceConfigs means there is nothing to check.

The pod spec is the source of truth for whether ddTraceConfigs reached the workload. SSI adds each entry as an env var on the pod's containers.

Run this for a pod in each target that has ddTraceConfigs. For Data Streams, run it once per Deployment in DSM_SERVICES, in that Deployment's namespace, with <LABEL_KEY> set to DSM_LABEL_KEY and <APP_LABEL> to that Deployment's value (both from enable-dsm). Otherwise <LABEL_KEY> is app. A pod matched only by a target without ddTraceConfigs (such as the catch-all default target) should not carry these variables. That is expected, not a failure.

Claude runs
kubectl get pod -l <LABEL_KEY>=<APP_LABEL> -n <APP_NAMESPACE> --sort-by=.metadata.creationTimestamp \
  -o jsonpath='{range .items[-1:].spec.containers[*]}{.name}{":"}{"\n"}{range .env[*]}{"  "}{.name}={.value}{.valueFrom}{"\n"}{end}{end}' | grep -E '^[^ ].*:$|^  DD_'

To see which target the pod matched:

kubectl get pod -l <LABEL_KEY>=<APP_LABEL> -n <APP_NAMESPACE> --sort-by=.metadata.creationTimestamp \
  -o jsonpath='{.items[-1:].metadata.annotations.internal\.apm\.datadoghq\.com/applied-target}'

If every ddTraceConfigs variable for that target appears in the application container with the configured value, the config reached the pod. This confirms delivery, not that the SDK acted on it; onboarding-summary checks the product data. Continue.

ERROR: A variable is missing or has a different value.

  • Different value: the Deployment sets that variable itself, and SSI never overwrites an existing variable. Remove it from the Deployment or align it.

  • Missing: check it is present in the DatadogAgent manifest under the target that matches this pod, and that the pod was restarted after the Cluster Agent finished rolling out.

Then check what the tracer reports at runtime. This output is informational; do not fail Step 3 on it.

Claude runs
pup apm service-library-config get \
  --service-name <SERVICE_NAME> \
  --env <ENV>

This view does not list every setting for every SDK. For example, DD_DATA_STREAMS_ENABLED does not show for Java, Python, Ruby, or Go services even when DSM is on. A setting missing here is not a failure when it is present in the pod env. For Data Streams, onboarding-summary confirms data with data_streams.latency (or enable-dsm Step 3 when it was run standalone).


Done

Exit when ALL of the following are true:

  • [ ] Step 1: target pods have SSI init containers injected (datadog-lib-<language>-init and datadog-init-apm-inject)

  • [ ] Step 2: service appears in pup apm services list with isTraced: true

  • [ ] Step 3 (only if ddTraceConfigs was set): each ddTraceConfigs variable appears in the env of pods in its target with the configured value. A setting missing from pup apm service-library-config get is not a failure

If any check fails, go to troubleshoot-ssi.

When all steps pass, automatically proceed to onboarding-summary now — do not ask the user for permission.


Security constraints

  • Never write a raw API key into any file or chat message

  • Never run kubectl delete without user confirmation

Files

Requirements and compatibility

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta

“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.

Needs: Needs network access, Needs an API key, Needs a command-line tool

Security

What our scanner noticed· Low risk

  • Phrasing that asks for actions without confirmation

A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.

Attribution and licence

Created by
datadog-labs
Publisher
Datadog (Official)
Source
datadog-labs/agent-skills · dd-apm/k8s-ssi/verify-ssi · commit 8e1306a
Licence
MIT License (redistribution allowed)
  • LICENSE (added by AutoGineer from LICENSE)
  • ATTRIBUTION.md (written by AutoGineer)
Synced

AutoGineer is not affiliated with or endorsed by datadog-labs or Datadog.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download verify-ssi.zip