open-telemetry / opentelemetry-js

OpenTelemetry JavaScript Client
https://opentelemetry.io
Apache License 2.0
2.75k stars 809 forks source link

Support instrumentation of modules via bundler plugins #4174

Open drewcorlin1 opened 1 year ago

drewcorlin1 commented 1 year ago

Is your feature request related to a problem? Please describe.

I am attempting to use the OTel auto instrumentation for Javascript, but non-built-in modules are not patched because I am bundling my code with esbuild before deploying it into a docker container (same scenario as https://github.com/open-telemetry/opentelemetry-js/issues/2708).

Describe the solution you'd like

Provide bundler (esbuild, webpack, rollup, etc.) plugins as a means of instrumenting third party modules, since the existing require()-based patching does not work if you are bundling your code. This is somewhat of an alternative to https://github.com/open-telemetry/opentelemetry-js/issues/2708, with a big difference I see being that the bundler plugin could more easily apply to modules only when they're present. The proposed solution in that link seems much more manual to maintain in a codebase where we have many microservices with varying dependencies. I don't want to force developers to know they need to pass 20 aws modules to the OTel instrumentation just because they added an aws-s3 dependency.

Describe alternatives you've considered

  1. https://github.com/open-telemetry/opentelemetry-js/issues/2708
  2. Writing this esbuild plugin myself (code below).

Additional context

An initial implementation of this can be found at https://github.com/open-telemetry/opentelemetry-js-contrib/pull/1856

drewcorlin1 commented 1 year ago

DataDog has an experimental esbuild plugin and I think a similar approach could be used for this. Is there any interest in this solution? I would be happy to begin contributing for a few packages, but I don't think I could commit to getting the plugin to work for every supported package.

mrjackdavis commented 1 year ago

Hey! I just stumped upon this and it'd be extremely helpful if there was a community solution for this @drewcorlin1

You have my +1

RichiCoder1 commented 1 year ago

This would be an awesome way to approach this. It looks like DD's work is open source too, might be able to reference their work or collab: https://github.com/DataDog/dd-trace-js/blob/master/packages/datadog-esbuild/index.js

github-actions[bot] commented 9 months ago

This issue is stale because it has been open 60 days with no activity. Remove stale label or comment or this will be closed in 14 days.

drewcorlin1 commented 9 months ago

Not stale

github-actions[bot] commented 4 months ago

This issue is stale because it has been open 60 days with no activity. Remove stale label or comment or this will be closed in 14 days.

drewcorlin1 commented 4 months ago

being addressed here https://github.com/open-telemetry/opentelemetry-js-contrib/pull/1856

github-actions[bot] commented 1 month ago

This issue is stale because it has been open 60 days with no activity. Remove stale label or comment or this will be closed in 14 days.

drewcorlin1 commented 1 month ago

An alternative to https://github.com/open-telemetry/opentelemetry-js-contrib/pull/1856 can be found at https://github.com/open-telemetry/opentelemetry-js/pull/4818 and https://github.com/open-telemetry/opentelemetry-js-contrib/pull/2295