Skip to content

feat(dpu): otel tracing support - #4886

Open
akorobkov-nvda wants to merge 3 commits into
NVIDIA:mainfrom
akorobkov-nvda:feat/dpu-otel-tracing
Open

feat(dpu): otel tracing support#4886
akorobkov-nvda wants to merge 3 commits into
NVIDIA:mainfrom
akorobkov-nvda:feat/dpu-otel-tracing

Conversation

@akorobkov-nvda

@akorobkov-nvda akorobkov-nvda commented Aug 12, 2026

Copy link
Copy Markdown
Contributor
  • Adds tracing support to the DPF nico-otelcol and non-DPF otel collectors. DPU workloads (eg. ovnkube-node) can emit otel tracing spans without direct access to mTLS credentials
  • Adds a localhost only OTLP/gRPC receiver and a traces pipeline that forwards spans to the site level otel receiver

Related issues

Type of Change

  • Add - New feature or capability

Testing

  • Manual testing performed

@akorobkov-nvda
akorobkov-nvda requested a review from a team as a code owner August 12, 2026 17:20
@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 3b0d972b-c5f1-4134-bfa2-ef6240f25a16

📥 Commits

Reviewing files that changed from the base of the PR and between 072d49c and da06f41.

📒 Files selected for processing (3)
  • bluefield/charts/nico-otelcol/files/otel_config.yaml
  • bluefield/otel/otel_config.yaml
  • docs/observability/tracing.md
🚧 Files skipped from review as they are similar to previous changes (2)
  • docs/observability/tracing.md
  • bluefield/otel/otel_config.yaml

Summary by CodeRabbit

  • New Features

    • Added support for collecting DPU workload traces through OTLP/gRPC.
    • Added workload metadata to improve trace attribution.
    • Added batching for trace processing.
    • Forwarded workload traces through the site telemetry pipeline.
  • Documentation

    • Added guidance for configuring DPU workload tracing, security, forwarding, and emitted metadata.
    • Simplified documentation headings and navigation links.

Walkthrough

The collector configurations now accept DPU workload traces through a local OTLP/gRPC receiver, add workload resource attribution and batching, and export traces through otlp/site. The documentation describes endpoint configuration, loopback access, forwarding, and trace resource attributes.

Changes

DPU workload tracing

Layer / File(s) Summary
Trace receiver and processors
bluefield/otel/otel_config.yaml, bluefield/charts/nico-otelcol/files/otel_config.yaml
Both configurations define the otlp/workloads receiver on 127.0.0.1:4317, an 8,192-item trace batch with a 5-second timeout, and the component: dpu-workloads resource attribute.
Workload trace export pipeline
bluefield/otel/otel_config.yaml, bluefield/charts/nico-otelcol/files/otel_config.yaml
Both configurations add the traces/workloads pipeline with memory limiting, resource detection, file-resource enrichment, workload labeling, batching, and export to otlp/site.
Tracing documentation and navigation
docs/observability/tracing.md
The documentation updates heading anchors and documents DPU workload endpoint configuration, loopback access, mTLS forwarding, and emitted resource attributes.

Estimated code review effort: 2 (Simple) | ~10 minutes

Merge Risk: 🔵 Low · up to da06f

Tracing may fail when workloads and the collector do not share the localhost network namespace, and oversized trace batches could be rejected and dropped because no maximum is configured. The PR is mergeable with explicit owner awareness and follow-up on endpoint networking and receiver batch limits.

Sequence Diagram(s)

sequenceDiagram
  participant DPUWorkload
  participant NicoOTelcol
  participant SiteOTelReceiver
  DPUWorkload->>NicoOTelcol: Send OTLP/gRPC spans to 127.0.0.1:4317
  NicoOTelcol->>NicoOTelcol: Enrich, label, and batch workload traces
  NicoOTelcol->>SiteOTelReceiver: Export traces through otlp/site
Loading
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the primary change: adding DPU OpenTelemetry tracing support.
Description check ✅ Passed The description directly explains the new local OTLP receiver and trace forwarding behavior.
Linked Issues check ✅ Passed The changes implement the local receiver, traces pipeline, upstream forwarding, and required tracing documentation described in issue #4276.
Out of Scope Changes check ✅ Passed The configuration and documentation changes are directly related to the tracing feature and issue #4276 objectives.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (2)
bluefield/otel/otel_config.yaml (2)

416-425: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

Fail the release when workload pipeline validation fails.

bluefield/otel/otelcol-wrapper (Lines [27]-[34]) logs a warning and starts without ${ADDITIONAL_CONFIGS} when validation fails. A bad receiver or processor reference here can therefore disable workload tracing while the collector remains running. Validate this configuration and the rendered Helm configuration in CI. Fail the release when validation fails.

As per path instructions, this BlueField YAML review checks failure recovery and observability coverage.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@bluefield/otel/otel_config.yaml` around lines 416 - 425, Update validation
around the traces/workloads pipeline and the bluefield/otel/otelcol-wrapper flow
so invalid receiver or processor references cause a non-zero failure instead of
starting without ADDITIONAL_CONFIGS. Add CI checks for both the BlueField YAML
and the rendered Helm configuration, and ensure any validation failure fails the
release.

Source: Path instructions


248-250: 🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick win

Define the trace batch upper bound. send_batch_size triggers a flush but does not cap the outgoing batch. If 8,192 spans is the required maximum, add send_batch_max_size: 8192 to batch/traces in both configuration files. Otherwise, document that send_batch_size is only a flush threshold.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@bluefield/otel/otel_config.yaml` around lines 248 - 250, Add
send_batch_max_size: 8192 to the batch/traces processor in
bluefield/otel/otel_config.yaml (lines 248-250) and
bluefield/charts/nico-otelcol/files/otel_config.yaml (lines 251-253), ensuring
8,192 spans is the enforced outgoing batch maximum.

Source: Path instructions

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@bluefield/otel/otel_config.yaml`:
- Around line 416-425: Update validation around the traces/workloads pipeline
and the bluefield/otel/otelcol-wrapper flow so invalid receiver or processor
references cause a non-zero failure instead of starting without
ADDITIONAL_CONFIGS. Add CI checks for both the BlueField YAML and the rendered
Helm configuration, and ensure any validation failure fails the release.
- Around line 248-250: Add send_batch_max_size: 8192 to the batch/traces
processor in bluefield/otel/otel_config.yaml (lines 248-250) and
bluefield/charts/nico-otelcol/files/otel_config.yaml (lines 251-253), ensuring
8,192 spans is the enforced outgoing batch maximum.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 041b860a-6cd4-4e46-8436-48d210db1f3b

📥 Commits

Reviewing files that changed from the base of the PR and between e7f24b6 and c3bb95d.

📒 Files selected for processing (2)
  • bluefield/charts/nico-otelcol/files/otel_config.yaml
  • bluefield/otel/otel_config.yaml

@github-actions

Copy link
Copy Markdown

@akorobkov-nvda akorobkov-nvda added helm charts bluefield Related to Bluefield provisioning / lifecycle labels Aug 12, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
docs/observability/tracing.md (1)

522-526: 🗄️ Data Integrity & Integration | 🔵 Trivial | ⚡ Quick win

Prefer trace-scoped OTLP variables.

OTEL_EXPORTER_OTLP_ENDPOINT and OTEL_EXPORTER_OTLP_PROTOCOL configure all OTLP signals. The documented collector change adds a traces pipeline. If a workload also emits metrics or logs, this example sends those signals to an endpoint that this section does not configure for them. Use the trace-scoped variables, or state that the endpoint is limited to trace-only workloads. (opentelemetry.io)

Proposed fix
-OTEL_EXPORTER_OTLP_ENDPOINT="http://127.0.0.1:4317"
-OTEL_EXPORTER_OTLP_PROTOCOL="grpc"
+OTEL_EXPORTER_OTLP_TRACES_ENDPOINT="http://127.0.0.1:4317"
+OTEL_EXPORTER_OTLP_TRACES_PROTOCOL="grpc"

-  - name: OTEL_EXPORTER_OTLP_ENDPOINT
+  - name: OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
...
-  - name: OTEL_EXPORTER_OTLP_PROTOCOL
+  - name: OTEL_EXPORTER_OTLP_TRACES_PROTOCOL

Also applies to: 530-537

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/observability/tracing.md` around lines 522 - 526, Update the tracing
documentation examples using OTEL_EXPORTER_OTLP_ENDPOINT and
OTEL_EXPORTER_OTLP_PROTOCOL to use the trace-scoped
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT and OTEL_EXPORTER_OTLP_TRACES_PROTOCOL
variables, ensuring the configuration applies only to traces.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/observability/tracing.md`:
- Around line 522-526: Update the shell example’s OTEL_EXPORTER_OTLP_ENDPOINT
and OTEL_EXPORTER_OTLP_PROTOCOL assignments to use export so both variables are
inherited by child processes.
- Around line 528-543: Update the Kubernetes DPF tracing documentation around
the OTLP endpoint example to state that the collector uses hostNetwork and
127.0.0.1:4317 is reachable only by workloads sharing the node network
namespace, such as ovnkube-node. Document that loopback does not authenticate
callers within that namespace, and add the supported Service endpoint for
workloads that cannot use host networking.

---

Nitpick comments:
In `@docs/observability/tracing.md`:
- Around line 522-526: Update the tracing documentation examples using
OTEL_EXPORTER_OTLP_ENDPOINT and OTEL_EXPORTER_OTLP_PROTOCOL to use the
trace-scoped OTEL_EXPORTER_OTLP_TRACES_ENDPOINT and
OTEL_EXPORTER_OTLP_TRACES_PROTOCOL variables, ensuring the configuration applies
only to traces.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: bf4572c0-968f-49fc-9806-673b88f65041

📥 Commits

Reviewing files that changed from the base of the PR and between c3bb95d and 04321f2.

📒 Files selected for processing (1)
  • docs/observability/tracing.md

Comment thread docs/observability/tracing.md
Comment thread docs/observability/tracing.md
@coderabbitai

coderabbitai Bot commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

Note

GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bluefield Related to Bluefield provisioning / lifecycle helm charts

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: Add tracing support for DPU workloads in nico-otelcol

1 participant