Skip to content

Conversation

jcstorms1
Copy link
Contributor

@jcstorms1 jcstorms1 commented Sep 29, 2025

What does this PR do?

Adds support for distributed tracing in certain Azure environments

  • Instruments the EventHubProducerClient in the Azure Event Hubs SDK
  • Instruments the consumer triggers in the Azure Function SDK
  • Separates Azure Function tests to isolate each managed service

New integration for Azure Event Hubs configurable by:
DD_TRACE_AZUREEVENTHUBS_ENABLED (default true) enables/disables the integration
DD_TRACE_AZURE_EVENTHUBS_BATCH_LINKS_ENABLED (default true) enables/disables Span Linking and TryAdd spans

Motivation

Azure distributed tracing rollout

Plugin Checklist

Additional Notes

Copy link

github-actions bot commented Sep 29, 2025

Overall package size

Self size: 12.69 MB
Deduped: 112.91 MB
No deduping: 113.3 MB

Dependency sizes | name | version | self size | total size | |------|---------|-----------|------------| | @datadog/libdatadog | 0.7.0 | 35.02 MB | 35.02 MB | | @datadog/native-appsec | 10.2.1 | 20.64 MB | 20.65 MB | | @datadog/native-iast-taint-tracking | 4.0.0 | 11.72 MB | 11.73 MB | | @datadog/pprof | 5.10.0 | 9.91 MB | 10.3 MB | | @opentelemetry/core | 1.30.1 | 908.66 kB | 7.16 MB | | protobufjs | 7.5.4 | 2.95 MB | 5.73 MB | | @datadog/wasm-js-rewriter | 4.0.1 | 2.85 MB | 3.58 MB | | @datadog/native-metrics | 3.1.1 | 1.02 MB | 1.43 MB | | @opentelemetry/api | 1.9.0 | 1.22 MB | 1.22 MB | | jsonpath-plus | 10.3.0 | 617.18 kB | 1.08 MB | | import-in-the-middle | 1.14.4 | 123.18 kB | 851.76 kB | | lru-cache | 10.4.3 | 804.3 kB | 804.3 kB | | opentracing | 0.14.7 | 194.81 kB | 194.81 kB | | source-map | 0.7.6 | 185.63 kB | 185.63 kB | | pprof-format | 2.2.1 | 163.06 kB | 163.06 kB | | @datadog/sketches-js | 2.1.1 | 109.9 kB | 109.9 kB | | lodash.sortby | 4.7.0 | 75.76 kB | 75.76 kB | | ignore | 7.0.5 | 63.38 kB | 63.38 kB | | istanbul-lib-coverage | 3.2.2 | 34.37 kB | 34.37 kB | | rfdc | 1.4.1 | 27.15 kB | 27.15 kB | | dc-polyfill | 0.1.10 | 26.73 kB | 26.73 kB | | @isaacs/ttlcache | 1.4.1 | 25.2 kB | 25.2 kB | | tlhunter-sorted-set | 0.1.0 | 24.94 kB | 24.94 kB | | shell-quote | 1.8.3 | 23.74 kB | 23.74 kB | | limiter | 1.1.5 | 23.17 kB | 23.17 kB | | retry | 0.13.1 | 18.85 kB | 18.85 kB | | semifies | 1.0.0 | 15.84 kB | 15.84 kB | | jest-docblock | 29.7.0 | 8.99 kB | 12.76 kB | | crypto-randomuuid | 1.0.0 | 11.18 kB | 11.18 kB | | ttl-set | 1.0.0 | 4.61 kB | 9.69 kB | | mutexify | 1.4.0 | 5.71 kB | 8.74 kB | | path-to-regexp | 0.1.12 | 6.6 kB | 6.6 kB | | module-details-from-path | 1.0.4 | 3.96 kB | 3.96 kB |

🤖 This report was automatically generated by heaviest-objects-in-the-universe

Copy link

codecov bot commented Sep 29, 2025

Codecov Report

❌ Patch coverage is 0% with 4 lines in your changes missing coverage. Please review.
✅ Project coverage is 83.78%. Comparing base (b2caf5d) to head (71e3cfc).
⚠️ Report is 50 commits behind head on master.

Files with missing lines Patch % Lines
...d-trace/src/service-naming/schemas/v0/messaging.js 0.00% 2 Missing ⚠️
...ages/datadog-instrumentations/src/helpers/hooks.js 0.00% 1 Missing ⚠️
packages/dd-trace/src/plugins/index.js 0.00% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master    #6559      +/-   ##
==========================================
- Coverage   83.90%   83.78%   -0.12%     
==========================================
  Files         485      490       +5     
  Lines       20342    20657     +315     
==========================================
+ Hits        17068    17308     +240     
- Misses       3274     3349      +75     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@pr-commenter
Copy link

pr-commenter bot commented Sep 29, 2025

Benchmarks

Benchmark execution time: 2025-10-10 17:57:08

Comparing candidate commit 71e3cfc in PR branch storms/instrument-event-hub with baseline commit b2caf5d in branch master.

Found 0 performance improvements and 0 performance regressions! Performance is the same for 1608 metrics, 62 unstable metrics.

@jcstorms1 jcstorms1 changed the title [SVLS] Instrument Azure Event Hubs [SVLS-7305] Instrument Azure Event Hubs Sep 29, 2025
@datadog-datadog-prod-us1
Copy link

datadog-datadog-prod-us1 bot commented Sep 29, 2025

✅ Tests

🎉 All green!

❄️ No new flaky tests detected
🧪 All tests passed

This comment will be updated automatically if new data arrives.
🔗 Commit SHA: 71e3cfc | Docs | Was this helpful? Give us feedback!

- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- uses: ./.github/actions/node/active-lts
- run: |
docker cp \
Copy link
Contributor Author

@jcstorms1 jcstorms1 Oct 7, 2025

Choose a reason for hiding this comment

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

We need to add a config file for the Event Hubs emulator, but in github workflows we can't mount the file. The workaround is to use docker cp and restart the service. https://github.com/orgs/community/discussions/42127#discussioncomment-7591609

@jcstorms1 jcstorms1 marked this pull request as ready for review October 7, 2025 20:26
@jcstorms1 jcstorms1 requested review from a team as code owners October 7, 2025 20:26
Copy link

@pablomartinezbernardo pablomartinezbernardo left a comment

Choose a reason for hiding this comment

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

This comment likely also applies to the python tracer, but I hadn't thought about it until now: If I'm understanding correctly, the integration doesn't cover output bindings, which are actually sent from the host process within .NET. Is that an expected limitation? How will we communicate to customers that they should use the SDK directly rather than using output bindings? Is it not possible to trace output bindings?

@jcstorms1
Copy link
Contributor Author

jcstorms1 commented Oct 8, 2025

This comment likely also applies to the python tracer, but I hadn't thought about it until now: If I'm understanding correctly, the integration doesn't cover output bindings, which are actually sent from the host process within .NET. Is that an expected limitation? How will we communicate to customers that they should use the SDK directly rather than using output bindings? Is it not possible to trace output bindings?

@pablomartinezbernardo We cannot instrument them because the output bindings utilize the function worker which is written in .NET like you mentioned. They don't actually do anything other then send a payload to the function host process. In order for us to use output bindings, we would likely need the .NET tracer to run alongside the runtime's tracer which isn't feasible.

Copy link

@pablomartinezbernardo pablomartinezbernardo left a comment

Choose a reason for hiding this comment

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

Looking good from the logic and span structure point of view, leaving tracer and js specifics for others to review

@jcstorms1
Copy link
Contributor Author

/merge

@dd-devflow-routing-codex
Copy link

dd-devflow-routing-codex bot commented Oct 15, 2025

View all feedbacks in Devflow UI.

2025-10-15 13:13:15 UTC ℹ️ Start processing command /merge


2025-10-15 13:13:20 UTC ℹ️ MergeQueue: queue is disabled

Added to the queue but the mergequeue is not enabled for now.


2025-10-15 13:13:58 UTC ℹ️ MergeQueue: This merge request was already merged

This pull request was merged directly.

@jcstorms1 jcstorms1 merged commit abeba66 into master Oct 15, 2025
736 checks passed
@jcstorms1 jcstorms1 deleted the storms/instrument-event-hub branch October 15, 2025 13:13
dd-octo-sts bot pushed a commit that referenced this pull request Oct 15, 2025
* initial

* wrap eventhub methods

* trace eventhub in azure function

* add span attributes for event hub

* update hooks

* add list and single message support

* refactor

* use this to get the config

* refactor and add span links

* add buffered event queues

* initial eventhubs test passing

* add event hubs producer tests

* break apart tests

* initial eventhub function test

* use batches span context array

* finalize tests

* uncomment tests

* update docker compose

* remove env file and hardcode volume

* tests

* try workaround

* typo

* fix docker cp command

* update test package.json

* test reordering service

* update  eventhubs service

* missing import

* update dd-trace dependancies

* refactor tests

* update ports

* reorder services

* start with azure edge

* add docker cp to functions for config

* try new action

* typo

* retry test

* try using service id

* update service bus version

* remove localhost reference

* pin core tools version for fx

* update path for http

* reset func core tool version

* simplify github workflow

* move tests to serverless action

* update node version used

* fix messaging system in fx

* update test

* fix tests and add check for empty events

* fix index in eventhub test

* move test to appropriate plugin
@dd-octo-sts dd-octo-sts bot mentioned this pull request Oct 15, 2025
juan-fernandez pushed a commit that referenced this pull request Oct 15, 2025
* initial

* wrap eventhub methods

* trace eventhub in azure function

* add span attributes for event hub

* update hooks

* add list and single message support

* refactor

* use this to get the config

* refactor and add span links

* add buffered event queues

* initial eventhubs test passing

* add event hubs producer tests

* break apart tests

* initial eventhub function test

* use batches span context array

* finalize tests

* uncomment tests

* update docker compose

* remove env file and hardcode volume

* tests

* try workaround

* typo

* fix docker cp command

* update test package.json

* test reordering service

* update  eventhubs service

* missing import

* update dd-trace dependancies

* refactor tests

* update ports

* reorder services

* start with azure edge

* add docker cp to functions for config

* try new action

* typo

* retry test

* try using service id

* update service bus version

* remove localhost reference

* pin core tools version for fx

* update path for http

* reset func core tool version

* simplify github workflow

* move tests to serverless action

* update node version used

* fix messaging system in fx

* update test

* fix tests and add check for empty events

* fix index in eventhub test

* move test to appropriate plugin
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants