diff --git a/instrumentation/faraday/README.md b/instrumentation/faraday/README.md index f8e23bc45e..604f9ab7c5 100644 --- a/instrumentation/faraday/README.md +++ b/instrumentation/faraday/README.md @@ -19,6 +19,7 @@ To install the instrumentation, call `use` with the name of the instrumentation. ```ruby OpenTelemetry::SDK.configure do |c| c.use 'OpenTelemetry::Instrumentation::Faraday' + suppress_internal_instrumentation: true end ``` @@ -30,6 +31,11 @@ OpenTelemetry::SDK.configure do |c| end ``` +### Configuration options +This instrumentation offers the following configuration options: +* `suppress_internal_instrumentation` (default: `false`): When set to `true`, any spans with + span kind of `internal` are suppressed from traces. + ## Examples Example usage of faraday can be seen in the `./example/faraday.rb` file [here](https://github.com/open-telemetry/opentelemetry-ruby-contrib/blob/main/instrumentation/faraday/example/faraday.rb) diff --git a/instrumentation/faraday/lib/opentelemetry/instrumentation/faraday/instrumentation.rb b/instrumentation/faraday/lib/opentelemetry/instrumentation/faraday/instrumentation.rb index a194d709e7..8751b0b007 100644 --- a/instrumentation/faraday/lib/opentelemetry/instrumentation/faraday/instrumentation.rb +++ b/instrumentation/faraday/lib/opentelemetry/instrumentation/faraday/instrumentation.rb @@ -28,6 +28,7 @@ class Instrumentation < OpenTelemetry::Instrumentation::Base option :span_kind, default: :client, validate: %i[client internal] option :peer_service, default: nil, validate: :string + option :suppress_internal_instrumentation, default: false, validate: :boolean private diff --git a/instrumentation/faraday/lib/opentelemetry/instrumentation/faraday/middlewares/tracer_middleware.rb b/instrumentation/faraday/lib/opentelemetry/instrumentation/faraday/middlewares/tracer_middleware.rb index 26904ee8d7..d5391f0db4 100644 --- a/instrumentation/faraday/lib/opentelemetry/instrumentation/faraday/middlewares/tracer_middleware.rb +++ b/instrumentation/faraday/lib/opentelemetry/instrumentation/faraday/middlewares/tracer_middleware.rb @@ -40,7 +40,13 @@ def call(env) ) do |span| OpenTelemetry.propagation.inject(env.request_headers) - app.call(env).on_complete { |resp| trace_response(span, resp.status) } + if config[:suppress_internal_instrumentation] + OpenTelemetry::Common::Utilities.untraced do + app.call(env).on_complete { |resp| trace_response(span, resp.status) } + end + else + app.call(env).on_complete { |resp| trace_response(span, resp.status) } + end rescue ::Faraday::Error => e trace_response(span, e.response[:status]) if e.response