Skip to content

Add Tracing Exporters configuration guide for Dynatrace#856

Merged
rapids-bot[bot] merged 22 commits intoNVIDIA:developfrom
robertjahn:develop
Sep 30, 2025
Merged

Add Tracing Exporters configuration guide for Dynatrace#856
rapids-bot[bot] merged 22 commits intoNVIDIA:developfrom
robertjahn:develop

Conversation

@robertjahn
Copy link
Contributor

@robertjahn robertjahn commented Sep 26, 2025

Add Tracing Exporters configuration guide for Dynatrace
Closes #855

Summary by CodeRabbit

  • Documentation
    • Added a step-by-step Dynatrace guide for streaming OpenTelemetry traces, with setup, collector config, deployment example, telemetry enablement, and viewing traces.
    • Reworked tracing docs into a modular layout linking dedicated exporter guides and examples.
    • Updated "Available Tracing Exporters" ordering and public references to include Catalyst, Custom Exporters, Dynatrace, File Export, Patronus, Phoenix, and W&B Weave; expanded cross-links and examples.

Signed-off-by: robertjahn <robjahn@gmail.com>
Signed-off-by: robertjahn <robjahn@gmail.com>
@robertjahn robertjahn requested a review from a team as a code owner September 26, 2025 13:41
@copy-pr-bot
Copy link

copy-pr-bot bot commented Sep 26, 2025

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

@coderabbitai
Copy link

coderabbitai bot commented Sep 26, 2025

Walkthrough

Updates Observe docs: reworks the "Available Tracing Exporters" list and navigation in the observe index (removes W&B Weave; adds Catalyst, Patronus, Dynatrace, File Export, Custom Exporters, Phoenix; reorders entries) and adds a new Dynatrace guide explaining OTLP/OTel Collector configuration to send traces to Dynatrace.

Changes

Cohort / File(s) Summary
Observe index & navigation
docs/source/workflows/observe/index.md
Reworks "Available Tracing Exporters" list and toctree: removes W&B Weave, adds Catalyst, Patronus, Dynatrace, File Export, Custom Exporters, Phoenix; reorders public exporter entries, updates narrative links/sections and bottom example list.
Dynatrace tracing guide (new)
docs/source/workflows/observe/observe-workflow-with-dynatrace.md
New guide for streaming OpenTelemetry traces from NeMo Agent workflows to Dynatrace via an OTLP/otlphttp exporter and an OTel Collector: Dynatrace token scopes, collector config snippet, Docker deployment example, NeMo OpenTelemetry extras and workflow telemetry settings, and verification steps in Dynatrace.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor User
  participant Workflow as NeMo Workflow
  participant OTelSDK as OpenTelemetry SDK
  participant Collector as OTel Collector
  participant Dynatrace as Dynatrace OTLP Ingest

  User->>Workflow: Run workflow with telemetry enabled
  Workflow->>OTelSDK: Emit spans/events
  OTelSDK->>Collector: Export spans via OTLP (otlphttp)
  Note right of Collector #D6EAF8: Collector injects Dynatrace API token/header per config

  alt success
    Collector->>Dynatrace: Forward OTLP data
    Dynatrace-->>Collector: 200 OK
  else failure
    Collector-->>Collector: Retry/backoff per config
  end

  User->>Dynatrace: Inspect traces in Distributed Tracing App
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Out of Scope Changes Check ⚠️ Warning The pull request includes updates to multiple tracing exporters entries beyond Dynatrace, such as removing W&B Weave and Phoenix and adding Catalyst, Patronus, and File Export, which were not requested by the linked issue and fall outside its scope. Please limit changes to Dynatrace-related documentation or split unrelated exporter updates into a separate pull request to maintain clear scope alignment with issue #855.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title Check ✅ Passed The title "Add Tracing Exporters configuration guide for Dynatrace" uses imperative mood, is under the 72-character limit, and clearly describes the primary change of adding Dynatrace documentation.
Linked Issues Check ✅ Passed The pull request updates the Observe workflows index and introduces a dedicated Dynatrace configuration guide file, directly fulfilling the linked issue’s request to add Tracing Exporters configuration documentation for Dynatrace.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.
✨ Finishing touches
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🧪 Early access (Sonnet 4.5): enabled

We are currently testing the Sonnet 4.5 model, which is expected to improve code review quality. However, this model may lead to increased noise levels in the review comments. Please disable the early access features if the noise level causes any inconvenience.

Note:

  • Public repositories are always opted into early access features.
  • You can enable or disable early access features from the CodeRabbit UI or by updating the CodeRabbit configuration file.

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

@coderabbitai coderabbitai bot added doc Improvements or additions to documentation external This issue was filed by someone outside of the NeMo Agent toolkit team labels Sep 26, 2025
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 5

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 74a2ca8 and c954d59.

⛔ Files ignored due to path filters (1)
  • docs/source/_static/dynatrace-trace.png is excluded by !**/*.png
📒 Files selected for processing (2)
  • docs/source/workflows/observe/index.md (1 hunks)
  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md (1 hunks)
🧰 Additional context used
📓 Path-based instructions (3)
docs/source/**/*.md

📄 CodeRabbit inference engine (.cursor/rules/general.mdc)

docs/source/**/*.md: Use the official naming throughout documentation: first use “NVIDIA NeMo Agent toolkit”, subsequent “NeMo Agent toolkit”; never use deprecated names (Agent Intelligence toolkit, aiqtoolkit, AgentIQ, AIQ/aiq)
Documentation sources are Markdown files under docs/source; images belong in docs/source/_static
Keep docs in sync with code; documentation pipeline must pass Sphinx and link checks; avoid TODOs/FIXMEs/placeholders; avoid offensive/outdated terms; ensure spelling correctness
Do not use words listed in ci/vale/styles/config/vocabularies/nat/reject.txt; accepted terms in accept.txt are allowed

Files:

  • docs/source/workflows/observe/index.md
  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md
**/*

⚙️ CodeRabbit configuration file

**/*: # Code Review Instructions

  • Ensure the code follows best practices and coding standards. - For Python code, follow
    PEP 20 and
    PEP 8 for style guidelines.
  • Check for security vulnerabilities and potential issues. - Python methods should use type hints for all parameters and return values.
    Example:
    def my_function(param1: int, param2: str) -> bool:
        pass
  • For Python exception handling, ensure proper stack trace preservation:
    • When re-raising exceptions: use bare raise statements to maintain the original stack trace,
      and use logger.error() (not logger.exception()) to avoid duplicate stack trace output.
    • When catching and logging exceptions without re-raising: always use logger.exception()
      to capture the full stack trace information.

Documentation Review Instructions - Verify that documentation and comments are clear and comprehensive. - Verify that the documentation doesn't contain any TODOs, FIXMEs or placeholder text like "lorem ipsum". - Verify that the documentation doesn't contain any offensive or outdated terms. - Verify that documentation and comments are free of spelling mistakes, ensure the documentation doesn't contain any

words listed in the ci/vale/styles/config/vocabularies/nat/reject.txt file, words that might appear to be
spelling mistakes but are listed in the ci/vale/styles/config/vocabularies/nat/accept.txt file are OK.

Misc. - All code (except .mdc files that contain Cursor rules) should be licensed under the Apache License 2.0,

and should contain an Apache License 2.0 header comment at the top of each file.

  • Confirm that copyright years are up-to date whenever a file is changed.

Files:

  • docs/source/workflows/observe/index.md
  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md
docs/source/**/*

⚙️ CodeRabbit configuration file

This directory contains the source code for the documentation. All documentation should be written in Markdown format. Any image files should be placed in the docs/source/_static directory.

Files:

  • docs/source/workflows/observe/index.md
  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md
🧠 Learnings (1)
📚 Learning: 2025-09-23T18:39:15.023Z
Learnt from: CR
PR: NVIDIA/NeMo-Agent-Toolkit#0
File: .cursor/rules/general.mdc:0-0
Timestamp: 2025-09-23T18:39:15.023Z
Learning: Applies to docs/source/**/*.md : Use the official naming throughout documentation: first use “NVIDIA NeMo Agent toolkit”, subsequent “NeMo Agent toolkit”; never use deprecated names (Agent Intelligence toolkit, aiqtoolkit, AgentIQ, AIQ/aiq)

Applied to files:

  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md
🪛 markdownlint-cli2 (0.18.1)
docs/source/workflows/observe/observe-workflow-with-dynatrace.md

10-10: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


117-117: Images should have alternate text (alt text)

(MD045, no-alt-text)

robertjahn and others added 5 commits September 26, 2025 09:48
Signed-off-by: robertjahn <robjahn@gmail.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Signed-off-by: Rob Jahn <robjahn@gmail.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Signed-off-by: Rob Jahn <robjahn@gmail.com>
…Dynatrace

Signed-off-by: robertjahn <robjahn@gmail.com>
@willkill07 willkill07 added the non-breaking Non-breaking change label Sep 26, 2025
…ion guide for Dynatrace

Signed-off-by: robertjahn <robjahn@gmail.com>
Signed-off-by: robertjahn <robjahn@gmail.com>
Signed-off-by: robertjahn <robjahn@gmail.com>
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 4

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
docs/source/workflows/observe/index.md (1)

20-20: Use the required first-mention branding: “NVIDIA NeMo Agent toolkit”

This file’s first mention should include NVIDIA.

Apply:

-The NeMo Agent toolkit uses a flexible, plugin-based observability system that provides comprehensive support for configuring logging, tracing, and metrics for workflows. Users can configure multiple telemetry exporters simultaneously from the available options or create custom integrations. The observability system:
+The NVIDIA NeMo Agent toolkit uses a flexible, plugin-based observability system that provides comprehensive support for configuring logging, tracing, and metrics for workflows. Users can configure multiple telemetry exporters simultaneously from the available options or create custom integrations. The observability system:

Based on learnings

🧹 Nitpick comments (5)
docs/source/workflows/observe/observe-workflow-with-dynatrace.md (2)

74-82: Simplify install instructions to only what Dynatrace needs (OTel extras)

Reduces confusion and avoids encouraging installing all telemetry extras.

Apply:

-# Install all optional telemetry extras
-uv pip install -e '.[telemetry]'
-
-# Install specific telemetry extras
-uv pip install -e '.[opentelemetry]'
+# Install the OpenTelemetry extras (required for Dynatrace)
+uv pip install -e '.[opentelemetry]'

96-96: Prefer localhost over 0.0.0.0 for client endpoint

0.0.0.0 is a bind address; clients should use localhost.

Apply:

-        endpoint: http://0.0.0.0:4318/v1/traces
+        endpoint: http://localhost:4318/v1/traces
docs/source/workflows/observe/index.md (3)

109-111: Minor wording: singular “Collector”

Aligns with linked page title and common usage.

Apply:

-  - See [Observing with OTel Collector](./observe-workflow-with-otel-collector.md) with [OpenTelemetry Collectors](https://opentelemetry.io/docs/collector/).
+  - See [Observing with OTel Collector](./observe-workflow-with-otel-collector.md) with the [OpenTelemetry Collector](https://opentelemetry.io/docs/collector/).

122-122: Consistent casing: use “NeMo Agent toolkit” (lowercase ‘t’) after first mention

Matches the style guide for subsequent mentions.

Apply:

-### NeMo Agent Toolkit Observability Components
+### NeMo Agent toolkit Observability Components

Based on learnings


162-167: Add Dynatrace guide to the toctree for discoverability

Users won’t find the new guide via the sidebar without a toctree entry.

Apply:

 Observing with Catalyst <./observe-workflow-with-catalyst.md>
 Observing with Galileo <./observe-workflow-with-galileo.md>
 Observing with OTEL Collector <./observe-workflow-with-otel-collector.md>
+Observing with Dynatrace <./observe-workflow-with-dynatrace.md>
 Observing with Phoenix <./observe-workflow-with-phoenix.md>
 Observing with W&B Weave <./observe-workflow-with-weave.md>
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 8db382d and 182dce7.

📒 Files selected for processing (2)
  • docs/source/workflows/observe/index.md (2 hunks)
  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md (1 hunks)
🧰 Additional context used
📓 Path-based instructions (3)
docs/source/**/*.md

📄 CodeRabbit inference engine (.cursor/rules/general.mdc)

docs/source/**/*.md: Use the official naming throughout documentation: first use “NVIDIA NeMo Agent toolkit”, subsequent “NeMo Agent toolkit”; never use deprecated names (Agent Intelligence toolkit, aiqtoolkit, AgentIQ, AIQ/aiq)
Documentation sources are Markdown files under docs/source; images belong in docs/source/_static
Keep docs in sync with code; documentation pipeline must pass Sphinx and link checks; avoid TODOs/FIXMEs/placeholders; avoid offensive/outdated terms; ensure spelling correctness
Do not use words listed in ci/vale/styles/config/vocabularies/nat/reject.txt; accepted terms in accept.txt are allowed

Files:

  • docs/source/workflows/observe/index.md
  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md
**/*

⚙️ CodeRabbit configuration file

**/*: # Code Review Instructions

  • Ensure the code follows best practices and coding standards. - For Python code, follow
    PEP 20 and
    PEP 8 for style guidelines.
  • Check for security vulnerabilities and potential issues. - Python methods should use type hints for all parameters and return values.
    Example:
    def my_function(param1: int, param2: str) -> bool:
        pass
  • For Python exception handling, ensure proper stack trace preservation:
    • When re-raising exceptions: use bare raise statements to maintain the original stack trace,
      and use logger.error() (not logger.exception()) to avoid duplicate stack trace output.
    • When catching and logging exceptions without re-raising: always use logger.exception()
      to capture the full stack trace information.

Documentation Review Instructions - Verify that documentation and comments are clear and comprehensive. - Verify that the documentation doesn't contain any TODOs, FIXMEs or placeholder text like "lorem ipsum". - Verify that the documentation doesn't contain any offensive or outdated terms. - Verify that documentation and comments are free of spelling mistakes, ensure the documentation doesn't contain any

words listed in the ci/vale/styles/config/vocabularies/nat/reject.txt file, words that might appear to be
spelling mistakes but are listed in the ci/vale/styles/config/vocabularies/nat/accept.txt file are OK.

Misc. - All code (except .mdc files that contain Cursor rules) should be licensed under the Apache License 2.0,

and should contain an Apache License 2.0 header comment at the top of each file.

  • Confirm that copyright years are up-to date whenever a file is changed.

Files:

  • docs/source/workflows/observe/index.md
  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md
docs/source/**/*

⚙️ CodeRabbit configuration file

This directory contains the source code for the documentation. All documentation should be written in Markdown format. Any image files should be placed in the docs/source/_static directory.

Files:

  • docs/source/workflows/observe/index.md
  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md
🧠 Learnings (2)
📚 Learning: 2025-09-23T18:39:15.023Z
Learnt from: CR
PR: NVIDIA/NeMo-Agent-Toolkit#0
File: .cursor/rules/general.mdc:0-0
Timestamp: 2025-09-23T18:39:15.023Z
Learning: Applies to docs/source/**/*.md : Use the official naming throughout documentation: first use “NVIDIA NeMo Agent toolkit”, subsequent “NeMo Agent toolkit”; never use deprecated names (Agent Intelligence toolkit, aiqtoolkit, AgentIQ, AIQ/aiq)

Applied to files:

  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md
📚 Learning: 2025-09-23T18:39:15.023Z
Learnt from: CR
PR: NVIDIA/NeMo-Agent-Toolkit#0
File: .cursor/rules/general.mdc:0-0
Timestamp: 2025-09-23T18:39:15.023Z
Learning: Applies to **/README.@(md|ipynb) : Ensure READMEs follow the naming convention; avoid deprecated names; use “NeMo Agent Toolkit” (capital T) in headings

Applied to files:

  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md
🪛 markdownlint-cli2 (0.18.1)
docs/source/workflows/observe/observe-workflow-with-dynatrace.md

30-30: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)

🔇 Additional comments (2)
docs/source/workflows/observe/observe-workflow-with-dynatrace.md (2)

120-122: Add alt text to the image for accessibility (MD045)

Apply:

-  <img src="../../_static/dynatrace-trace.png" width="800">
+  <img src="../../_static/dynatrace-trace.png" alt="Dynatrace distributed trace view showing service spans and timings" width="800">

20-23: Lowercase logs.ingest scope

-    * `Logs.ingest`
+    * `logs.ingest`

Matches Dynatrace OTLP ingest token scopes.

Copy link
Contributor

@dagardner-nv dagardner-nv left a comment

Choose a reason for hiding this comment

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

Thanks for the PR!

… list with dynatrace

Signed-off-by: robertjahn <robjahn@gmail.com>
…toolkit references, adjust docker command to use latest image, adjust example config to use localhost

Signed-off-by: robertjahn <robjahn@gmail.com>
Signed-off-by: robertjahn <robjahn@gmail.com>
@robertjahn
Copy link
Contributor Author

dagardner-nv and willkill07
thank you for all your feedback. This should be ready now for you final review.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
docs/source/workflows/observe/index.md (1)

20-20: Use full branding on first mention.

Change the first occurrence to “NVIDIA NeMo Agent toolkit”.

-The NeMo Agent toolkit uses a flexible, plugin-based observability system
+The NVIDIA NeMo Agent toolkit uses a flexible, plugin-based observability system

Based on learnings

🧹 Nitpick comments (5)
docs/source/workflows/observe/observe-workflow-with-dynatrace.md (2)

93-99: Install only what’s needed (avoid over-installing extras).

Dynatrace requires only the OpenTelemetry extras. Recommend removing the “all telemetry” install to reduce dependency footprint:

-# Install all optional telemetry extras
-uv pip install -e '.[telemetry]'
-
 # Install specific telemetry extras required for Dynatrace
 uv pip install -e '.[opentelemetry]'

83-87: Harden the Docker example (quote paths; optional name).

Safer with quoted $(pwd) and a container name:

-docker run -d -v $(pwd)/otelcollectorconfig.yaml:/etc/otelcol/config.yaml \
- -p 4318:4318 \
- dynatrace/dynatrace-otel-collector:latest
+docker run -d \
+  --name dynatrace-otel-collector \
+  -v "$(pwd)"/otelcollectorconfig.yaml:/etc/otelcol/config.yaml \
+  -p 4318:4318 \
+  dynatrace/dynatrace-otel-collector:latest
docs/source/workflows/observe/index.md (3)

120-120: Normalize casing: “toolkit” (not “Toolkit”).

-### NeMo Agent Toolkit Observability Components
+### NeMo Agent toolkit observability components

Based on learnings


156-165: Add Dynatrace guide to the toctree for navigation.

Include the new page so it appears in the sidebar.

 :hidden:
 :caption: Observe Workflows

 Observing with Catalyst <./observe-workflow-with-catalyst.md>
 Observing with Galileo <./observe-workflow-with-galileo.md>
 Observing with OTEL Collector <./observe-workflow-with-otel-collector.md>
+Observing with Dynatrace <./observe-workflow-with-dynatrace.md>
 Observing with Phoenix <./observe-workflow-with-phoenix.md>
 Observing with W&B Weave <./observe-workflow-with-weave.md>

113-114: Consistency nit: standardize “OpenTelemetry/OTel” naming.

Use a single form across list and toctree, e.g., “OpenTelemetry Collector (OTel Collector)”.

Also applies to: 162-162

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 182dce7 and 4816cf0.

📒 Files selected for processing (2)
  • docs/source/workflows/observe/index.md (1 hunks)
  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md (1 hunks)
🧰 Additional context used
📓 Path-based instructions (3)
docs/source/**/*.md

📄 CodeRabbit inference engine (.cursor/rules/general.mdc)

docs/source/**/*.md: Use the official naming throughout documentation: first use “NVIDIA NeMo Agent toolkit”, subsequent “NeMo Agent toolkit”; never use deprecated names (Agent Intelligence toolkit, aiqtoolkit, AgentIQ, AIQ/aiq)
Documentation sources are Markdown files under docs/source; images belong in docs/source/_static
Keep docs in sync with code; documentation pipeline must pass Sphinx and link checks; avoid TODOs/FIXMEs/placeholders; avoid offensive/outdated terms; ensure spelling correctness
Do not use words listed in ci/vale/styles/config/vocabularies/nat/reject.txt; accepted terms in accept.txt are allowed

Files:

  • docs/source/workflows/observe/index.md
  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md
**/*

⚙️ CodeRabbit configuration file

**/*: # Code Review Instructions

  • Ensure the code follows best practices and coding standards. - For Python code, follow
    PEP 20 and
    PEP 8 for style guidelines.
  • Check for security vulnerabilities and potential issues. - Python methods should use type hints for all parameters and return values.
    Example:
    def my_function(param1: int, param2: str) -> bool:
        pass
  • For Python exception handling, ensure proper stack trace preservation:
    • When re-raising exceptions: use bare raise statements to maintain the original stack trace,
      and use logger.error() (not logger.exception()) to avoid duplicate stack trace output.
    • When catching and logging exceptions without re-raising: always use logger.exception()
      to capture the full stack trace information.

Documentation Review Instructions - Verify that documentation and comments are clear and comprehensive. - Verify that the documentation doesn't contain any TODOs, FIXMEs or placeholder text like "lorem ipsum". - Verify that the documentation doesn't contain any offensive or outdated terms. - Verify that documentation and comments are free of spelling mistakes, ensure the documentation doesn't contain any

words listed in the ci/vale/styles/config/vocabularies/nat/reject.txt file, words that might appear to be
spelling mistakes but are listed in the ci/vale/styles/config/vocabularies/nat/accept.txt file are OK.

Misc. - All code (except .mdc files that contain Cursor rules) should be licensed under the Apache License 2.0,

and should contain an Apache License 2.0 header comment at the top of each file.

  • Confirm that copyright years are up-to date whenever a file is changed.

Files:

  • docs/source/workflows/observe/index.md
  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md
docs/source/**/*

⚙️ CodeRabbit configuration file

This directory contains the source code for the documentation. All documentation should be written in Markdown format. Any image files should be placed in the docs/source/_static directory.

Files:

  • docs/source/workflows/observe/index.md
  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md
🧠 Learnings (4)
📚 Learning: 2025-09-23T18:39:15.023Z
Learnt from: CR
PR: NVIDIA/NeMo-Agent-Toolkit#0
File: .cursor/rules/general.mdc:0-0
Timestamp: 2025-09-23T18:39:15.023Z
Learning: Applies to docs/source/**/*.md : Use the official naming throughout documentation: first use “NVIDIA NeMo Agent toolkit”, subsequent “NeMo Agent toolkit”; never use deprecated names (Agent Intelligence toolkit, aiqtoolkit, AgentIQ, AIQ/aiq)

Applied to files:

  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md
📚 Learning: 2025-09-23T18:39:15.023Z
Learnt from: CR
PR: NVIDIA/NeMo-Agent-Toolkit#0
File: .cursor/rules/general.mdc:0-0
Timestamp: 2025-09-23T18:39:15.023Z
Learning: Applies to **/README.@(md|ipynb) : Ensure READMEs follow the naming convention; avoid deprecated names; use “NeMo Agent Toolkit” (capital T) in headings

Applied to files:

  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md
📚 Learning: 2025-09-23T18:39:15.023Z
Learnt from: CR
PR: NVIDIA/NeMo-Agent-Toolkit#0
File: .cursor/rules/general.mdc:0-0
Timestamp: 2025-09-23T18:39:15.023Z
Learning: Every file must start with the standard SPDX Apache-2.0 header; keep copyright years up to date

Applied to files:

  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md
📚 Learning: 2025-09-23T18:39:15.023Z
Learnt from: CR
PR: NVIDIA/NeMo-Agent-Toolkit#0
File: .cursor/rules/general.mdc:0-0
Timestamp: 2025-09-23T18:39:15.023Z
Learning: All source files must include the SPDX Apache-2.0 header template; CI verifies via ci/scripts/github/checks.sh—do not bypass

Applied to files:

  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md
🪛 markdownlint-cli2 (0.18.1)
docs/source/workflows/observe/observe-workflow-with-dynatrace.md

138-138: Images should have alternate text (alt text)

(MD045, no-alt-text)

🔇 Additional comments (3)
docs/source/workflows/observe/observe-workflow-with-dynatrace.md (3)

137-139: Image reference valid – file exists at docs/source/_static/dynatrace-trace.png.


137-139: Add alt text for accessibility (MD045).

Provide concise alt text.

-  <img src="../../_static/dynatrace-trace.png" width="800">
+  <img src="../../_static/dynatrace-trace.png" alt="Dynatrace distributed trace view showing spans and timings" width="800">

91-99: Align subsequent mentions to “NeMo Agent toolkit” (drop NVIDIA prefix after first use).

Per the docs style guide, only the first mention should be “NVIDIA NeMo Agent toolkit”; subsequent mentions should be “NeMo Agent toolkit”. Apply:

-## Step 5: Install the NVIDIA NeMo Agent toolkit OpenTelemetry Subpackages
+## Step 5: Install the NeMo Agent toolkit OpenTelemetry subpackages

-## Step 6: Modify NVIDIA NeMo Agent toolkit Workflow Configuration
+## Step 6: Modify NeMo Agent toolkit workflow configuration

-From the root directory of the NVIDIA NeMo Agent toolkit library, install dependencies and run the pre-configured `simple_web_query` example.
+From the root directory of the NeMo Agent toolkit library, install dependencies and run the pre-configured `simple_web_query` example.

Based on learnings

Also applies to: 101-115, 119-119

Copy link
Member

@willkill07 willkill07 left a comment

Choose a reason for hiding this comment

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

Clarification on outstanding conversations still required.

Signed-off-by: robertjahn <robjahn@gmail.com>
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (3)
docs/source/workflows/observe/observe-workflow-with-dynatrace.md (3)

83-87: Harden the docker example: quote paths, add a name, and expose 4317 to match the grpc receiver.

Improves copy/paste reliability and aligns ports with the collector config.

-docker run -d -v $(pwd)/otelcollectorconfig.yaml:/etc/otelcol/config.yaml \
--p 4318:4318 \
-dynatrace/dynatrace-otel-collector:latest
+docker run -d --name dynatrace-otel-collector \
+  -v "$(pwd)"/otelcollectorconfig.yaml:/etc/otelcol/config.yaml \
+  -p 4318:4318 -p 4317:4317 \
+  dynatrace/dynatrace-otel-collector:latest

If you prefer to use only HTTP, keep the ports as-is and remove the grpc receiver from the config instead.


24-24: Capitalize consistently: “OTel Collector.”

Tiny wording nit to match usage elsewhere in the doc.

-* Configure your workflow (YAML) or Python script to send traces to the OTel collector.
+* Configure your workflow (YAML) or Python script to send traces to the OTel Collector.

93-99: Extras install scope: consider keeping only the opentelemetry group.

For Dynatrace, the OTel path should only require the opentelemetry extra; installing the broader telemetry group may pull unnecessary deps. Please confirm and trim to a single command if appropriate.

-# Install all optional telemetry extras
-uv pip install -e '.[telemetry]'
-
-# Install specific telemetry extras required for Dynatrace
-uv pip install -e '.[opentelemetry]'
+# Install the telemetry extras required for Dynatrace
+uv pip install -e '.[opentelemetry]'
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 4816cf0 and 601d113.

📒 Files selected for processing (1)
  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md (1 hunks)
🧰 Additional context used
📓 Path-based instructions (3)
docs/source/**/*.md

📄 CodeRabbit inference engine (.cursor/rules/general.mdc)

docs/source/**/*.md: Use the official naming throughout documentation: first use “NVIDIA NeMo Agent toolkit”, subsequent “NeMo Agent toolkit”; never use deprecated names (Agent Intelligence toolkit, aiqtoolkit, AgentIQ, AIQ/aiq)
Documentation sources are Markdown files under docs/source; images belong in docs/source/_static
Keep docs in sync with code; documentation pipeline must pass Sphinx and link checks; avoid TODOs/FIXMEs/placeholders; avoid offensive/outdated terms; ensure spelling correctness
Do not use words listed in ci/vale/styles/config/vocabularies/nat/reject.txt; accepted terms in accept.txt are allowed

Files:

  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md
**/*

⚙️ CodeRabbit configuration file

**/*: # Code Review Instructions

  • Ensure the code follows best practices and coding standards. - For Python code, follow
    PEP 20 and
    PEP 8 for style guidelines.
  • Check for security vulnerabilities and potential issues. - Python methods should use type hints for all parameters and return values.
    Example:
    def my_function(param1: int, param2: str) -> bool:
        pass
  • For Python exception handling, ensure proper stack trace preservation:
    • When re-raising exceptions: use bare raise statements to maintain the original stack trace,
      and use logger.error() (not logger.exception()) to avoid duplicate stack trace output.
    • When catching and logging exceptions without re-raising: always use logger.exception()
      to capture the full stack trace information.

Documentation Review Instructions - Verify that documentation and comments are clear and comprehensive. - Verify that the documentation doesn't contain any TODOs, FIXMEs or placeholder text like "lorem ipsum". - Verify that the documentation doesn't contain any offensive or outdated terms. - Verify that documentation and comments are free of spelling mistakes, ensure the documentation doesn't contain any

words listed in the ci/vale/styles/config/vocabularies/nat/reject.txt file, words that might appear to be
spelling mistakes but are listed in the ci/vale/styles/config/vocabularies/nat/accept.txt file are OK.

Misc. - All code (except .mdc files that contain Cursor rules) should be licensed under the Apache License 2.0,

and should contain an Apache License 2.0 header comment at the top of each file.

  • Confirm that copyright years are up-to date whenever a file is changed.

Files:

  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md
docs/source/**/*

⚙️ CodeRabbit configuration file

This directory contains the source code for the documentation. All documentation should be written in Markdown format. Any image files should be placed in the docs/source/_static directory.

Files:

  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md
🧠 Learnings (4)
📚 Learning: 2025-09-23T18:39:15.023Z
Learnt from: CR
PR: NVIDIA/NeMo-Agent-Toolkit#0
File: .cursor/rules/general.mdc:0-0
Timestamp: 2025-09-23T18:39:15.023Z
Learning: Applies to docs/source/**/*.md : Use the official naming throughout documentation: first use “NVIDIA NeMo Agent toolkit”, subsequent “NeMo Agent toolkit”; never use deprecated names (Agent Intelligence toolkit, aiqtoolkit, AgentIQ, AIQ/aiq)

Applied to files:

  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md
📚 Learning: 2025-09-23T18:39:15.023Z
Learnt from: CR
PR: NVIDIA/NeMo-Agent-Toolkit#0
File: .cursor/rules/general.mdc:0-0
Timestamp: 2025-09-23T18:39:15.023Z
Learning: Applies to **/README.@(md|ipynb) : Ensure READMEs follow the naming convention; avoid deprecated names; use “NeMo Agent Toolkit” (capital T) in headings

Applied to files:

  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md
📚 Learning: 2025-09-23T18:39:15.023Z
Learnt from: CR
PR: NVIDIA/NeMo-Agent-Toolkit#0
File: .cursor/rules/general.mdc:0-0
Timestamp: 2025-09-23T18:39:15.023Z
Learning: Every file must start with the standard SPDX Apache-2.0 header; keep copyright years up to date

Applied to files:

  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md
📚 Learning: 2025-09-23T18:39:15.023Z
Learnt from: CR
PR: NVIDIA/NeMo-Agent-Toolkit#0
File: .cursor/rules/general.mdc:0-0
Timestamp: 2025-09-23T18:39:15.023Z
Learning: All source files must include the SPDX Apache-2.0 header template; CI verifies via ci/scripts/github/checks.sh—do not bypass

Applied to files:

  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md
🪛 markdownlint-cli2 (0.18.1)
docs/source/workflows/observe/observe-workflow-with-dynatrace.md

138-138: Images should have alternate text (alt text)

(MD045, no-alt-text)

🔇 Additional comments (3)
docs/source/workflows/observe/observe-workflow-with-dynatrace.md (3)

1-16: SPDX/Apache-2.0 header present and correct.

Header matches repo policy. No action needed.


137-139: Add alt text for accessibility (MD045).

The image lacks alt text and will fail markdownlint and reduce accessibility.

-  <img src="../../_static/dynatrace-trace.png" width="800">
+  <img src="../../_static/dynatrace-trace.png" alt="Dynatrace distributed trace view showing service spans and timings" width="800">

91-91: Use secondary branding after first mention.

After the initial “NVIDIA NeMo Agent toolkit,” subsequent mentions should use “NeMo Agent toolkit.” This keeps docs consistent with the style guide.
Based on learnings

-## Step 5: Install the NVIDIA NeMo Agent toolkit OpenTelemetry Subpackages
+## Step 5: Install the NeMo Agent toolkit OpenTelemetry Subpackages
@@
-## Step 6: Modify NVIDIA NeMo Agent toolkit Workflow Configuration
+## Step 6: Modify NeMo Agent toolkit Workflow Configuration
@@
-From the root directory of the NVIDIA NeMo Agent toolkit library, install dependencies and run the pre-configured `simple_web_query` example.
+From the root directory of the NeMo Agent toolkit library, install dependencies and run the pre-configured `simple_web_query` example.

Also applies to: 101-101, 119-119

…o Agent toolkit

Signed-off-by: robertjahn <robjahn@gmail.com>
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (2)
docs/source/workflows/observe/index.md (2)

113-114: Unify “OpenTelemetry Collector” naming in link text

The list item uses “OpenTelemetry Collector” but the link text says “OTel Collector”. Prefer consistent “OpenTelemetry Collector”.

As per coding guidelines.

-113 - **[OpenTelemetry Collector](https://opentelemetry.io/docs/collector/)** - See [Observing with OTel Collector](./observe-workflow-with-otel-collector.md)
+113 - **[OpenTelemetry Collector](https://opentelemetry.io/docs/collector/)** - See [Observing with OpenTelemetry Collector](./observe-workflow-with-otel-collector.md)

163-163: Align toctree title with “OpenTelemetry Collector”

Use the same proper name as in the list and docs.

As per coding guidelines.

-163 Observing with OTEL Collector <./observe-workflow-with-otel-collector.md>
+163 Observing with OpenTelemetry Collector <./observe-workflow-with-otel-collector.md>
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 601d113 and 90e236a.

📒 Files selected for processing (1)
  • docs/source/workflows/observe/index.md (2 hunks)
🧰 Additional context used
📓 Path-based instructions (3)
docs/source/**/*.md

📄 CodeRabbit inference engine (.cursor/rules/general.mdc)

docs/source/**/*.md: Use the official naming throughout documentation: first use “NVIDIA NeMo Agent toolkit”, subsequent “NeMo Agent toolkit”; never use deprecated names (Agent Intelligence toolkit, aiqtoolkit, AgentIQ, AIQ/aiq)
Documentation sources are Markdown files under docs/source; images belong in docs/source/_static
Keep docs in sync with code; documentation pipeline must pass Sphinx and link checks; avoid TODOs/FIXMEs/placeholders; avoid offensive/outdated terms; ensure spelling correctness
Do not use words listed in ci/vale/styles/config/vocabularies/nat/reject.txt; accepted terms in accept.txt are allowed

Files:

  • docs/source/workflows/observe/index.md
**/*

⚙️ CodeRabbit configuration file

**/*: # Code Review Instructions

  • Ensure the code follows best practices and coding standards. - For Python code, follow
    PEP 20 and
    PEP 8 for style guidelines.
  • Check for security vulnerabilities and potential issues. - Python methods should use type hints for all parameters and return values.
    Example:
    def my_function(param1: int, param2: str) -> bool:
        pass
  • For Python exception handling, ensure proper stack trace preservation:
    • When re-raising exceptions: use bare raise statements to maintain the original stack trace,
      and use logger.error() (not logger.exception()) to avoid duplicate stack trace output.
    • When catching and logging exceptions without re-raising: always use logger.exception()
      to capture the full stack trace information.

Documentation Review Instructions - Verify that documentation and comments are clear and comprehensive. - Verify that the documentation doesn't contain any TODOs, FIXMEs or placeholder text like "lorem ipsum". - Verify that the documentation doesn't contain any offensive or outdated terms. - Verify that documentation and comments are free of spelling mistakes, ensure the documentation doesn't contain any

words listed in the ci/vale/styles/config/vocabularies/nat/reject.txt file, words that might appear to be
spelling mistakes but are listed in the ci/vale/styles/config/vocabularies/nat/accept.txt file are OK.

Misc. - All code (except .mdc files that contain Cursor rules) should be licensed under the Apache License 2.0,

and should contain an Apache License 2.0 header comment at the top of each file.

  • Confirm that copyright years are up-to date whenever a file is changed.

Files:

  • docs/source/workflows/observe/index.md
docs/source/**/*

⚙️ CodeRabbit configuration file

This directory contains the source code for the documentation. All documentation should be written in Markdown format. Any image files should be placed in the docs/source/_static directory.

Files:

  • docs/source/workflows/observe/index.md
🔇 Additional comments (3)
docs/source/workflows/observe/index.md (3)

106-109: Exporter entries look good and alphabetized

Dynatrace entry/linking and surrounding bullets read well. No issues from my side.


114-116: Looks good

Patronus, Phoenix, and W&B Weave entries are consistent with the list style.


161-161: Dynatrace toctree entry added — LGTM

The new toctree entry matches the exporter list and path.

…uotes for

Signed-off-by: robertjahn <robjahn@gmail.com>
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (3)
docs/source/workflows/observe/observe-workflow-with-dynatrace.md (3)

29-29: Minor copyedits for clarity and style.

-You will need access to your Dynatrace environment.  If you don’t have one you can simply [signup to get started](https://www.dynatrace.com/signup/)
+You need access to your Dynatrace environment. If you don’t have one, you can [sign up to get started](https://www.dynatrace.com/signup/).

33-33: Hyphenate compound modifier (“token-based”).

-Dynatrace APIs use token based authentication. To generate an access token:
+Dynatrace APIs use token-based authentication. To generate an access token:

84-86: Optional: name the container for easier lifecycle management.

Not required, but adds convenience when stopping/inspecting.

-docker run -d -v "$(pwd)"/otelcollectorconfig.yaml:/etc/otelcol/config.yaml \
- -p 4318:4318 \
- dynatrace/dynatrace-otel-collector:latest
+docker run -d --name dynatrace-otel-collector \
+  -v "$(pwd)"/otelcollectorconfig.yaml:/etc/otelcol/config.yaml \
+  -p 4318:4318 \
+  dynatrace/dynatrace-otel-collector:latest
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 90e236a and d4a2134.

📒 Files selected for processing (1)
  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md (1 hunks)
🧰 Additional context used
📓 Path-based instructions (3)
docs/source/**/*.md

📄 CodeRabbit inference engine (.cursor/rules/general.mdc)

docs/source/**/*.md: Use the official naming throughout documentation: first use “NVIDIA NeMo Agent toolkit”, subsequent “NeMo Agent toolkit”; never use deprecated names (Agent Intelligence toolkit, aiqtoolkit, AgentIQ, AIQ/aiq)
Documentation sources are Markdown files under docs/source; images belong in docs/source/_static
Keep docs in sync with code; documentation pipeline must pass Sphinx and link checks; avoid TODOs/FIXMEs/placeholders; avoid offensive/outdated terms; ensure spelling correctness
Do not use words listed in ci/vale/styles/config/vocabularies/nat/reject.txt; accepted terms in accept.txt are allowed

Files:

  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md
**/*

⚙️ CodeRabbit configuration file

**/*: # Code Review Instructions

  • Ensure the code follows best practices and coding standards. - For Python code, follow
    PEP 20 and
    PEP 8 for style guidelines.
  • Check for security vulnerabilities and potential issues. - Python methods should use type hints for all parameters and return values.
    Example:
    def my_function(param1: int, param2: str) -> bool:
        pass
  • For Python exception handling, ensure proper stack trace preservation:
    • When re-raising exceptions: use bare raise statements to maintain the original stack trace,
      and use logger.error() (not logger.exception()) to avoid duplicate stack trace output.
    • When catching and logging exceptions without re-raising: always use logger.exception()
      to capture the full stack trace information.

Documentation Review Instructions - Verify that documentation and comments are clear and comprehensive. - Verify that the documentation doesn't contain any TODOs, FIXMEs or placeholder text like "lorem ipsum". - Verify that the documentation doesn't contain any offensive or outdated terms. - Verify that documentation and comments are free of spelling mistakes, ensure the documentation doesn't contain any

words listed in the ci/vale/styles/config/vocabularies/nat/reject.txt file, words that might appear to be
spelling mistakes but are listed in the ci/vale/styles/config/vocabularies/nat/accept.txt file are OK.

Misc. - All code (except .mdc files that contain Cursor rules) should be licensed under the Apache License 2.0,

and should contain an Apache License 2.0 header comment at the top of each file.

  • Confirm that copyright years are up-to date whenever a file is changed.

Files:

  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md
docs/source/**/*

⚙️ CodeRabbit configuration file

This directory contains the source code for the documentation. All documentation should be written in Markdown format. Any image files should be placed in the docs/source/_static directory.

Files:

  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md
🧠 Learnings (4)
📚 Learning: 2025-09-23T18:39:15.023Z
Learnt from: CR
PR: NVIDIA/NeMo-Agent-Toolkit#0
File: .cursor/rules/general.mdc:0-0
Timestamp: 2025-09-23T18:39:15.023Z
Learning: Applies to docs/source/**/*.md : Use the official naming throughout documentation: first use “NVIDIA NeMo Agent toolkit”, subsequent “NeMo Agent toolkit”; never use deprecated names (Agent Intelligence toolkit, aiqtoolkit, AgentIQ, AIQ/aiq)

Applied to files:

  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md
📚 Learning: 2025-09-23T18:39:15.023Z
Learnt from: CR
PR: NVIDIA/NeMo-Agent-Toolkit#0
File: .cursor/rules/general.mdc:0-0
Timestamp: 2025-09-23T18:39:15.023Z
Learning: Applies to **/README.@(md|ipynb) : Ensure READMEs follow the naming convention; avoid deprecated names; use “NeMo Agent Toolkit” (capital T) in headings

Applied to files:

  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md
📚 Learning: 2025-09-23T18:39:15.023Z
Learnt from: CR
PR: NVIDIA/NeMo-Agent-Toolkit#0
File: .cursor/rules/general.mdc:0-0
Timestamp: 2025-09-23T18:39:15.023Z
Learning: Every file must start with the standard SPDX Apache-2.0 header; keep copyright years up to date

Applied to files:

  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md
📚 Learning: 2025-09-23T18:39:15.023Z
Learnt from: CR
PR: NVIDIA/NeMo-Agent-Toolkit#0
File: .cursor/rules/general.mdc:0-0
Timestamp: 2025-09-23T18:39:15.023Z
Learning: All source files must include the SPDX Apache-2.0 header template; CI verifies via ci/scripts/github/checks.sh—do not bypass

Applied to files:

  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md
🪛 markdownlint-cli2 (0.18.1)
docs/source/workflows/observe/observe-workflow-with-dynatrace.md

135-135: Images should have alternate text (alt text)

(MD045, no-alt-text)

🔇 Additional comments (4)
docs/source/workflows/observe/observe-workflow-with-dynatrace.md (4)

20-26: Content LGTM.

Intro, goals, and first-mention branding look correct and aligned with the style guide.


48-77: Collector config looks correct for Dynatrace OTLP.

Base endpoint, headers, and pipelines are sensible; metrics use cumulativetodelta as expected.


134-136: Add alt text for accessibility (MD045).

Image lacks alt text; add a concise description.

-  <img src="../../_static/dynatrace-trace.png" width="800">
+  <img src="../../_static/dynatrace-trace.png" alt="Dynatrace distributed trace view showing spans and timings" width="800">

91-96: Fix branding after first mention (“NeMo Agent toolkit” form).

Per docs style, only the first use includes “NVIDIA”; subsequent uses should be “NeMo Agent toolkit”. Also prefer sentence case in headings and “subpackages” lowercase.

Apply:

-## Step 5: Install the NVIDIA NeMo Agent toolkit OpenTelemetry Subpackages
+## Step 5: Install the NeMo Agent toolkit OpenTelemetry subpackages
@@
-## Step 6: Modify NVIDIA NeMo Agent toolkit Workflow Configuration
+## Step 6: Modify NeMo Agent toolkit workflow configuration
@@
-From the root directory of the NVIDIA NeMo Agent toolkit library, install dependencies and run the pre-configured `simple_web_query` example.
+From the root directory of the NeMo Agent toolkit library, install dependencies and run the pre-configured `simple_web_query` example.

Based on learnings

Also applies to: 98-100, 116-116

…eMo Agent toolkit

Signed-off-by: robertjahn <robjahn@gmail.com>
Signed-off-by: Will Killian <2007799+willkill07@users.noreply.github.com>
@willkill07
Copy link
Member

/ok to test 7d4bf25

@willkill07
Copy link
Member

/ok to test c030f45

Signed-off-by: Will Killian <wkillian@nvidia.com>
@willkill07
Copy link
Member

/ok to test aa70fad

@willkill07
Copy link
Member

/ok to test f0fb8f3

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (1)
docs/source/workflows/observe/observe-workflow-with-dynatrace.md (1)

31-43: Hyphenate compound adjective for style consistency.

When "token based" is used as a compound adjective modifying "authentication," it should be hyphenated.

Apply this diff:

-Dynatrace APIs use token based authentication. To generate an access token:
+Dynatrace APIs use token-based authentication. To generate an access token:
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between aa70fad and f0fb8f3.

📒 Files selected for processing (1)
  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md (1 hunks)
🧰 Additional context used
📓 Path-based instructions (3)
docs/source/**/*.md

📄 CodeRabbit inference engine (.cursor/rules/general.mdc)

docs/source/**/*.md: Use the official naming throughout documentation: first use “NVIDIA NeMo Agent toolkit”, subsequent “NeMo Agent toolkit”; never use deprecated names (Agent Intelligence toolkit, aiqtoolkit, AgentIQ, AIQ/aiq)
Documentation sources are Markdown files under docs/source; images belong in docs/source/_static
Keep docs in sync with code; documentation pipeline must pass Sphinx and link checks; avoid TODOs/FIXMEs/placeholders; avoid offensive/outdated terms; ensure spelling correctness
Do not use words listed in ci/vale/styles/config/vocabularies/nat/reject.txt; accepted terms in accept.txt are allowed

Files:

  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md
**/*

⚙️ CodeRabbit configuration file

**/*: # Code Review Instructions

  • Ensure the code follows best practices and coding standards. - For Python code, follow
    PEP 20 and
    PEP 8 for style guidelines.
  • Check for security vulnerabilities and potential issues. - Python methods should use type hints for all parameters and return values.
    Example:
    def my_function(param1: int, param2: str) -> bool:
        pass
  • For Python exception handling, ensure proper stack trace preservation:
    • When re-raising exceptions: use bare raise statements to maintain the original stack trace,
      and use logger.error() (not logger.exception()) to avoid duplicate stack trace output.
    • When catching and logging exceptions without re-raising: always use logger.exception()
      to capture the full stack trace information.

Documentation Review Instructions - Verify that documentation and comments are clear and comprehensive. - Verify that the documentation doesn't contain any TODOs, FIXMEs or placeholder text like "lorem ipsum". - Verify that the documentation doesn't contain any offensive or outdated terms. - Verify that documentation and comments are free of spelling mistakes, ensure the documentation doesn't contain any

words listed in the ci/vale/styles/config/vocabularies/nat/reject.txt file, words that might appear to be
spelling mistakes but are listed in the ci/vale/styles/config/vocabularies/nat/accept.txt file are OK.

Misc. - All code (except .mdc files that contain Cursor rules) should be licensed under the Apache License 2.0,

and should contain an Apache License 2.0 header comment at the top of each file.

  • Confirm that copyright years are up-to date whenever a file is changed.

Files:

  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md
docs/source/**/*

⚙️ CodeRabbit configuration file

This directory contains the source code for the documentation. All documentation should be written in Markdown format. Any image files should be placed in the docs/source/_static directory.

Files:

  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md
🧠 Learnings (4)
📚 Learning: 2025-09-23T18:39:15.023Z
Learnt from: CR
PR: NVIDIA/NeMo-Agent-Toolkit#0
File: .cursor/rules/general.mdc:0-0
Timestamp: 2025-09-23T18:39:15.023Z
Learning: Applies to docs/source/**/*.md : Use the official naming throughout documentation: first use “NVIDIA NeMo Agent toolkit”, subsequent “NeMo Agent toolkit”; never use deprecated names (Agent Intelligence toolkit, aiqtoolkit, AgentIQ, AIQ/aiq)

Applied to files:

  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md
📚 Learning: 2025-09-23T18:39:15.023Z
Learnt from: CR
PR: NVIDIA/NeMo-Agent-Toolkit#0
File: .cursor/rules/general.mdc:0-0
Timestamp: 2025-09-23T18:39:15.023Z
Learning: Applies to **/README.@(md|ipynb) : Ensure READMEs follow the naming convention; avoid deprecated names; use “NeMo Agent Toolkit” (capital T) in headings

Applied to files:

  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md
📚 Learning: 2025-09-23T18:39:15.023Z
Learnt from: CR
PR: NVIDIA/NeMo-Agent-Toolkit#0
File: .cursor/rules/general.mdc:0-0
Timestamp: 2025-09-23T18:39:15.023Z
Learning: Every file must start with the standard SPDX Apache-2.0 header; keep copyright years up to date

Applied to files:

  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md
📚 Learning: 2025-09-23T18:39:15.023Z
Learnt from: CR
PR: NVIDIA/NeMo-Agent-Toolkit#0
File: .cursor/rules/general.mdc:0-0
Timestamp: 2025-09-23T18:39:15.023Z
Learning: All source files must include the SPDX Apache-2.0 header template; CI verifies via ci/scripts/github/checks.sh—do not bypass

Applied to files:

  • docs/source/workflows/observe/observe-workflow-with-dynatrace.md
🪛 markdownlint-cli2 (0.18.1)
docs/source/workflows/observe/observe-workflow-with-dynatrace.md

29-29: Bare URL used

(MD034, no-bare-urls)

🔇 Additional comments (7)
docs/source/workflows/observe/observe-workflow-with-dynatrace.md (7)

1-16: LGTM! Apache-2.0 header is correct.

The SPDX header follows the repository standard with the current copyright year.


18-26: LGTM! Introduction follows naming conventions.

The first mention correctly uses "NVIDIA NeMo Agent toolkit" per the documentation style guide, and the content clearly outlines the guide's scope.


44-77: LGTM! OTel Collector configuration is accurate.

The YAML configuration correctly demonstrates the otlphttp exporter setup with appropriate placeholders for Dynatrace environment and token, and includes all three signal pipelines (traces, metrics, logs).


79-89: LGTM! Docker deployment example is correct.

The Docker command uses proper line continuations, quotes the path expansion, and appropriately uses :latest to avoid hardcoding versions in documentation.


91-96: LGTM! Installation command is correct.

The installation correctly specifies only the opentelemetry extra, which is sufficient for Dynatrace integration as confirmed in past review discussions.


98-112: LGTM! Workflow configuration example is accurate.

The telemetry configuration correctly specifies the OTel collector endpoint that matches the deployment in Step 4, and the YAML structure is valid.


114-136: LGTM! Execution and viewing steps are clear.

The example commands are accurate, the comment correctly references "OTel+Dynatrace" telemetry, and the image includes proper alt text for accessibility.

@willkill07
Copy link
Member

/merge

@rapids-bot rapids-bot bot merged commit 8767608 into NVIDIA:develop Sep 30, 2025
17 checks passed
@robertjahn
Copy link
Contributor Author

@willkill07 thank you for all your efforts to assist on this one.

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

Labels

doc Improvements or additions to documentation external This issue was filed by someone outside of the NeMo Agent toolkit team non-breaking Non-breaking change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add Tracing Exporters configuration guide for Dynatrace

3 participants