AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
This skill provides structured guidance for deploying and managing the NVIDIA DOCA Telemetry Service (DTS). It covers three primary deployment shapes: BlueField (static pod), host-based (docker), and DPF (DPUService/helm). The skill focuses on the configuration layer, including dts_config.ini, provider and exporter settings, and level labels. It emphasizes a shape-first approach to troubleshooting and configuration, ensuring users follow the correct lifecycle for their specific environment while maintaining a strict separation from library-level API usage or infrastructure-level installation.
What it does
- Identifies the correct deployment shape (BlueField, Host, or DPF) for the telemetry service.
- Guides the configuration of dts_config.ini and helm-based DPUService parameters.
- Provides troubleshooting steps for common issues like container exit loops or empty Prometheus metrics.
- Outlines the verification contract to confirm telemetry data is successfully exported.
- Manages versioning and upgrades based on NGC container tags and chart versions.
- Defines the integration points for providers and exporters within the telemetry pipeline.
When to use it
- When you need to deploy or update the DOCA Telemetry Service in any supported environment.
- When the telemetry container fails to start or shows unexpected exit behavior.
- When you need to modify telemetry providers, exporters, or add custom level labels.
- When Prometheus endpoints on the DPU are not returning expected metrics.
- When you need to verify that configuration changes have been correctly applied and are active.
Advantages
- Ensures consistent configuration across different deployment architectures.
- Provides a clear, layered debugging approach to isolate telemetry failures.
- Maintains strict adherence to official documentation and versioning practices.
- Reduces configuration errors by enforcing a shape-first diagnostic workflow.
Usage examples
- “My BlueField DPU telemetry container is running but port 9100 shows no metrics.”
- The agent will guide you through inspecting the static pod logs using crictl, verifying the dts_config.ini provider settings, and checking the service restart status.
- “How do I add ethtool counters to my DPF-managed telemetry service?”
- The agent will instruct you to update the DPUService helm values (configMapData) and apply the changes via kubectl, avoiding manual INI edits.
- “I need to upgrade the built-in telemetry on my BlueField DPU to a newer version.”
- The agent will help you identify the correct NGC container tag and provide the steps to update the static pod manifest.
- “How do I configure per-rack level labels for my telemetry data?”
- The agent will explain the level_labels.ini or DPUFlavorTemplate configuration process and the necessary steps to apply these changes.
Install
Download the skill as a ZIP:
https://autogineer.com/agent-skills/nvidia/doca-dts/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip doca-dts.zip -d .agents/skills
Documentation by NVIDIA
DOCA Telemetry Service (DTS)
Scope note. DTS is an externally productized DOCA service: it is
not one of the DOCA SDK libraries, and its source of
truth is the public DTS guide plus the NGC container / helm-chart pages
and the DOCA Platform (DPF) public docs. This skill covers DTS as
deployed and configured — which manifest or invocation starts it,
which dts_config.ini keys shape it, how to verify it exports. It does
not cover the library side: reading telemetry in your own program is
libs/doca-telemetry (doca-telemetry/SKILL.md), publishing
into DTS over IPC from your own program is
libs/doca-telemetry-exporter (doca-telemetry-exporter/SKILL.md).
Where to start: decide the deployment type before anything
else — it selects the manifest, the config-directory path, the restart
mechanism and the debug commands. Route through
doca-setup ## recognize (doca-setup/TASKS.md#recognize)
(uname -m, lspci -d 15b3:, bf-release) to learn whether you are
on a BlueField Arm image (shape A), a plain host (shape B), or inside a
DPF-managed cluster (shape C), then open
TASKS.md ## configure and follow that shape's
column. State the shape in the answer before the first command, even
when the question implies it ("on my BlueField" is shape A: the
built-in static pod under kubelet, inspected with crictl, not
docker). Every configure, change or debug answer ends with the
verification contract, whose green signal is two /metrics scrapes at
least two update intervals apart showing a counter that advanced
(TASKS.md ## test step 3). If the question is what
can DTS collect and export, and in which mode, start at
CAPABILITIES.md ## Capabilities and modes.
If DOCA / the BlueField OS is not installed yet, route to
doca-setup/SKILL.md first.
Host docker container exits right after start (shape B). Check the
documented host shape and copy the exact invocations from the
version-matched guide's "Host Deployment" section instead of inventing
flags: (1) a -host image tag copied from the NGC doca_telemetry tag
list, never guessed; (2) the one-shot init container
(DTS_CONFIG_DIR=host /usr/bin/telemetry-init.sh) runs and exits 0
before the long-running telemetry-run.sh container; (3) the guide's
host-namespace flags and the config, ipc_sockets, data and log
mounts under /opt/mellanox/doca/services/telemetry/; (4) the documented
run uses --rm, so docker logs finds nothing: read the host-mounted
.../telemetry/log directory or re-run once without -d.
BlueField built-in DTS (shape A) serves nothing on port 9100. Inspect
with crictl pods, crictl ps -a and crictl logs <id> (not docker);
check prometheus= and enable-provider= in
/opt/mellanox/doca/services/telemetry/config/dts_config.ini (edit the file
it links to and allow about 60 s for the respawn). Green signal: two
curl <bluefield-ip>:9100/metrics scrapes at least two update intervals
apart show a counter that advanced. Change one variable per iteration.
DPF-managed DTS (shape C). Change providers and keys in the
DPUService helm values (configMapData), confirm the keys with
helm show values, apply with kubectl apply -f, and check the service
conditions with dpfctl. Never hand-edit the INI on a DPF-managed DPU.
Example questions this skill answers well
The CLASSES of DTS questions this skill is built to answer, each with one worked example. The class is the load-bearing piece; the worked example is one instance.
"Which deployment shape am I in, and what does that change?" — worked example: "I have a BlueField with DTS already running and a separate x86 host with no DPU; do I configure them the same way?". Answered by the shape table in
CAPABILITIES.md ## Pattern overviewthe shape-first step in
TASKS.md ## configure.
"How do I enable or disable a provider / component?" — worked example: "turn on
ethtoolcounters and dropsysfs.eth". Answered by the provider inventory inCAPABILITIES.md ## Capabilities and modesthe
enable-provider=/disable-provider=step inTASKS.md ## modify(in DPF the same option is set askey: valueunderconfigMapData, not in the INI).
"Which exporter do I pick and where does the endpoint live?" — worked example: "Prometheus should scrape the DPU, but the fleet also pushes to a Fluent Bit forwarder". Answered by the pull-vs-push exporter table in
CAPABILITIES.md ## Capabilities and modesthe exporter step in
TASKS.md ## configure.
"How do I upgrade or pin the DTS version on a given shape?" — worked example: "the BlueField OS bundles an older DTS; I want the NGC one". Answered by the tag / chart-version rule in
CAPABILITIES.md ## Version compatibilitythe NGC-yaml download pattern in
TASKS.md ## build, with the generic kubelet static-pod manifest mechanics indoca-container-deployment/TASKS.md#configure.
"How do I attach rack / pod / SU labels to every metric?" — worked example: "per-rack level labels for a DPF-managed fleet". Answered by the level-labels model in
CAPABILITIES.md ## Capabilities and modesthe
level_labels.ini/DPUFlavorTemplatestep inTASKS.md ## modify, with the reprovision warning fromCAPABILITIES.md ## Safety policy.
"The container is up but nothing is exported — which layer failed?" — worked example: "
curl :9100/metricson the DPU returns nothing,crictl psshows the pod running". Answered by the layer split inCAPABILITIES.md ## Error taxonomythe layered ladder in
TASKS.md ## debug.
"How do I prove a config change actually took effect?" — worked example: "I edited
dts_config.ini; did DTS restart and pick it up?". Answered by the restart-within-60-s contract and the green signal inCAPABILITIES.md ## Observabilitythe bounded loop in
TASKS.md ## test.
When to load this skill
Load this skill for hands-on DTS deployment or configuration work:
(A) BlueField (built-in static pod): understanding the kubelet static pod under
/etc/kubelet.d/doca_telemetry_standalone.yaml, itsinitContainers(telemetry-init.sh,enable-fluent-forward.sh), disabling auto-start, or upgrading to a newer NGC image than the BlueField OS bundles.(B) Host (docker): running the NGC
-hostimage with the documented namespace / device / volume flag families, the one-shot init container, and deciding whether--gpus allor the MST device mapping apply to this host.(C) DPF (DPUService / helm chart): authoring a
DPUServicefor thedoca-telemetrychart, mappingdts_config.inikeys ontoconfigMapData, keeping the Prometheus port consistent betweenconfigMapDataandconfigPorts, and readingdpfctl describeconditions.Configuration (all shapes): sampling interval, providers and components, exporters (Prometheus pull; Fluent Bit / OpenTelemetry / Prometheus Remote Write push; storage to
/data), IPC with external applications, level labels and device labels, the HFT HTTP API.Debugging: the container exits at start or restart-loops, the Prometheus endpoint is empty, a provider shows no counters, the Fluent Bit destination receives nothing, or a DPF
DPUServicenever reachesApplicationsReady.
Do not load this skill for general DOCA orientation, installing
DOCA or the BlueField OS, installing DPF itself, library-API questions,
or building Grafana dashboards. For those, route via
doca-public-knowledge-map/SKILL.md,
doca-setup/SKILL.md, or the matching libs/
skill.
What this skill provides
This is a thin loader. Substantive material lives in two companion files:
CAPABILITIES.md— the three deployment shapes and what each fixes (manifest, config path, restart mechanism, debug tooling); the inventory-discovery procedure (generated config / rendered ConfigMap over the example tables) with the provider and exporter catalogues (pull / push / storage); the version anchor (image tag / chart version, never the host DOCA release); the layered error taxonomy (image → manifest → init / config → providers → exporter → consumer); the observability surface with its named green signal; the safety policy; and the public-source pointer.TASKS.md— step-by-step workflows for the in-scope verbs:configure,build(assembling the deployment artifact — there is nothing to compile),modify,run,test,debug, plus aCommand appendix, aDeferred task verbsblock, and theCross-cuttingcontracts every change-recommending answer ends with.
The skill assumes the operator has the root / sudo or cluster
credentials the public DTS guide expects, and a target that already
runs a BlueField OS image, a docker-capable host, or a working DPF
cluster. It does not provide any of those prerequisites.
What this skill deliberately does not ship
This skill is agent guidance, not a templates or sample-config bundle. To keep the boundary clean, it deliberately does not contain — and pull requests should not add:
Copy-paste manifests, helm values files, or
dts_config.inibodies. The kubelet yaml is published per version on the NGC container page; the chart's keys come fromhelm show values; the INI options come from the live guide for the running version. The agent quotes the documented flag / key families with their "why" and points at the exact guide section for the verbatim recipe.Container image tags or chart versions as facts. Tags follow the
<dts-version>-doca<doca-version>[-host]shape and are read from the NGC tag list at answer time; a memorized tag is the canonical hallucination for a service skill. Seedoca-version/SKILL.md.Grafana dashboards or Prometheus / Fluent Bit server configs. The skill names the DTS-side endpoint and the consumer-side target shape and stops there.
Credentials, image pull secrets, or cluster credential files.
imagePullSecretsis named as a chart key family; its contents are the user's.A
samples/,templates/, orreference/subtree of any kind. A mock or incomplete artifact in this skill's tree, even one labeled "reference", is misleading: operators will read it as production-ready.
Loading order
Read this file first to confirm the question is about DTS as deployed (not the library API, not DPF installation), and fix the deployment shape via
doca-setup ## recognize(doca-setup/TASKS.md#recognize).For the shape table, providers, exporters, version anchor, error taxonomy, observability and safety policy, see CAPABILITIES.md.
For step-by-step workflows — configure, build, modify, run, test, debug — see TASKS.md, reading only the column for the chosen shape.
Apply the safety overlay in every phase. privileged mode with host namespaces,
systemctl start dpe, fwctl / mst device exposure, and a DPF flavor-template change that reprovisions DPUs are the safety-relevant actions — seeCAPABILITIES.md ## Safety policy.
Related skills
doca-setup/SKILL.md— the front door:## recognize(doca-setup/TASKS.md#recognize) decides the deployment shape;## no-install(doca-setup/TASKS.md#no-install) carries the tag-selection rule this skill reuses.doca-container-deployment/SKILL.md— generic kubelet standalone / static-pod manifest mechanics on BlueField and the pod-spec do-not-invent rule; the DTS-specific facts (/etc/kubelet.d/doca_telemetry_standalone.yaml, the NGCconfigs/<version>/yaml download, thecrictl pods/crictl ps/crictl logsinspection) come from the DTS guide and the NGC container page and live in this skill. Shape A delegates only the generic mechanics there via## configure(doca-container-deployment/TASKS.md#configure) and## run(doca-container-deployment/TASKS.md#run).doca-version/SKILL.md— canonical version-handling rules; DTS overlays "the anchor is the container tag / chart version, not the host DOCA release".doca-debug/SKILL.md— the universal debug-loop contract (doca-debug/CAPABILITIES.md#universal-debug-loop-contract) and shared command appendix (doca-debug/TASKS.md#command-appendix) thatTASKS.md ## debugoverlays.doca-hardware-safety/CAPABILITIES.md#safety-policy— DTS is read-only telemetry, but its deployment touches privileged containers,dpe, firmware-facing devices and DPF reprovisioning.libs/doca-telemetry(doca-telemetry/SKILL.md) — the reader library; "consume telemetry in my program" goes there.libs/doca-telemetry-exporter(doca-telemetry-exporter/SKILL.md) — the publisher library; "my app reports but DTS sees nothing" is split: IPC socket / shared-memory mounts are this skill's, thedoca_telemetry_exporter_*calls are that skill's.doca-public-knowledge-map/SKILL.md— URL routing for the public DOCA documentation set;CAPABILITIES.md ## Public-source pointercarries the DTS guide, NGC and DPF URLs.
Files
- ATTRIBUTION.mdAdded by AutoGineer815 B
- BENCHMARK.md10.2 KiB
- CAPABILITIES.md42.1 KiB
- LICENSELicence file added by AutoGineer11.2 KiB
- SKILL.md15.1 KiB
- SKILLCARD.yaml3.2 KiB
- TASKS.md39.9 KiB
- evals/evals.json6.2 KiB
- skill-card.md5.3 KiB
- skill.oms.sig5.1 KiB
CAPABILITIES.md
DOCA Telemetry Service — Capabilities
Where to start: The pattern overview below names the recurring DTS-class operational patterns. Pick the pattern first — and before that, pick the deployment shape ((A) BlueField (built-in static pod) vs (B) Host (docker) vs (C) DPF (DPUService / helm chart)), because the shape decides where the manifest lives, how configuration reaches the container, and which guide section owns the verbatim recipe. Then drill into the H2 that owns the substance. For the how of executing each pattern, jump to TASKS.md.
This file enumerates DTS's documented capabilities, deployment shapes,
configuration surface, and operational behaviors as described in the
public DOCA Telemetry Service Guide on docs.nvidia.com, the NGC
container / helm-chart pages, and the DPF public docs. Treat it as a
map of what is documented, not a substitute for the live page. DTS
is externally productized — a container image (built into the
BlueField image or pulled from NGC) and a helm chart, not source in
the DOCA SDK tree. If the version-matched guide page is unavailable,
use the installed doca_telemetry_standalone.yaml, the
dts_config.ini generated by that image, and helm show values; if
none exists for the deployed tag, stop with a version/source gap
rather than guess option names, tags, or chart keys.
Pattern overview
Every DTS-class question this skill teaches resolves into one of FIVE
patterns. The patterns are CLASSES — they apply across all three
deployment shapes; only the carrier of the configuration differs
(a kubelet yaml, a docker invocation, or a DPUService values block).
| DTS pattern | Class shape | Where the substance lives |
|---|---|---|
| 1. Pick the deployment shape | (A) BlueField (built-in static pod) vs (B) Host (docker, -host image) vs (C) DPF (DPUService / helm chart); the shape decides manifest location, config carrier, and start/stop/upgrade verbs | ## Capabilities and modes Architecture + Deployment shapes |
| 2. Initialize vs reuse the config directory | telemetry-init.sh seeds defaults only when the config dir is empty; an existing dir is reused as-is (so stale config survives upgrades); reset = delete the dir contents and restart | ## Capabilities and modes Architecture; ## Safety policy config reset |
| 3. Enable / disable providers | enable-provider=<name> / disable-provider=<name.component> in dts_config.ini (DPF: configMapData.providers CSV); each provider has prerequisites (dpe, fwctl, MFT devices, GPU toolkit) | ## Capabilities and modes Providers catalogue |
| 4. Choose the exporter | Prometheus pull endpoint vs Fluent Bit push vs OpenTelemetry push vs Prometheus Remote Write vs on-disk storage (output=/data); pull vs push decides which side must be reachable | ## Capabilities and modes Exporters catalogue; ## Error taxonomy exporter layer |
| 5. Observe and verify | Container logs + /var/log mount + Prometheus /metrics as the green signal (two scrapes, counter advancing) + data dir + DPF conditions | ## Observability |
Two cross-cutting rules that apply to every pattern above:
Shape first, then column. Route the user through
doca-setup ## recognize(doca-setup/TASKS.md#recognize) (uname -m,lspci -d 15b3:,bf-release) to learn whether they are on the BlueField Arm side, a plain host, or inside a DPF-managed cluster. Every subsequent instruction is read from that shape's column only; mixing columns (e.g.docker runon a DPU whose NGC page says docker pull is discouraged) is the most common failure.One configuration model, three carriers. The option names are identical everywhere and come from
dts_config.ini; only the carrier differs. In DPF the documented mapping rule is that everykey=valueline ofdts_config.inibecomes akey: valueentry underspec.helmChart.values.configMapData.general(providers and Fluent Bit destinations have their own dedicated groups). Never invent an option name — read it from the guide's "DTS Configuration" section or the generateddts_config.iniof the deployed image.
Capabilities and modes
Architecture
DTS is a single container with a two-phase lifecycle:
Init step —
/usr/bin/telemetry-init.shruns first (as aninitContainersentry on BlueField and in DPF; as a one-shot the one-shotdocker runoftelemetry-init.shon the host). It generates the default configuration files into the mounted config directory only if that directory is empty. On the host the documented invocation prefixesDTS_CONFIG_DIR=hostso the host-oriented default profile is seeded. On BlueField a second script,/usr/bin/enable-fluent-forward.sh -i=<host> -p=<port>, may follow it to configure the Fluent Bit forward destination (it overwritesfluent_bit_configs).Main process —
/usr/bin/telemetry-run.shstarts DTS, which reads/config/dts_config.ini(host path/opt/mellanox/doca/services/telemetry/config/dts_config.ini). Editing that file is the reconfiguration verb. The guide documents the automatic pickup only forlevel_labels.ini(process exits, DTS restarts within 60 s); in practice the same watcher coversdts_config.ini: expect the collector process to exit and respawn inside the container within ~60 s (supervisor linesexited: clx/spawned: 'clx'in the container log — the pod's restart count does not move), and apply the shape's restart rule only if no respawn appears. Edit the symlink's target: in the generated dirdts_config.ini -> clx_config.ini, andsed -iwithout--follow-symlinksreplaces the link with a copy that DTS never reads —ls -l dts_config.initells you which one you have.Directory layout (host side, all shapes unless the chart's
hostVolumePrefixsays otherwise):/opt/mellanox/doca/services/telemetry/withconfig/(mounted at/config),data/(mounted at/data, target ofoutput=/data),ipc_sockets/(mounted at/tmp/ipc_sockets), and a log directory mounted at the container's/var/log—/opt/mellanox/doca/services/telemetry/login the guide's hostdocker run,/var/log/doca/telemetryin the shipped BlueField static-pod yaml (read thehostPathin your own yaml'svolumes:).Maintenance rule from the guide: after any server configuration change (firmware, networking, firewall), restart DTS.
Deployment shapes
| Aspect | (A) BlueField (built-in static pod) | (B) Host (docker) | (C) DPF (DPUService / helm chart) |
|---|---|---|---|
| Where the manifest lives | /etc/kubelet.d/doca_telemetry_standalone.yaml (pre-installed; backup copy plus doca_telemetry_service_${version}_arm64.tar.gz on the DPU; per-version yaml published under configs/<version>/ on the container's NGC page) | No manifest — the docker run invocation is the artifact; copy it from the guide's "Host Deployment" section | DPUService.yaml (apiVersion: svc.dpu.nvidia.com/v1alpha1, kind: DPUService, namespace: dpf-operator-system) pointing at the NGC DOCA helm repository as repoURL (copy it from the public dpuservices/dts/DPUService.yaml), chart: doca-telemetry; or a DPUServiceTemplate + DPUServiceConfiguration pair referenced from DPUDeployment.spec.services.dts |
| How config reaches the container | Host dir /opt/mellanox/doca/services/telemetry/config bind-mounted at /config; edit dts_config.ini on the DPU | Same host dir, mounted via -v .../config:/config | spec.helmChart.values.configMapData is delivered to the pod as a ConfigMap (mounted at /configmap in the chart observed 2026-09-16) and DTS regenerates /config/dts_config.ini from it, then self-restarts — mount path and regeneration mechanics are chart internals, confirm with helm show values |
| Start / stop | Kubelet starts it at boot while the yaml is present; taking the yaml out of that directory disables auto-start, and yaml edits apply on system restart (guide); restart without a reboot: crictl stop <container-id> — kubelet recreates the static-pod container (attempt +1), the config dir is kept | docker run -d ... / removing the doca-telemetry container | kubectl apply -f DPUService.yaml / kubectl delete -f DPUService.yaml; rollout per spec.serviceDaemonSet.updateStrategy (RollingUpdate, maxUnavailable) |
| Upgrade | Download the newer version's yaml from the NGC page and replace the one in /etc/kubelet.d (guide: "DOCA Service on NGC"; the yaml path, the NGC configs/<version>/ download and crictl inspection are this skill's; generic static-pod manifest mechanics in doca-container-deployment ## configure (doca-container-deployment/TASKS.md#configure)). A freshly downloaded yaml carries the documented default -i=127.0.0.1 -p=24224 — re-apply your Fluent Bit destination before dropping it in | Re-run with the newer -host tag (init step reuses the existing config dir) | Bump spec.helmChart.source.version and re-apply; the chart pins its own image tag |
| Inspect | crictl pods, crictl ps, crictl logs <container-id> (the static-pod tooling of the Container Deployment Guide — the DTS guide itself names only the yaml path) | docker ps, docker logs doca-telemetry | kubectl on the DPU cluster plus dpfctl describe all --show-resources=dpuservice/doca-telemetry-service --show-conditions=all |
| Owning docs section | Guide: "Service Deployment > Built-in DOCA Service Image (BlueField)", "DPU Deployment", "DTS Configuration > Initialization Scripts (BlueField Deployment)" | Guide: "Service Deployment > Host Deployment" (x86_64 and aarch64; all exporters in one container) | DPF public docs page "DOCA Telemetry Service" + dpuservices/dts/DPUService.yaml (a Spectrum-X variant DPUServiceSPX.yaml sits beside it) |
Shape-specific notes worth teaching:
(A) The NGC page says the DPU image is "configured for K8S-based deployment, hence the use of the docker pull command is discouraged". Do not hand-write the static-pod yaml; download the version-matched one and drop it in place. Shared memory for IPC is
/dev/shm/telemetry/(DTS >= 1.9.0).(B) The documented run flags are a family with reasons (host namespaces so providers see host NICs/processes and IPC works; privileged mode; the MST device mapping for MFT-backed providers;
--gpus allonly with a GPU and the NVIDIA container toolkit; the five bind mounts) — table inTASKS.md ## Command appendix, verbatim command from the guide for the chosen version.(C)
spec.configPorts(serviceType: None, port namedhttpserverport) — and the chart'sexposedPorts, if the pinned chart exposes it (confirm withhelm show values) — must agree with the Prometheus port configured inconfigMapData— see the port mismatch entry in## Error taxonomy.
Discovering the inventory
The provider and exporter tables below are examples, validated against the public guide when this skill was written. The inventory that matters is the one shipped by the image tag / chart version actually deployed: it changes per DTS release without a skill change, and it differs between shapes (the host flavour is a different template from the BlueField one). Read it before naming a provider, exporter or option key, and quote what you observed rather than this file.
| Layer | (A) BlueField (built-in static pod) | (B) Host (docker) | (C) DPF (DPUService / helm chart) |
|---|---|---|---|
| Available — what this version knows | The generated dts_config.ini in /opt/mellanox/doca/services/telemetry/config/ (guide "Generating Configuration": defaults are generated on first launch). Its #####-banner section headers are the exporter / provider sections; grep -n -E '^#?enable-provider=' dts_config.ini lists providers, commented lines included; fluent_bit_configs/ lists the Fluent Bit outputs | Same file, same host path, written by the documented init container (-e DTS_CONFIG_DIR=host … /usr/bin/telemetry-init.sh). Zero-footprint variant: run that documented init command with an empty scratch directory mounted at /config to read the template of any image tag without touching the live install | helm show values <repo>/doca-telemetry --version <pinned> = the keys the chart models as typed values; configMapData.general = free-form key: value passthrough rendered verbatim into dts_config.ini, for any key the image supports (a typed value being absent does not mean unsupported); kubectl get configmap -n <ns> <name> -o yaml on the DPU cluster = the rendered dts_config.ini in use; kubectl exec <pod> -- cat /config/dts_config.ini = what the running image actually loaded |
| Active — what is really running | GET <addr>:<port>/management/provider and /management/exporter on the Prometheus endpoint (run status + statistics — the authoritative live list); /management/config_file for what was loaded; then the start-up block in clx.log, metric names on /metrics, files under the host data/ dir | same management routes; docker exec doca-telemetry tail /var/log/clx.log; the same /metrics and data/ checks | same management routes through the service port; kubectl exec <pod> -- tail /var/log/clx.log; dpfctl describe conditions |
| Docs | guide chapters "Telemetry Providers" and "Data Export Options", cited by name and read live when a specific row is needed | same | same, plus the chart page on NGC |
Fallback order when a layer is out of reach (no web access, no cluster access): generated config → chart values → guide. Never fill a gap from the tables in this file alone.
Providers catalogue
Providers are enabled with enable-provider=<name> and pruned with
disable-provider=<name.component> (e.g. disable-provider=sysfs.eth).
In DPF the same names go into configMapData.providers (CSV);
configMapData.aggregator_providers is a separate CSV group for
aggregator-side providers, not a second home for these names. It is a
template-only key: the chart's ConfigMap template accepts it but
values.yaml does not list it, so helm show values will not show it —
the public DPF dpuservices/dts/DPUService.yaml carries it as a
commented example, and helm template proves what a given chart
version renders. Data-filtering sets live
under configMapData.counterset.{cset,fset,xcset} (chart key — confirm
with helm show values). Names and components below
are the ones documented when this skill was written; the
enable-provider= lines of the generated dts_config.ini (or the
rendered DPF ConfigMap) are the provider inventory of the deployed
version and win over this table
(### Discovering the inventory).
Provider-specific option families are listed so the agent recognizes
them, but their values must be read from the guide's "Telemetry
Providers" / "Enabling Providers" sections for the deployed version.
Do-not-invent guard (providers). Name a provider only if it is in this table, in the guide, or on an
enable-provider=line (active or commented) of the user's generated config. Names you may remember from older releases (hcaperf,bluefield,ppcc, …) are not to be offered unless the user's file shows them — say "check the commentedenable-provider=lines in your generateddts_config.ini" instead.
| Provider | Components / what it reads | Documented option family | Prerequisite on the target |
|---|---|---|---|
sysfs | ib_port, hw_port, devices, ib_mr_cache, eth, hwmon, bf_ptm — NIC/port counters from sysfs | sysfs-cset-path, sysfs-allowed-ports, sysfs-excluded-ports, sysfs-invalid-counter-value | sysfs visibility of the devices (host namespaces on shape B) |
ethtool | per-interface ethtool statistics | ethtool-interfaces, ethtool-interfaces-match-method=exact, ethtool-fieldset-file | interfaces visible in the container's net namespace |
tc, ifconfig, vnic, ppcc_eth | traffic-control, interface, virtual-NIC and programmable-congestion-control counters | see guide | ppcc_eth uses MFT devices (/dev/mst, /usr/lib64/mft mount on shape B) |
nvidia_smi, dcgm — host shape (B) with GPUs only | GPU metrics via nvidia-smi / DCGM on an x86/aarch64 host that has NVIDIA GPUs; never on a BlueField (A)/(C) — the DPU has no GPU | nvidia_smi_max_processes, nvsmi_with_numeric_fields; dcgm_events_enable_common_fields | GPU present + NVIDIA container toolkit (--gpus all on shape B; drop the flag otherwise) |
bfperf | BlueField performance counters | see guide | BlueField Arm side |
storage | NFS / block / Lustre volumes | storage-nfs-volumes=all, storage-devices=all, storage-lustre-volumes=all, storage-lustre-llite-dir | the mounts must be visible in the container |
amber | device diagnostics via MFT | amber_devices, amber_update_interval_sec, amber_labels, amber_stop_collecting_on_command_error, amber_service_stagger_msec | /dev/mst + MFT libraries exposed to the container |
diagnostic_data_low_freq, diagnostic_data_high_freq | firmware diagnostic data | diagnostic-data-yml-file=/config/diagnostic_data_configs/all-single-port.yml, diagnostic-data-timestamp-collection-type, diagnostic-data-timestamp-source=RTC|FRC | fwctl kernel module loaded (lsmod | grep fwctl) and /dev/fwctl/fwctl* present |
grpc.<provider> (remote collection, BlueField only) | the same providers collected through the DOCA Privileged Executor, e.g. enable-provider=grpc.sysfs.fw_pages, grpc.sysfs.fw_pages.mlx5_1=ignore | see guide "Remote Collection (BlueField Only)" | systemctl start dpe on the BlueField — a privileged action, see ## Safety policy |
GPU rule (explicit): nvidia_smi / dcgm and the --gpus all run flag
belong to shape (B) and only when the host has NVIDIA GPUs (plus
the NVIDIA container toolkit). On a GPU-less host leave both providers
disabled and omit --gpus all; on BlueField shapes (A)/(C) they are
never applicable. Check first with nvidia-smi -L on the host.
Pruning rule: when the container log names a provider whose prerequisite
the target cannot meet, the first single-variable change is to disable
that provider, not to add privileges (## Error taxonomy
layer 4).
The diagnostic-data providers carry a documented compatibility matrix
with the other providers (guide "Diagnostic Data > Providers
Compatibility"); read it before enabling diagnostic_data_* next to an
existing provider set — the matrix, not this table, decides.
Exporters catalogue
| Exporter | Direction | Configured by | Consumer must |
|---|---|---|---|
| Prometheus endpoint | pull | prometheus=<scheme>://0.0.0.0:9100 (+ prometheus-fset-indexes=name); DPF: configMapData.prometheus.{enable,protocol,host,port} (confirm with helm show values) plus the matching spec.configPorts entry | reach <addr>:<port>/metrics — the guide's Grafana recipe uses static_configs: targets: ["<dpu-ip>:9100"] |
| Fluent Bit forward | push | fluentbit-config-dir= pointing at the fluent_bit_configs/ dir under the config dir (one exp-file per output); BlueField init via enable-fluent-forward.sh -i= -p=; DPF configMapData.fluent.{forward,kafka,influxdb,elasticsearch} groups (each rendered into its own exp-file) | run a reachable Fluent Bit / Kafka / InfluxDB / Elasticsearch destination |
| OpenTelemetry (OTLP) | push | open-telemetry-receiver=<url> in dts_config.ini (the guide documents the key in the HFT POST /ad-hoc-collection/start body table; the DPF chart renders the same key plus open-telemetry-field-set= / open-telemetry-counter-set= from configMapData.otlp.{enable,protocol,host,port,fieldSet,counterSet} — confirm with helm show values / helm template) | run a reachable OTLP receiver |
| Prometheus Remote Write | push | remote-write-receiver=<url> in dts_config.ini (listed under "Data Export Options"; the key itself is documented only in the HFT POST /ad-hoc-collection/start body table). The DPF chart has no typed configMapData.remote-write group — on (C) pass it through the free-form configMapData.general map (remote-write-receiver: <url>), which the chart renders verbatim into dts_config.ini; confirm with helm show values that your pinned chart exposes general | expose a remote-write endpoint |
| Storage (binary files) | local | output=/data -> host .../telemetry/data; readable with clx_read from the collectx-clxapidev package | nothing network-side; disk retention is the operator's concern |
Catalogue boundary: these five are exactly the guide's "Data Export
Options" list when this skill was written; the banner section headers
of the generated dts_config.ini (or the rendered DPF ConfigMap) are
the exporter inventory of the deployed version
(### Discovering the inventory). The
HFT ad-hoc API reuses the same set per run
(prometheus-endpoint, fluentbit-config-dir,
open-telemetry-receiver, remote-write-receiver, file-write in the
start body) — see ## HFT HTTP API family.
Anything else a user asks for (NetFlow / IPFIX export, Kafka or
InfluxDB without Fluent Bit in front, syslog) is not in the guide.
Some of it is nevertheless visible in the product: the generated
dts_config.ini and the published chart's configMapData.general
block carry a commented NetFlow section (#netflow-collector-ip=,
#netflow-collector-port=, "Exporter is disabled if this option is
not set"). Say that it exists but is undocumented, point the user at
the commented block in their generated config rather than asserting
its semantics, and route collector-level NetFlow design to the
public DTS guide via doca-public-knowledge-map/SKILL.md.
Never name a key that is not in their file or the guide. A NetFlow
"no" still owes a ladder for each alternative: application-side
NetFlow through the exporter library → its own test / debug anchors
(libs/doca-telemetry-exporter ## test (doca-telemetry-exporter/TASKS.md#test),
## debug (doca-telemetry-exporter/TASKS.md#debug));
the undocumented DTS block, if the user enables it anyway → layer 4
(does the start-up block list the NetFlow exporter as enabled after the
restart?), layer 5 (is the collector reachable on the UDP port named in
their file — ss -u/listener on the collector side), layer 6 (does the
collector's own flow log show records?) — one change per iteration, and
say explicitly that NVIDIA documents none of it.
Choosing rule: pull (Prometheus) makes DTS the thing that must be reachable — firewall / port / node exposure questions land here. Push exporters make the destination the thing that must be reachable — DNS / route / destination-up questions land there. Say which side owns the failure before debugging.
Labels
Level labels —
level_labels.inibesidedts_config.ini, enabled withlevel-labels-file=/config/level_labels.ini. DTS monitors the file: on a change the telemetry process exits on its own and DTS restarts within 60 s with the new labels (guide "Level Labels > Monitoring and Reloading") — a restart right after a label edit is expected behaviour, not a fault. In DPF the chart carries the raw INI inconfigMapData.levelLabels— a template-only key (rendered intolevel_labels.iniby the ConfigMap template, absent fromvalues.yaml, sohelm show valueswill not list it; verify withhelm templateon the pinned chart version), while the fleet-scale path is: per-DPUDPUDevice.spec.valuesrendered by aDPUFlavorTemplateGo template into aDPUFlavorconfigFilesentry forlevel_labels.ini, referenced fromDPUDeployment.spec.dpus.flavorTemplateorDPUSet.spec.dpuTemplate.spec.dpuFlavorTemplate. Rendered sections:[global_labels] [device_labels] [device_mapping] [data_types_mapping]. Preview withdpfctl flavor-template render -f template.yaml --dpudevice-file device.yaml. Changing the template or values reprovisions DPUs per the DPUSet rollout strategy — a safety-relevant action. Confirm withhelm show valuesand the DPF level-labels page which carrier the pinned chart wires intolevel-labels-file=; do not set both.Device labels —
add-pci-address-label=true,add-numa-node-label=true.
IPC surface
DTS exposes telemetry to co-located applications through a socket
directory (host /opt/mellanox/doca/services/telemetry/ipc_sockets,
container /tmp/ipc_sockets) and shared memory at /dev/shm/telemetry
(the DPF chart's shareHostSharedMemory toggles between the
container-private path and the host's /dev/shm for bare-metal IPC
clients — confirm with helm show values). The socket dir is created
by root, so a client application needs write access and may itself
need root. Applications built on the DOCA Telemetry Exporter API
publish through DTS over this IPC (guide "DOCA Telemetry Exporter
Integration"): the export modules exist in both the library and DTS,
so an application exports either directly from the library or
indirectly via DTS — which of the two is in play decides whether an
exporter symptom belongs to this skill or to the library skill. The application side of IPC (API calls, linking) belongs
to libs/doca-telemetry-exporter (doca-telemetry-exporter/SKILL.md)
and libs/doca-telemetry (doca-telemetry/SKILL.md); this
skill owns only the DTS-side mounts and the guide section "Enabling
IPC with External Applications".
HFT HTTP API family
Ad-hoc high-frequency collection is driven over HTTP:
enable-http-api=true, http-port=9117 (default); retention knobs
ad-hoc-runner-max-size-bytes (1 GiB default),
ad-hoc-runner-max-age-seconds (604800),
ad-hoc-runner-min-age-seconds (600); endpoints
/ad-hoc-collection/{start,stop,hft-counterset,list,status}. A
start body can name its own exporters for that run
(prometheus-endpoint, fluentbit-config-dir,
open-telemetry-receiver, remote-write-receiver; file-write
defaults to true) — same exporter set as the
## Exporters catalogue, scoped to the run.
Treat this as a separate port to expose and a separate retention
budget on the data dir; full request/response bodies are documented in
the guide, not here.
Version compatibility
For the canonical DOCA version-detection chain, NGC container
semantics, and the headers-win-over-docs rule, see
doca-version/SKILL.md. The body lives there;
this skill does not duplicate it.
The DTS-specific overlay is:
The version anchor is the container tag (or the chart version), not the host DOCA install. DTS tags carry both their own version and the DOCA release they were built against (shape
<dts-version>-doca<doca-version>); host images add a-hostsuffix. A BlueField image, a hostpkg-config --modversion doca-common, and the DTS tag are three independent anchors — record all three before comparing against the guide.Never fabricate a tag. Copy it from the NGC tag list (container page in
## Public-source pointer); tags observed on 2026-09-16 are examples of the shape, not values to reuse (DPU:1.26.5-doca3.5.0; host:1.26.5-doca3.5.0-host). If the page cannot be reached, say so and ask the user to paste the tag list. Rule of record:doca-setup ## no-install(doca-setup/TASKS.md#no-install).Chart version != image tag. The
doca-telemetrychart has its own version series (e.g.1.26.5,1.25.5observed 2026-09-16) and pins the image tag internally; inspect withhelm show chart/helm show valuesrather than assuming they are equal.Guide page version vs deployed version. Option names in this file were read from the guide page as published on 2026-09-16 (page version 3.5.0 at that time); confirm the live page version matches the DOCA component of the deployed tag, and when they diverge the
dts_config.inigenerated by the deployed image wins. Feature floors recorded from the public DTS pages on 2026-09-16: host deployment from DTS 1.13.0-doca2.0.2;/dev/shm/telemetry/from DTS 1.9.0 (NGC container page note) — re-confirm them on the live page for your tag rather than quoting them as guide facts.
Error taxonomy
DTS errors fall into six layers, ordered the way a deployment fails;
identify the layer before changing anything (the debug loop in
TASKS.md ## debug is organized by these layers).
Image / tag layer — pull fails or the tag does not exist (pod stuck pulling in
crictl pods/ pod status;docker runexits before the container starts). Cause is almost always a fabricated or mistyped tag, a DPU tag used on a host (or-hoston a DPU), or missing NGC credentials in DPF (the chart'simagePullSecretskey — confirm withhelm show values). Owner: NGC tag list.Manifest / pod scheduling layer — yaml present but pod not created (kubelet did not pick up
/etc/kubelet.d, malformed yaml, or on DPFDPUServiceconditionsApplicationPrereqsReconciled/ApplicationsReconciledfalse,nodeSelector/tolerationsexcluding every DPU). Owner: kubelet / DPF operator; mechanics indoca-container-deployment ## debug(doca-container-deployment/TASKS.md#debug).Init container / config generation layer —
telemetry-init.shran against a non-empty dir and left stale config in place; on the host the documentedDTS_CONFIG_DIR=hostprefix was omitted from the init step; on BlueFieldenable-fluent-forward.shpointed at an unreachable-i/-p; after an upgrade the freshly downloaded yaml carries the documented default-i=127.0.0.1 -p=24224andenable-fluent-forward.shoverwritesfluent_bit_configson every init even when the config dir is non-empty (the non-empty rule protects onlytelemetry-init.shoutput), so the Fluent Bit destination silently resets unless the-i=/-p=edit is re-applied to the new yaml. Signature: DTS starts but with options the operator did not expect. Owner: config dir contents (reset = empty it, restart).DTS process and provider prerequisites layer — the main process restarts in a loop or logs provider errors:
dpenot started forgrpc.*,fwctlnot loaded fordiagnostic_data_*,/dev/mstor MFT libs not exposed foramber/ppcc_eth, GPU toolkit missing fornvidia_smi/dcgm, host namespaces missing on shape B sosysfs/ethtoolsee nothing. Owner: the provider's prerequisite row in the Providers catalogue.Exporter reachability / port mismatch layer — DTS is healthy but the consumer cannot reach it (pull) or DTS cannot reach the destination (push). Canonical DPF instance:
configMapData.prometheus.portdiffers from the port inspec.configPorts(or the chart'sexposedPorts, if present — confirm withhelm show values; chart defaults and the DPF example may differ — the example uses 9100), so the Service forwards to a port DTS is not listening on. Set both explicitly after readinghelm show values. Owner: this skill.Consumer side — Prometheus scrape config, Grafana data source, Fluent Bit / Kafka / OTLP destination. DTS is the conduit; the consumer's own logs are the source of truth. Out of scope beyond the guide's "Deploying with Grafana Monitoring" recipe.
Three paths cross these layers and get their own ladders in
TASKS.md ## debug ("Path-specific ladders"):
storage read-back with clx_read, remote collection through dpe, and
the alternative recommended by a boundary answer.
DTS does not surface DOCA_ERROR_* to the operator; its outward
surface is container exit status, log lines, and the exporters. The
DOCA error taxonomy matters only on the application side of IPC
(libs/doca-telemetry-exporter (doca-telemetry-exporter/SKILL.md)).
Observability
Documented observability surfaces, by shape:
Container logs. (A)
crictl psthencrictl logs <container-id>, plus the persisted copy in the host directory the pod yaml maps to the container's/var/log(/var/log/doca/telemetryin the shippeddoca_telemetry_standalone.yaml— confirm from itsvolumes:block); (B)docker logs doca-telemetrywhile it runs, and the/var/logbind mount at/opt/mellanox/doca/services/telemetry/logon the host — the documented run uses auto-remove, so an exited container is removed and the host log dir (or a foreground re-run without-d) is the only record of the exit; (C)kubectl logson the DPU cluster. Provider prerequisite failures (layer 4) and exporter connect failures (layer 5) appear here first.Management HTTP API on the Prometheus endpoint. When
prometheus=is set, the same listener serves a management surface:GET <addr>:<port>/managementprints the route table for your build — read it there rather than from memory. The routes that matter for deployment debugging:/management/provider(statistics andrun_statusof every provider — the live answer to "which providers are actually running", layer 4),/management/provider/<name>(one provider's runtime status),/management/exporter(state andstatisticsof every exporter — exported page / record counters, the destination-independent validation signal for push exporters, layer 5),/management/exporter/<name>(use the names the list returns; they are plugin names, notprometheus),/management/config_file(the configuration DTS actually loaded — settles "did my edit reach it" without touching the file), and/management/all_configs//management/(cset|fset|xcset)[/<name>](the data-set files behindprometheus-fset-indexesand the chart'scounterset.*; GET to read, POST/PUT/DELETE change them — treat the mutating verbs as config edits). On (C) reach it through the service port. Every management request is itself logged inclx.log.Reading the log. The public guide documents only the mount, so everything below is read from the target, never assumed. Two logs: the container log (
crictl logs/docker logs/kubectl logs) is the supervisor's process view —spawned: 'clx',exited: clx, a sibling service goingFATAL— and is where a respawn or a restart loop shows; the collector's own log (clx.login the mounted log dir, rotated at ~10 MB intoclx.log.1…N; inside the container the same file is/var/log/clx.log—crictl exec <id> tail -f /var/log/clx.log,docker exec doca-telemetry tail -f /var/log/clx.log,kubectl exec <pod> -- tail -f /var/log/clx.log) is where the start-up block and the provider / exporter lines are. File:lsthe mounted log directory and name what is there. Order: the start-up block (collector log) first — it prints# of enabled providers/# of disabled providerswith one line per provider, so it is where DTS reports which providers it enabled and which it disabled or could not find; a provider the user expects that is absent or rejected there is a misspelled name or an unmet prerequisite (layer 4), while a provider that came up followed by an exporter complaining is layer 5. Quote the exact line from the user's log; do not paraphrase it from memory. Steady state: judge steady state from/metricsor the destination, not from log cadence. Verbosity: theverbose=key in the generateddts_config.inicarries its own scale in the inline comment (error / info / debug); raise it for one restart cycle and restore it — it is a config edit, so the shape's restart rule applies. If the generated config shows a commentedsyslog-and-streamoption, that is the documented-in-template way to mirror the log into the host's syslog on shape (B); present it only when it appears in the user's file.Prometheus
/metrics— the green signal. Scrape<addr>:<port>/metricstwice, at least twoupdateintervals apart (defaultupdate=1000ms) and show a counter or timestamp advancing between the two scrapes. A single 200 response proves only that the endpoint is bound; an advancing value proves providers are collecting. Pair it with the negative side: the target's own networking / SSH unaffected, and no restart loop (crictl ps/docker psuptime / pod restart count flat across the same window). This is the step-5 evidence of the universal verification contract inTASKS.md ## test.Data directory. With
output=/data, files appear under the hostdata/dir; growth over time is a second, exporter-independent liveness signal (and a retention budget to watch, especially with HFT enabled).DPF conditions.
kubectl -n dpf-operator-system exec deploy/dpf-operator-controller-manager -- /dpfctl describe all --show-resources=dpuservice/doca-telemetry-service --show-conditions=allreports conditions such asApplicationPrereqsReconciled,ApplicationsReady,ApplicationsReconciled,DPUServiceInterfaceReconciled(the live page lists more); every condition the command prints being True is the DPF-side precondition before scraping.Cross-skill spine. Read-only triple capture and the bounded loop are defined in
doca-debug ## Universal debug-loop contract(doca-debug/CAPABILITIES.md#universal-debug-loop-contract); generic command shapes indoca-debug ## Command appendix(doca-debug/TASKS.md#command-appendix).
Safety policy
Overlay on the bundle-wide hardware-safety meta-policy. The rules below are this skill's per-artifact overlay on the cross-cutting rules in
doca-hardware-safetyCAPABILITIES.md ## Safety policy (doca-hardware-safety/CAPABILITIES.md#safety-policy) (specifically ### Per-artifact overlay pattern (doca-hardware-safety/CAPABILITIES.md#per-artifact-overlay-pattern)). When the two layers disagree, the stricter wins; when either layer says STOP, the agent stops.
DTS itself is read-only telemetry: it reads counters and does not reconfigure firmware, ports, or the network. The safety-relevant surface is everything around it:
Privilege of the container. The documented host invocation is privileged mode with the host network, UTS, IPC and PID namespaces; the DPF chart exposes a
securityContext.privilegedkey (confirm withhelm show values). This is the documented and expected way to run DTS — a root service reading hardware counters — so do not add a confirmation ritual to the documented run line; just name what it grants (root in the host's net/uts/ipc/pid namespaces plus the devices handed in) so the user knows what they are deploying. Gate only what goes beyond the documented flag family (extra capabilities, extra device mappings, mounts the guide does not list) andsystemctl start dpebelow; and do not remove privileged mode while promising the providers will still work.--gpus allis a shape-(B) host flag only.Device exposure. the MST device mapping, the
/usr/lib64/mftmount,/dev/fwctl/fwctl*, and--gpus allhand hardware handles to the container. Expose only what the enabled providers need; a provider that is disabled needs no device.systemctl start dpe(DOCA Privileged Executor, required forgrpc.*remote collection on BlueField) starts a privileged system service on the DPU. Treat it as a hardware-touching change: state the reason, confirm the target identity, and obtain authorization bound to that target (explicit user reply, or an approved-system artifact in unattended runs); otherwise stop withconfirmation_required.DPF flavor-template / DPUDevice value changes reprovision DPUs per the DPUSet rollout strategy. Editing a level-labels template is therefore not a config-only change; preview with
dpfctl flavor-template renderfirst and schedule the rollout consciously.Config reset deletes operator configuration. "Delete all files in
.../telemetry/config/, restart DTS" also removes hand-editeddts_config.ini,level_labels.ini, andfluent_bit_configs. Back the directory up before resetting; on BlueField, removing/etc/kubelet.d/doca_telemetry_standalone.yamldisables telemetry at the next boot — say so.Rollback is cheap: remove the yaml from
/etc/kubelet.d, removing thedoca-telemetrycontainer, orkubectl delete -f DPUService.yaml(on theDPUDeploymentroute: remove thedtsentry fromDPUDeployment.spec.servicesor revert theDPUServiceConfigurationvalues and re-apply; reverting a flavor-template /DPUDevicelabel change reprovisions DPUs again — schedule it like the forward change and preview withdpfctl flavor-template render) — prefer it over a second speculative change once the one-iteration debug budget is spent.
Public-source pointer
The canonical public sources for DTS are:
DOCA Telemetry Service Guide (docs.nvidia.com): https://docs.nvidia.com/doca/sdk/doca+telemetry+service+guide/index.html — sections quoted by name throughout this skill ("Service Deployment", "DTS Configuration", "Telemetry Providers", "Data Export Options").
DOCA Container Deployment Guide (kubelet static-pod mechanics on BlueField): https://docs.nvidia.com/doca/sdk/doca+container+deployment+guide/index.html
NGC container page (tag list, per-version
doca_telemetry_standalone.yamlunderconfigs/<version>/,crictlusage notes): https://catalog.ngc.nvidia.com/orgs/nvidia/teams/doca/containers/doca_telemetryNGC helm chart page (
doca-telemetrychart versions): https://catalog.ngc.nvidia.com/orgs/nvidia/teams/doca/helm-charts/doca-telemetryDPF docs: https://docs.nvidia.com/networking/display/dpf/ and https://github.com/NVIDIA/doca-platform (
public-main): the DTS pagedocs/public/advanced-configuration/dpuservices/doca-telemetry-service.md, the level-labels pagedocs/public/advanced-configuration/telemetry-level-labels.md, and the exampledpuservices/dts/DPUService.yaml.Developer forum (DOCA category): https://forums.developer.nvidia.com/c/infrastructure/doca/370
Verify that the guide page version matches the DOCA component of the deployed container tag / chart version before quoting option names.
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.
The author says: Container-shaped DOCA service. On BlueField Arm it ships inside the BlueField OS image (upgradable from the NGC image); on an x86_64 or aarch64 host it runs from the NGC `-host` image under docker; under DPF it is a `DPUService` rendered from the NGC `doca-telemetry` helm chart. The version anchor is the container tag / chart version, not the host DOCA install. Never fabricate a tag or chart version — read it from the NGC page or `helm show values`.
Security
What our scanner noticed· Medium risk
- Large base64-encoded blobs
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
- Published by
- NVIDIA
- Publisher
- NVIDIA (Official)
- Source
- NVIDIA/skills · skills/doca-dts · commit fce3cca
- Licence
- Apache License 2.0 (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE-APACHE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by NVIDIA or NVIDIA.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download doca-dts.zip