- 
                Notifications
    You must be signed in to change notification settings 
- Fork 351
Add support for OpenTelemetry Logs API #6465
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
| Overall package sizeSelf size: 12.72 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/resources | 1.9.1 | 306.54 kB | 7.46 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-logs | 0.205.0 | 201.51 kB | 1.42 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 | 
| Codecov Report❌ Patch coverage is  Additional details and impacted files@@            Coverage Diff             @@
##           master    #6465      +/-   ##
==========================================
+ Coverage   83.97%   84.00%   +0.02%     
==========================================
  Files         489      497       +8     
  Lines       20471    20940     +469     
==========================================
+ Hits        17191    17591     +400     
- Misses       3280     3349      +69     ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
 | 
| BenchmarksBenchmark execution time: 2025-10-10 19:49:53 Comparing candidate commit 7f4fbff in PR branch  Found 0 performance improvements and 0 performance regressions! Performance is the same for 1600 metrics, 70 unstable metrics. | 
3de2a5c    to
    543805a      
    Compare
  
    c5f752b    to
    df7cbca      
    Compare
  
    57ab573    to
    9eded3b      
    Compare
  
    9eded3b    to
    2c0a5a5      
    Compare
  
    a520a22    to
    a890b1f      
    Compare
  
    a890b1f    to
    df5d6b4      
    Compare
  
    …ter and improve tests
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Overall LGTM, just a few small nits. Could we also add an integration test under ./integration-test to cover the client flow?
|  | ||
| // Disable log injection when OTEL logs are enabled | ||
| // OTEL logs and DD log injection are mutually exclusive | ||
| if (this._env.otelLogsEnabled) { | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could we add a unit test for this scenario?
        
          
                packages/dd-trace/src/proxy.js
              
                Outdated
          
        
      | } | ||
| } | ||
|  | ||
| #initializeOpenTelemetryLogs (config) { | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
NIT: could we do the initialization in ./opentelemetry/logs/index.js ?
| 
 I am validating this behavior in the system test so I think it's unnessary but I can add it if it's a hard requirement to merge this PR: DataDog/system-tests#5437 | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, while I would prefer to have a few more tests for handling all different data types.
The http part is mocked, so I understand that this is not yet tested. I just wondered, if we want to mock the http layer. That way that would also be tested and we can rely on even more parts in the tests.
a4df6c1    to
    cea4a8a      
    Compare
  
    cea4a8a    to
    7f4fbff      
    Compare
  
    * first attempt at otel logs support * lint files and centralize configs * add tests * clean up yarn.lock * clean up logs * add back log exporter logic * clean up docs * clean up docs and fix otlp protocol * revert readme docs * add new otel files * working version * fmy * fmt * Update packages/dd-trace/src/config_defaults.js * fix tests * allow any version of logs api, let opentelemetry api determine the version * add otlp payload tests * add telemetry metrics * some other clean ups * simplify tests * use agent hostname to resolve otlp endpoints * clean up initalization * parse additional otlp headers * clean up component args * clean up docs * clean up component args * remove addLogProcessor, init provider with a processor * support trace-log correlation * clean up registering provider in tests, and rename exporter arg * first round of clean ups from PR review * clean ups part 2 * make things private and clean up tests * clean up tests * clean up yarn file * remove unused configs * fix context issues * nother round of clean ups * group payloads by instrumentation scope * fix typing * address review comments * add better typing, and better support for sending schemaurl * revert instrumentationScope change to span * review comments * clean up protobuf loader file * lint * move protos to same dir, this will set up metrics work * clean up throws * update protos * disable log injection when otel logs support is enabled * update configurations to pass telemetry system tests * remove useless import * add more tests * provide fix for failing system test * add test case for noop logger and fix mocking for remote config * add test case for noop logger and fix mocking for remote config * fix encoding for doubles, remove unused shutdown code, test getLogger params * remove unused timer and shutdown logic, simplify loggerprovider register and improve tests * fix comment * clean up how otel endpoint configs are loaded * address Ayans comments * add integration tests
* first attempt at otel logs support * lint files and centralize configs * add tests * clean up yarn.lock * clean up logs * add back log exporter logic * clean up docs * clean up docs and fix otlp protocol * revert readme docs * add new otel files * working version * fmy * fmt * Update packages/dd-trace/src/config_defaults.js * fix tests * allow any version of logs api, let opentelemetry api determine the version * add otlp payload tests * add telemetry metrics * some other clean ups * simplify tests * use agent hostname to resolve otlp endpoints * clean up initalization * parse additional otlp headers * clean up component args * clean up docs * clean up component args * remove addLogProcessor, init provider with a processor * support trace-log correlation * clean up registering provider in tests, and rename exporter arg * first round of clean ups from PR review * clean ups part 2 * make things private and clean up tests * clean up tests * clean up yarn file * remove unused configs * fix context issues * nother round of clean ups * group payloads by instrumentation scope * fix typing * address review comments * add better typing, and better support for sending schemaurl * revert instrumentationScope change to span * review comments * clean up protobuf loader file * lint * move protos to same dir, this will set up metrics work * clean up throws * update protos * disable log injection when otel logs support is enabled * update configurations to pass telemetry system tests * remove useless import * add more tests * provide fix for failing system test * add test case for noop logger and fix mocking for remote config * add test case for noop logger and fix mocking for remote config * fix encoding for doubles, remove unused shutdown code, test getLogger params * remove unused timer and shutdown logic, simplify loggerprovider register and improve tests * fix comment * clean up how otel endpoint configs are loaded * address Ayans comments * add integration tests
What does this PR do?
This PR adds OpenTelemetry Logs support to dd-trace-js, enabling users to emit structured log data that integrates with the OpenTelemetry ecosystem. The implementation includes:
Motivation
OpenTelemetry has become the standard for observability in the cloud-native ecosystem. This implementation enables users to:
Checklist
Additional Notes