Generated banner for Doca Dts
Generated logo for Doca Dts

Doca Dts

NVIDIAOfficialPublished by NVIDIA

  • Skill
  • Tool integration
  • Cloud and DevOps
  • Apache-2.0
  • Medium risk

From the author

Deploy and configure the NVIDIA DOCA Telemetry Service (DTS) as it is actually run: (A) BlueField (built-in static pod), (B) Host (docker) on x86_64 / aarch64, or (C) DPF (DPUService / helm chart) — plus the shared configuration layer (`dts_config.ini`, providers, exporters, level labels) that all three share. The user's DEPLOYMENT TYPE decides everything; pick it first. Trigger even without "DTS" for "prometheus on the DPU shows nothing on 9100", "telemetry container exits right after start", "add ethtool counters to the telemetry DPUService", "how do I upgrade the built-in telemetry on BlueField", or "level labels per rack/pod". Refuse and route elsewhere for installing DOCA itself, the `doca_telemetry` / `doca_telemetry_exporter` library API, installing the DPF cluster, Grafana / Prometheus server setup or dashboard / PromQL authoring, and BFB / BSP imaging — those belong to other skills or to external products.
— the description by NVIDIA

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

  1. Download the skill as a ZIP:

    https://autogineer.com/agent-skills/nvidia/doca-dts/download
  2. Unzip 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 overview

  • "How do I enable or disable a provider / component?" — worked example: "turn on ethtool counters and drop sysfs.eth". Answered by the provider inventory in CAPABILITIES.md ## Capabilities and modes

    • the enable-provider= / disable-provider= step in TASKS.md ## modify (in DPF the same option is set as key: value under configMapData, 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 modes

  • "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 compatibility

    • the NGC-yaml download pattern in TASKS.md ## build, with the generic kubelet static-pod manifest mechanics in doca-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 modes

  • "The container is up but nothing is exported — which layer failed?" — worked example: "curl :9100/metrics on the DPU returns nothing, crictl ps shows the pod running". Answered by the layer split in CAPABILITIES.md ## Error taxonomy

  • "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 in CAPABILITIES.md ## Observability

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, its initContainers (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 -host image with the documented namespace / device / volume flag families, the one-shot init container, and deciding whether --gpus all or the MST device mapping apply to this host.

  • (C) DPF (DPUService / helm chart): authoring a DPUService for the doca-telemetry chart, mapping dts_config.ini keys onto configMapData, keeping the Prometheus port consistent between configMapData and configPorts, and reading dpfctl describe conditions.

  • 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 DPUService never reaches ApplicationsReady.

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 a Command appendix, a Deferred task verbs block, and the Cross-cutting contracts 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.ini bodies. The kubelet yaml is published per version on the NGC container page; the chart's keys come from helm 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. See doca-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. imagePullSecrets is named as a chart key family; its contents are the user's.

  • A samples/, templates/, or reference/ 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

  1. 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).

  2. For the shape table, providers, exporters, version anchor, error taxonomy, observability and safety policy, see CAPABILITIES.md.

  3. For step-by-step workflows — configure, build, modify, run, test, debug — see TASKS.md, reading only the column for the chosen shape.

  4. 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 — see CAPABILITIES.md ## Safety policy.

  • 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 NGC configs/<version>/ yaml download, the crictl pods / crictl ps / crictl logs inspection) 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) that TASKS.md ## debug overlays.

  • 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, the doca_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 pointer carries the DTS guide, NGC and DPF URLs.

Files

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 patternClass shapeWhere 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 directorytelemetry-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 providersenable-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 exporterPrometheus 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 verifyContainer 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 run on 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 every key=value line of dts_config.ini becomes a key: value entry under spec.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 generated dts_config.ini of the deployed image.

Capabilities and modes

Architecture

DTS is a single container with a two-phase lifecycle:

  • Init step — /usr/bin/telemetry-init.sh runs first (as an initContainers entry on BlueField and in DPF; as a one-shot the one-shot docker run of telemetry-init.sh on 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 prefixes DTS_CONFIG_DIR=host so 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 overwrites fluent_bit_configs).

  • Main process — /usr/bin/telemetry-run.sh starts 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 for level_labels.ini (process exits, DTS restarts within 60 s); in practice the same watcher covers dts_config.ini: expect the collector process to exit and respawn inside the container within ~60 s (supervisor lines exited: 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 dir dts_config.ini -> clx_config.ini, and sed -i without --follow-symlinks replaces the link with a copy that DTS never reads — ls -l dts_config.ini tells you which one you have.

  • Directory layout (host side, all shapes unless the chart's hostVolumePrefix says otherwise): /opt/mellanox/doca/services/telemetry/ with config/ (mounted at /config), data/ (mounted at /data, target of output=/data), ipc_sockets/ (mounted at /tmp/ipc_sockets), and a log directory mounted at the container's /var/log — /opt/mellanox/doca/services/telemetry/log in the guide's host docker run, /var/log/doca/telemetry in the shipped BlueField static-pod yaml (read the hostPath in your own yaml's volumes:).

  • 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" sectionDPUService.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 containerHost dir /opt/mellanox/doca/services/telemetry/config bind-mounted at /config; edit dts_config.ini on the DPUSame host dir, mounted via -v .../config:/configspec.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 / stopKubelet 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 keptdocker run -d ... / removing the doca-telemetry containerkubectl apply -f DPUService.yaml / kubectl delete -f DPUService.yaml; rollout per spec.serviceDaemonSet.updateStrategy (RollingUpdate, maxUnavailable)
UpgradeDownload 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 inRe-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
Inspectcrictl 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-telemetrykubectl on the DPU cluster plus dpfctl describe all --show-resources=dpuservice/doca-telemetry-service --show-conditions=all
Owning docs sectionGuide: "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 all only with a GPU and the NVIDIA container toolkit; the five bind mounts) — table in TASKS.md ## Command appendix, verbatim command from the guide for the chosen version.

  • (C) spec.configPorts (serviceType: None, port named httpserverport) — and the chart's exposedPorts, if the pinned chart exposes it (confirm with helm show values) — must agree with the Prometheus port configured in configMapData — 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 knowsThe 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 outputsSame 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 installhelm 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 runningGET <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/ dirsame management routes; docker exec doca-telemetry tail /var/log/clx.log; the same /metrics and data/ checkssame management routes through the service port; kubectl exec <pod> -- tail /var/log/clx.log; dpfctl describe conditions
Docsguide chapters "Telemetry Providers" and "Data Export Options", cited by name and read live when a specific row is neededsamesame, 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 commented enable-provider= lines in your generated dts_config.ini" instead.

ProviderComponents / what it readsDocumented option familyPrerequisite on the target
sysfsib_port, hw_port, devices, ib_mr_cache, eth, hwmon, bf_ptm — NIC/port counters from sysfssysfs-cset-path, sysfs-allowed-ports, sysfs-excluded-ports, sysfs-invalid-counter-valuesysfs visibility of the devices (host namespaces on shape B)
ethtoolper-interface ethtool statisticsethtool-interfaces, ethtool-interfaces-match-method=exact, ethtool-fieldset-fileinterfaces visible in the container's net namespace
tc, ifconfig, vnic, ppcc_ethtraffic-control, interface, virtual-NIC and programmable-congestion-control counterssee guideppcc_eth uses MFT devices (/dev/mst, /usr/lib64/mft mount on shape B)
nvidia_smi, dcgm — host shape (B) with GPUs onlyGPU metrics via nvidia-smi / DCGM on an x86/aarch64 host that has NVIDIA GPUs; never on a BlueField (A)/(C) — the DPU has no GPUnvidia_smi_max_processes, nvsmi_with_numeric_fields; dcgm_events_enable_common_fieldsGPU present + NVIDIA container toolkit (--gpus all on shape B; drop the flag otherwise)
bfperfBlueField performance counterssee guideBlueField Arm side
storageNFS / block / Lustre volumesstorage-nfs-volumes=all, storage-devices=all, storage-lustre-volumes=all, storage-lustre-llite-dirthe mounts must be visible in the container
amberdevice diagnostics via MFTamber_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_freqfirmware diagnostic datadiagnostic-data-yml-file=/config/diagnostic_data_configs/all-single-port.yml, diagnostic-data-timestamp-collection-type, diagnostic-data-timestamp-source=RTC|FRCfwctl 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=ignoresee 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
ExporterDirectionConfigured byConsumer must
Prometheus endpointpullprometheus=<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 entryreach <addr>:<port>/metrics — the guide's Grafana recipe uses static_configs: targets: ["<dpu-ip>:9100"]
Fluent Bit forwardpushfluentbit-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)pushopen-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 Writepushremote-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 generalexpose a remote-write endpoint
Storage (binary files)localoutput=/data -> host .../telemetry/data; readable with clx_read from the collectx-clxapidev packagenothing 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.ini beside dts_config.ini, enabled with level-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 in configMapData.levelLabels — a template-only key (rendered into level_labels.ini by the ConfigMap template, absent from values.yaml, so helm show values will not list it; verify with helm template on the pinned chart version), while the fleet-scale path is: per-DPU DPUDevice.spec.values rendered by a DPUFlavorTemplate Go template into a DPUFlavor configFiles entry for level_labels.ini, referenced from DPUDeployment.spec.dpus.flavorTemplate or DPUSet.spec.dpuTemplate.spec.dpuFlavorTemplate. Rendered sections: [global_labels] [device_labels] [device_mapping] [data_types_mapping]. Preview with dpfctl 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 with helm show values and the DPF level-labels page which carrier the pinned chart wires into level-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 -host suffix. A BlueField image, a host pkg-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-telemetry chart has its own version series (e.g. 1.26.5, 1.25.5 observed 2026-09-16) and pins the image tag internally; inspect with helm show chart / helm show values rather 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.ini generated 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).

  1. Image / tag layer — pull fails or the tag does not exist (pod stuck pulling in crictl pods / pod status; docker run exits before the container starts). Cause is almost always a fabricated or mistyped tag, a DPU tag used on a host (or -host on a DPU), or missing NGC credentials in DPF (the chart's imagePullSecrets key — confirm with helm show values). Owner: NGC tag list.

  2. Manifest / pod scheduling layer — yaml present but pod not created (kubelet did not pick up /etc/kubelet.d, malformed yaml, or on DPF DPUService conditions ApplicationPrereqsReconciled / ApplicationsReconciled false, nodeSelector / tolerations excluding every DPU). Owner: kubelet / DPF operator; mechanics in doca-container-deployment ## debug (doca-container-deployment/TASKS.md#debug).

  3. Init container / config generation layer — telemetry-init.sh ran against a non-empty dir and left stale config in place; on the host the documented DTS_CONFIG_DIR=host prefix was omitted from the init step; on BlueField enable-fluent-forward.sh pointed at an unreachable -i/-p; after an upgrade the freshly downloaded yaml carries the documented default -i=127.0.0.1 -p=24224 and enable-fluent-forward.sh overwrites fluent_bit_configs on every init even when the config dir is non-empty (the non-empty rule protects only telemetry-init.sh output), 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).

  4. DTS process and provider prerequisites layer — the main process restarts in a loop or logs provider errors: dpe not started for grpc.*, fwctl not loaded for diagnostic_data_*, /dev/mst or MFT libs not exposed for amber / ppcc_eth, GPU toolkit missing for nvidia_smi / dcgm, host namespaces missing on shape B so sysfs / ethtool see nothing. Owner: the provider's prerequisite row in the Providers catalogue.

  5. 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.port differs from the port in spec.configPorts (or the chart's exposedPorts, if present — confirm with helm 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 reading helm show values. Owner: this skill.

  6. 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 ps then crictl logs <container-id>, plus the persisted copy in the host directory the pod yaml maps to the container's /var/log (/var/log/doca/telemetry in the shipped doca_telemetry_standalone.yaml — confirm from its volumes: block); (B) docker logs doca-telemetry while it runs, and the /var/log bind mount at /opt/mellanox/doca/services/telemetry/log on 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 logs on 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>/management prints the route table for your build — read it there rather than from memory. The routes that matter for deployment debugging: /management/provider (statistics and run_status of every provider — the live answer to "which providers are actually running", layer 4), /management/provider/<name> (one provider's runtime status), /management/exporter (state and statistics of 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, not prometheus), /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 behind prometheus-fset-indexes and the chart's counterset.*; 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 in clx.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 going FATAL — and is where a respawn or a restart loop shows; the collector's own log (clx.log in the mounted log dir, rotated at ~10 MB into clx.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: ls the mounted log directory and name what is there. Order: the start-up block (collector log) first — it prints # of enabled providers / # of disabled providers with 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 /metrics or the destination, not from log cadence. Verbosity: the verbose= key in the generated dts_config.ini carries 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 commented syslog-and-stream option, 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>/metrics twice, at least two update intervals apart (default update=1000 ms) 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 ps uptime / pod restart count flat across the same window). This is the step-5 evidence of the universal verification contract in TASKS.md ## test.

  • Data directory. With output=/data, files appear under the host data/ 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=all reports conditions such as ApplicationPrereqsReconciled, 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 in doca-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-safety CAPABILITIES.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.privileged key (confirm with helm 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) and systemctl start dpe below; and do not remove privileged mode while promising the providers will still work. --gpus all is a shape-(B) host flag only.

  • Device exposure. the MST device mapping, the /usr/lib64/mft mount, /dev/fwctl/fwctl*, and --gpus all hand 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 for grpc.* 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 with confirmation_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 render first and schedule the rollout consciously.

  • Config reset deletes operator configuration. "Delete all files in .../telemetry/config/, restart DTS" also removes hand-edited dts_config.ini, level_labels.ini, and fluent_bit_configs. Back the directory up before resetting; on BlueField, removing /etc/kubelet.d/doca_telemetry_standalone.yaml disables telemetry at the next boot — say so.

  • Rollback is cheap: remove the yaml from /etc/kubelet.d, removing the doca-telemetry container, or kubectl delete -f DPUService.yaml (on the DPUDeployment route: remove the dts entry from DPUDeployment.spec.services or revert the DPUServiceConfiguration values and re-apply; reverting a flavor-template / DPUDevice label change reprovisions DPUs again — schedule it like the forward change and preview with dpfctl 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:

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