All skills
datadog-labs avatar

/verify-ssi

@75c9261 official
by Datadog Labsdatadog-labs/agent-skills176 stars
29

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.

Use this Skill: https://skilld.dev/gh/datadog-labs/agent-skills/verify-ssi

This session only. Nothing lands on disk.

SKILL.md

β‰ˆ50 tokens always: the name and description. β‰ˆ1.1k when used: this file.

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 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

Variable How to resolve
CLUSTER_NAME Check spec.global.clusterName in datadog-agent.yaml, or kubectl config current-context
ENV Check tags.datadoghq.com/env label on the application Deployment
SERVICE_NAME Check 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 β€” an empty response here is expected and not a failure.

Claude runs

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

If the output shows expected environment variables matching what was configured in ddTraceConfigs β€” done.

If the output is empty and ddTraceConfigs was not configured β€” expected, not a failure.

ERROR: Config missing but ddTraceConfigs was configured β€” check it is present in the DatadogAgent manifest under the correct target, and that pods were restarted after the config change.


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: tracer config matches what was set in DatadogAgent

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

Source: SKILL.md on GitHub

No alerts16d3 checks Β· Risk SAFE
  • Gen Agent Trust Hub16d

    Error: AI Analysis failed - API error after retries

  • Socket16d

    No alerts

  • Snyk16d

    Risk: LOW Β· No issues

Signed by skilld at 75c9261. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 20 hours ago.

Activeupdated 2 months ago
Other metadata
metadata
{
  "version": "1.0.0",
  "author": "datadog-labs",
  "repository": "https://github.com/datadog-labs/agent-skills",
  "tags": "datadog,apm,kubernetes,ssi,verification,instrumentation",
  "alwaysApply": "false"
}
  • datadog
  • apm
  • kubernetes
  • ssi
  • instrumentation
  • verification
  • observability
  • tracing

README badge

README badge for datadog-labs/agent-skills/verify-ssi

Verifies that Datadog Single Step Instrumentation (SSI) is reporting APM traces end-to-end on Kubernetes after being enabled. Uses pup-cli to check for injected init containers, confirm the service appears in the APM services list, and validate tracer configuration matches the DatadogAgent manifest. Assumes enable-ssi has already run and pods have been restarted.

Generated from the current SKILL.md.

Do I need to run enable-ssi before using this skill?
Yes. This skill verifies SSI after it has already been enabled. If SSI has not been set up yet, run enable-ssi first.
What happens if pods don't show the datadog-lib init containers?
The pods were likely not restarted after SSI was enabled. Restart the pod and recheck for the init containers.
My service doesn't appear in the tracer list after running Step 2. What should I do?
Send traffic to the application first using the port-forward test, wait 30 seconds, and retry. If the service still doesn't appear, check the agent's trace receiver status β€” if it shows 0 traces, use troubleshoot-ssi.
Do I need to run Step 3 if I didn't configure ddTraceConfigs?
No. Step 3 only applies if you explicitly configured ddTraceConfigs (like profiling or AppSec) during enable-ssi. If basic SSI was set up without it, skip that step.

Generated from the current SKILL.md. These answers refresh after source changes.