ddtrace 0.41.0 → 0.52.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.editorconfig +22 -0
- data/.gitignore +7 -1
- data/CHANGELOG.md +1496 -354
- data/CONTRIBUTING.md +3 -7
- data/LICENSE-3rdparty.csv +2 -0
- data/README.md +1 -0
- data/bin/ddtracerb +15 -0
- data/ddtrace.gemspec +18 -38
- data/docs/DevelopmentGuide.md +55 -2
- data/docs/GettingStarted.md +338 -79
- data/docs/ProfilingDevelopment.md +107 -0
- data/ext/ddtrace_profiling_native_extension/extconf.rb +28 -0
- data/ext/ddtrace_profiling_native_extension/profiling.c +17 -0
- data/lib/datadog/ci.rb +17 -0
- data/lib/datadog/ci/configuration/components.rb +31 -0
- data/lib/datadog/ci/configuration/settings.rb +37 -0
- data/lib/datadog/ci/context_flush.rb +29 -0
- data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +31 -0
- data/lib/datadog/ci/contrib/cucumber/ext.rb +20 -0
- data/lib/datadog/ci/contrib/cucumber/formatter.rb +98 -0
- data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +27 -0
- data/lib/datadog/ci/contrib/cucumber/integration.rb +48 -0
- data/lib/datadog/ci/contrib/cucumber/patcher.rb +26 -0
- data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +31 -0
- data/lib/datadog/ci/contrib/rspec/example.rb +74 -0
- data/lib/datadog/ci/contrib/rspec/ext.rb +19 -0
- data/lib/datadog/ci/contrib/rspec/integration.rb +49 -0
- data/lib/datadog/ci/contrib/rspec/patcher.rb +26 -0
- data/lib/datadog/ci/ext/app_types.rb +10 -0
- data/lib/datadog/ci/ext/environment.rb +443 -0
- data/lib/datadog/ci/ext/settings.rb +11 -0
- data/lib/datadog/ci/ext/test.rb +35 -0
- data/lib/datadog/ci/extensions.rb +18 -0
- data/lib/datadog/ci/test.rb +77 -0
- data/lib/datadog/contrib.rb +69 -0
- data/lib/datadog/core/environment/cgroup.rb +52 -0
- data/lib/datadog/core/environment/class_count.rb +20 -0
- data/lib/datadog/core/environment/container.rb +91 -0
- data/lib/datadog/core/environment/ext.rb +27 -0
- data/lib/datadog/core/environment/gc.rb +19 -0
- data/lib/datadog/core/environment/identity.rb +51 -0
- data/lib/datadog/core/environment/socket.rb +17 -0
- data/lib/datadog/core/environment/thread_count.rb +19 -0
- data/lib/datadog/core/environment/variable_helpers.rb +42 -0
- data/lib/ddtrace.rb +22 -48
- data/lib/ddtrace/analytics.rb +3 -0
- data/lib/ddtrace/auto_instrument.rb +5 -0
- data/lib/ddtrace/auto_instrument_base.rb +7 -0
- data/lib/ddtrace/buffer.rb +233 -135
- data/lib/ddtrace/chunker.rb +1 -0
- data/lib/ddtrace/configuration.rb +132 -24
- data/lib/ddtrace/configuration/agent_settings_resolver.rb +231 -0
- data/lib/ddtrace/configuration/base.rb +9 -11
- data/lib/ddtrace/configuration/components.rb +167 -26
- data/lib/ddtrace/configuration/dependency_resolver.rb +1 -0
- data/lib/ddtrace/configuration/option.rb +1 -0
- data/lib/ddtrace/configuration/option_definition.rb +2 -3
- data/lib/ddtrace/configuration/option_definition_set.rb +1 -0
- data/lib/ddtrace/configuration/option_set.rb +1 -0
- data/lib/ddtrace/configuration/options.rb +7 -9
- data/lib/ddtrace/configuration/pin_setup.rb +1 -0
- data/lib/ddtrace/configuration/settings.rb +132 -12
- data/lib/ddtrace/context.rb +41 -20
- data/lib/ddtrace/context_flush.rb +15 -2
- data/lib/ddtrace/context_provider.rb +17 -5
- data/lib/ddtrace/contrib/action_cable/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/action_cable/event.rb +6 -4
- data/lib/ddtrace/contrib/action_cable/events.rb +1 -0
- data/lib/ddtrace/contrib/action_cable/events/broadcast.rb +1 -0
- data/lib/ddtrace/contrib/action_cable/events/perform_action.rb +1 -0
- data/lib/ddtrace/contrib/action_cable/events/transmit.rb +1 -0
- data/lib/ddtrace/contrib/action_cable/ext.rb +1 -0
- data/lib/ddtrace/contrib/action_cable/instrumentation.rb +1 -0
- data/lib/ddtrace/contrib/action_cable/integration.rb +8 -0
- data/lib/ddtrace/contrib/action_cable/patcher.rb +1 -0
- data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +22 -13
- data/lib/ddtrace/contrib/action_pack/action_controller/patcher.rb +2 -1
- data/lib/ddtrace/contrib/action_pack/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/action_pack/ext.rb +1 -0
- data/lib/ddtrace/contrib/action_pack/integration.rb +8 -0
- data/lib/ddtrace/contrib/action_pack/patcher.rb +1 -0
- data/lib/ddtrace/contrib/action_pack/utils.rb +2 -1
- data/lib/ddtrace/contrib/action_view/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/action_view/event.rb +4 -7
- data/lib/ddtrace/contrib/action_view/events.rb +1 -0
- data/lib/ddtrace/contrib/action_view/events/render_partial.rb +2 -0
- data/lib/ddtrace/contrib/action_view/events/render_template.rb +2 -0
- data/lib/ddtrace/contrib/action_view/ext.rb +1 -0
- data/lib/ddtrace/contrib/action_view/instrumentation/partial_renderer.rb +1 -0
- data/lib/ddtrace/contrib/action_view/instrumentation/template_renderer.rb +1 -0
- data/lib/ddtrace/contrib/action_view/integration.rb +8 -0
- data/lib/ddtrace/contrib/action_view/patcher.rb +5 -4
- data/lib/ddtrace/contrib/action_view/utils.rb +2 -1
- data/lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/active_model_serializers/event.rb +3 -2
- data/lib/ddtrace/contrib/active_model_serializers/events.rb +1 -0
- data/lib/ddtrace/contrib/active_model_serializers/events/render.rb +1 -0
- data/lib/ddtrace/contrib/active_model_serializers/events/serialize.rb +1 -0
- data/lib/ddtrace/contrib/active_model_serializers/ext.rb +1 -0
- data/lib/ddtrace/contrib/active_model_serializers/integration.rb +1 -0
- data/lib/ddtrace/contrib/active_model_serializers/patcher.rb +1 -0
- data/lib/ddtrace/contrib/active_record/configuration/makara_resolver.rb +31 -0
- data/lib/ddtrace/contrib/active_record/configuration/resolver.rb +108 -18
- data/lib/ddtrace/contrib/active_record/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/active_record/event.rb +3 -2
- data/lib/ddtrace/contrib/active_record/events.rb +1 -0
- data/lib/ddtrace/contrib/active_record/events/instantiation.rb +1 -0
- data/lib/ddtrace/contrib/active_record/events/sql.rb +1 -0
- data/lib/ddtrace/contrib/active_record/ext.rb +1 -0
- data/lib/ddtrace/contrib/active_record/integration.rb +8 -0
- data/lib/ddtrace/contrib/active_record/patcher.rb +1 -0
- data/lib/ddtrace/contrib/active_record/utils.rb +69 -21
- data/lib/ddtrace/contrib/active_support/cache/instrumentation.rb +105 -3
- data/lib/ddtrace/contrib/active_support/cache/patcher.rb +26 -4
- data/lib/ddtrace/contrib/active_support/cache/redis.rb +2 -5
- data/lib/ddtrace/contrib/active_support/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/active_support/ext.rb +4 -0
- data/lib/ddtrace/contrib/active_support/integration.rb +8 -1
- data/lib/ddtrace/contrib/active_support/notifications/event.rb +15 -3
- data/lib/ddtrace/contrib/active_support/notifications/subscriber.rb +3 -1
- data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +10 -5
- data/lib/ddtrace/contrib/active_support/patcher.rb +1 -0
- data/lib/ddtrace/contrib/analytics.rb +1 -0
- data/lib/ddtrace/contrib/auto_instrument.rb +49 -0
- data/lib/ddtrace/contrib/aws/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/aws/ext.rb +1 -0
- data/lib/ddtrace/contrib/aws/instrumentation.rb +32 -1
- data/lib/ddtrace/contrib/aws/integration.rb +1 -0
- data/lib/ddtrace/contrib/aws/parsed_context.rb +1 -0
- data/lib/ddtrace/contrib/aws/patcher.rb +6 -1
- data/lib/ddtrace/contrib/aws/services.rb +4 -0
- data/lib/ddtrace/contrib/concurrent_ruby/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/concurrent_ruby/context_composite_executor_service.rb +1 -0
- data/lib/ddtrace/contrib/concurrent_ruby/ext.rb +1 -0
- data/lib/ddtrace/contrib/concurrent_ruby/future_patch.rb +1 -0
- data/lib/ddtrace/contrib/concurrent_ruby/integration.rb +1 -0
- data/lib/ddtrace/contrib/concurrent_ruby/patcher.rb +3 -1
- data/lib/ddtrace/contrib/configurable.rb +65 -38
- data/lib/ddtrace/contrib/configuration/resolver.rb +71 -5
- data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +21 -20
- data/lib/ddtrace/contrib/configuration/settings.rb +8 -6
- data/lib/ddtrace/contrib/dalli/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/dalli/ext.rb +1 -0
- data/lib/ddtrace/contrib/dalli/instrumentation.rb +2 -1
- data/lib/ddtrace/contrib/dalli/integration.rb +1 -0
- data/lib/ddtrace/contrib/dalli/patcher.rb +2 -39
- data/lib/ddtrace/contrib/dalli/quantize.rb +1 -0
- data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +3 -0
- data/lib/ddtrace/contrib/delayed_job/ext.rb +3 -0
- data/lib/ddtrace/contrib/delayed_job/integration.rb +1 -0
- data/lib/ddtrace/contrib/delayed_job/patcher.rb +1 -0
- data/lib/ddtrace/contrib/delayed_job/plugin.rb +39 -15
- data/lib/ddtrace/contrib/elasticsearch/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/elasticsearch/ext.rb +1 -0
- data/lib/ddtrace/contrib/elasticsearch/integration.rb +1 -0
- data/lib/ddtrace/contrib/elasticsearch/patcher.rb +2 -0
- data/lib/ddtrace/contrib/elasticsearch/quantize.rb +6 -2
- data/lib/ddtrace/contrib/ethon/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/ethon/easy_patch.rb +13 -11
- data/lib/ddtrace/contrib/ethon/ext.rb +2 -0
- data/lib/ddtrace/contrib/ethon/integration.rb +1 -0
- data/lib/ddtrace/contrib/ethon/multi_patch.rb +2 -1
- data/lib/ddtrace/contrib/ethon/patcher.rb +4 -2
- data/lib/ddtrace/contrib/excon/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/excon/ext.rb +1 -0
- data/lib/ddtrace/contrib/excon/integration.rb +1 -0
- data/lib/ddtrace/contrib/excon/middleware.rb +10 -7
- data/lib/ddtrace/contrib/excon/patcher.rb +1 -0
- data/lib/ddtrace/contrib/extensions.rb +90 -14
- data/lib/ddtrace/contrib/faraday/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/faraday/connection.rb +1 -0
- data/lib/ddtrace/contrib/faraday/ext.rb +1 -0
- data/lib/ddtrace/contrib/faraday/integration.rb +1 -0
- data/lib/ddtrace/contrib/faraday/middleware.rb +2 -3
- data/lib/ddtrace/contrib/faraday/patcher.rb +3 -38
- data/lib/ddtrace/contrib/faraday/rack_builder.rb +1 -0
- data/lib/ddtrace/contrib/grape/configuration/settings.rb +8 -0
- data/lib/ddtrace/contrib/grape/endpoint.rb +68 -32
- data/lib/ddtrace/contrib/grape/ext.rb +2 -0
- data/lib/ddtrace/contrib/grape/instrumentation.rb +4 -3
- data/lib/ddtrace/contrib/grape/integration.rb +1 -0
- data/lib/ddtrace/contrib/grape/patcher.rb +2 -43
- data/lib/ddtrace/contrib/graphql/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/graphql/ext.rb +1 -0
- data/lib/ddtrace/contrib/graphql/integration.rb +1 -0
- data/lib/ddtrace/contrib/graphql/patcher.rb +1 -0
- data/lib/ddtrace/contrib/grpc/configuration/settings.rb +2 -0
- data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +13 -8
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +2 -1
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +4 -4
- data/lib/ddtrace/contrib/grpc/ext.rb +1 -0
- data/lib/ddtrace/contrib/grpc/integration.rb +1 -0
- data/lib/ddtrace/contrib/grpc/intercept_with_datadog.rb +1 -0
- data/lib/ddtrace/contrib/grpc/patcher.rb +3 -37
- data/lib/ddtrace/contrib/http/circuit_breaker.rb +2 -3
- data/lib/ddtrace/contrib/http/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/http/ext.rb +1 -0
- data/lib/ddtrace/contrib/http/instrumentation.rb +9 -8
- data/lib/ddtrace/contrib/http/integration.rb +1 -0
- data/lib/ddtrace/contrib/http/patcher.rb +2 -1
- data/lib/ddtrace/contrib/http_annotation_helper.rb +1 -0
- data/lib/ddtrace/contrib/httpclient/configuration/settings.rb +33 -0
- data/lib/ddtrace/contrib/httpclient/ext.rb +18 -0
- data/lib/ddtrace/contrib/httpclient/instrumentation.rb +148 -0
- data/lib/ddtrace/contrib/httpclient/integration.rb +44 -0
- data/lib/ddtrace/contrib/httpclient/patcher.rb +39 -0
- data/lib/ddtrace/contrib/httprb/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/httprb/ext.rb +1 -0
- data/lib/ddtrace/contrib/httprb/instrumentation.rb +17 -22
- data/lib/ddtrace/contrib/httprb/integration.rb +1 -0
- data/lib/ddtrace/contrib/httprb/patcher.rb +8 -4
- data/lib/ddtrace/contrib/integration.rb +4 -3
- data/lib/ddtrace/contrib/kafka/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/kafka/consumer_event.rb +1 -0
- data/lib/ddtrace/contrib/kafka/consumer_group_event.rb +1 -0
- data/lib/ddtrace/contrib/kafka/event.rb +4 -3
- data/lib/ddtrace/contrib/kafka/events.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events/connection/request.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events/consumer/process_batch.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events/consumer/process_message.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/heartbeat.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/join_group.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/leave_group.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/sync_group.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events/produce_operation/send_messages.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events/producer/deliver_messages.rb +1 -0
- data/lib/ddtrace/contrib/kafka/ext.rb +1 -0
- data/lib/ddtrace/contrib/kafka/integration.rb +1 -0
- data/lib/ddtrace/contrib/kafka/patcher.rb +1 -0
- data/lib/ddtrace/contrib/lograge/configuration/settings.rb +19 -0
- data/lib/ddtrace/contrib/lograge/ext.rb +11 -0
- data/lib/ddtrace/contrib/lograge/instrumentation.rb +39 -0
- data/lib/ddtrace/contrib/lograge/integration.rb +46 -0
- data/lib/ddtrace/contrib/lograge/patcher.rb +26 -0
- data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/mongodb/ext.rb +1 -0
- data/lib/ddtrace/contrib/mongodb/instrumentation.rb +5 -2
- data/lib/ddtrace/contrib/mongodb/integration.rb +1 -0
- data/lib/ddtrace/contrib/mongodb/parsers.rb +1 -0
- data/lib/ddtrace/contrib/mongodb/patcher.rb +3 -2
- data/lib/ddtrace/contrib/mongodb/subscribers.rb +3 -3
- data/lib/ddtrace/contrib/mysql2/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/mysql2/ext.rb +1 -0
- data/lib/ddtrace/contrib/mysql2/instrumentation.rb +2 -1
- data/lib/ddtrace/contrib/mysql2/integration.rb +1 -0
- data/lib/ddtrace/contrib/mysql2/patcher.rb +2 -1
- data/lib/ddtrace/contrib/patchable.rb +21 -9
- data/lib/ddtrace/contrib/patcher.rb +12 -8
- data/lib/ddtrace/contrib/presto/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/presto/ext.rb +1 -0
- data/lib/ddtrace/contrib/presto/instrumentation.rb +2 -1
- data/lib/ddtrace/contrib/presto/integration.rb +1 -0
- data/lib/ddtrace/contrib/presto/patcher.rb +7 -3
- data/lib/ddtrace/contrib/qless/configuration/settings.rb +36 -0
- data/lib/ddtrace/contrib/qless/ext.rb +21 -0
- data/lib/ddtrace/contrib/qless/integration.rb +39 -0
- data/lib/ddtrace/contrib/qless/patcher.rb +35 -0
- data/lib/ddtrace/contrib/qless/qless_job.rb +74 -0
- data/lib/ddtrace/contrib/qless/tracer_cleaner.rb +34 -0
- data/lib/ddtrace/contrib/que/configuration/settings.rb +2 -0
- data/lib/ddtrace/contrib/que/ext.rb +20 -19
- data/lib/ddtrace/contrib/que/integration.rb +1 -0
- data/lib/ddtrace/contrib/que/patcher.rb +1 -0
- data/lib/ddtrace/contrib/que/tracer.rb +4 -2
- data/lib/ddtrace/contrib/racecar/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/racecar/event.rb +4 -2
- data/lib/ddtrace/contrib/racecar/events.rb +1 -0
- data/lib/ddtrace/contrib/racecar/events/batch.rb +1 -0
- data/lib/ddtrace/contrib/racecar/events/consume.rb +1 -0
- data/lib/ddtrace/contrib/racecar/events/message.rb +1 -0
- data/lib/ddtrace/contrib/racecar/ext.rb +1 -0
- data/lib/ddtrace/contrib/racecar/integration.rb +1 -0
- data/lib/ddtrace/contrib/racecar/patcher.rb +1 -0
- data/lib/ddtrace/contrib/rack/configuration/settings.rb +4 -3
- data/lib/ddtrace/contrib/rack/ext.rb +1 -0
- data/lib/ddtrace/contrib/rack/integration.rb +8 -0
- data/lib/ddtrace/contrib/rack/middlewares.rb +8 -12
- data/lib/ddtrace/contrib/rack/patcher.rb +2 -3
- data/lib/ddtrace/contrib/rack/request_queue.rb +7 -1
- data/lib/ddtrace/contrib/rails/auto_instrument_railtie.rb +11 -0
- data/lib/ddtrace/contrib/rails/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/rails/ext.rb +1 -0
- data/lib/ddtrace/contrib/rails/framework.rb +26 -1
- data/lib/ddtrace/contrib/rails/integration.rb +1 -0
- data/lib/ddtrace/contrib/rails/log_injection.rb +1 -40
- data/lib/ddtrace/contrib/rails/middlewares.rb +1 -0
- data/lib/ddtrace/contrib/rails/patcher.rb +29 -8
- data/lib/ddtrace/contrib/rails/railtie.rb +1 -0
- data/lib/ddtrace/contrib/rails/utils.rb +5 -0
- data/lib/ddtrace/contrib/rake/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/rake/ext.rb +1 -0
- data/lib/ddtrace/contrib/rake/instrumentation.rb +6 -3
- data/lib/ddtrace/contrib/rake/integration.rb +2 -1
- data/lib/ddtrace/contrib/rake/patcher.rb +2 -1
- data/lib/ddtrace/contrib/redis/configuration/resolver.rb +15 -5
- data/lib/ddtrace/contrib/redis/configuration/settings.rb +6 -0
- data/lib/ddtrace/contrib/redis/ext.rb +2 -0
- data/lib/ddtrace/contrib/redis/integration.rb +1 -0
- data/lib/ddtrace/contrib/redis/patcher.rb +21 -3
- data/lib/ddtrace/contrib/redis/quantize.rb +29 -0
- data/lib/ddtrace/contrib/redis/tags.rb +6 -1
- data/lib/ddtrace/contrib/redis/vendor/LICENSE +20 -0
- data/lib/ddtrace/contrib/redis/vendor/resolver.rb +7 -7
- data/lib/ddtrace/contrib/registerable.rb +5 -4
- data/lib/ddtrace/contrib/registry.rb +3 -2
- data/lib/ddtrace/contrib/resque/configuration/settings.rb +19 -1
- data/lib/ddtrace/contrib/resque/ext.rb +1 -0
- data/lib/ddtrace/contrib/resque/integration.rb +3 -2
- data/lib/ddtrace/contrib/resque/patcher.rb +5 -4
- data/lib/ddtrace/contrib/resque/resque_job.rb +26 -2
- data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/rest_client/ext.rb +1 -0
- data/lib/ddtrace/contrib/rest_client/integration.rb +1 -0
- data/lib/ddtrace/contrib/rest_client/patcher.rb +3 -1
- data/lib/ddtrace/contrib/rest_client/request_patch.rb +3 -4
- data/lib/ddtrace/contrib/semantic_logger/configuration/settings.rb +19 -0
- data/lib/ddtrace/contrib/semantic_logger/ext.rb +11 -0
- data/lib/ddtrace/contrib/semantic_logger/instrumentation.rb +43 -0
- data/lib/ddtrace/contrib/semantic_logger/integration.rb +48 -0
- data/lib/ddtrace/contrib/semantic_logger/patcher.rb +26 -0
- data/lib/ddtrace/contrib/sequel/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/sequel/database.rb +2 -1
- data/lib/ddtrace/contrib/sequel/dataset.rb +2 -1
- data/lib/ddtrace/contrib/sequel/ext.rb +1 -0
- data/lib/ddtrace/contrib/sequel/integration.rb +1 -0
- data/lib/ddtrace/contrib/sequel/patcher.rb +3 -2
- data/lib/ddtrace/contrib/sequel/utils.rb +6 -6
- data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +3 -0
- data/lib/ddtrace/contrib/shoryuken/ext.rb +1 -0
- data/lib/ddtrace/contrib/shoryuken/integration.rb +1 -0
- data/lib/ddtrace/contrib/shoryuken/patcher.rb +1 -0
- data/lib/ddtrace/contrib/shoryuken/tracer.rb +9 -2
- data/lib/ddtrace/contrib/sidekiq/client_tracer.rb +1 -0
- data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +2 -0
- data/lib/ddtrace/contrib/sidekiq/ext.rb +1 -0
- data/lib/ddtrace/contrib/sidekiq/integration.rb +1 -0
- data/lib/ddtrace/contrib/sidekiq/patcher.rb +1 -0
- data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +6 -7
- data/lib/ddtrace/contrib/sidekiq/tracing.rb +1 -1
- data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/sinatra/env.rb +2 -3
- data/lib/ddtrace/contrib/sinatra/ext.rb +1 -0
- data/lib/ddtrace/contrib/sinatra/headers.rb +2 -3
- data/lib/ddtrace/contrib/sinatra/integration.rb +1 -0
- data/lib/ddtrace/contrib/sinatra/patcher.rb +3 -1
- data/lib/ddtrace/contrib/sinatra/tracer.rb +14 -6
- data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +13 -6
- data/lib/ddtrace/contrib/sneakers/configuration/settings.rb +2 -0
- data/lib/ddtrace/contrib/sneakers/ext.rb +12 -11
- data/lib/ddtrace/contrib/sneakers/integration.rb +1 -0
- data/lib/ddtrace/contrib/sneakers/patcher.rb +1 -0
- data/lib/ddtrace/contrib/sneakers/tracer.rb +17 -21
- data/lib/ddtrace/contrib/status_code_matcher.rb +70 -0
- data/lib/ddtrace/contrib/sucker_punch/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/sucker_punch/exception_handler.rb +5 -6
- data/lib/ddtrace/contrib/sucker_punch/ext.rb +1 -0
- data/lib/ddtrace/contrib/sucker_punch/instrumentation.rb +5 -0
- data/lib/ddtrace/contrib/sucker_punch/integration.rb +1 -0
- data/lib/ddtrace/contrib/sucker_punch/patcher.rb +2 -0
- data/lib/ddtrace/correlation.rb +3 -1
- data/lib/ddtrace/diagnostics/environment_logger.rb +9 -7
- data/lib/ddtrace/diagnostics/health.rb +1 -0
- data/lib/ddtrace/distributed_tracing/headers/b3.rb +1 -0
- data/lib/ddtrace/distributed_tracing/headers/b3_single.rb +1 -0
- data/lib/ddtrace/distributed_tracing/headers/datadog.rb +1 -0
- data/lib/ddtrace/distributed_tracing/headers/headers.rb +2 -0
- data/lib/ddtrace/distributed_tracing/headers/helpers.rb +2 -3
- data/lib/ddtrace/encoding.rb +3 -0
- data/lib/ddtrace/error.rb +78 -8
- data/lib/ddtrace/event.rb +1 -0
- data/lib/ddtrace/ext/analytics.rb +1 -0
- data/lib/ddtrace/ext/app_types.rb +1 -0
- data/lib/ddtrace/ext/correlation.rb +1 -0
- data/lib/ddtrace/ext/diagnostics.rb +1 -0
- data/lib/ddtrace/ext/distributed.rb +9 -2
- data/lib/ddtrace/ext/environment.rb +8 -0
- data/lib/ddtrace/ext/errors.rb +1 -0
- data/lib/ddtrace/ext/forced_tracing.rb +1 -0
- data/lib/ddtrace/ext/git.rb +20 -0
- data/lib/ddtrace/ext/http.rb +2 -1
- data/lib/ddtrace/ext/integration.rb +1 -0
- data/lib/ddtrace/ext/manual_tracing.rb +1 -0
- data/lib/ddtrace/ext/metrics.rb +1 -0
- data/lib/ddtrace/ext/net.rb +1 -0
- data/lib/ddtrace/ext/priority.rb +1 -0
- data/lib/ddtrace/ext/profiling.rb +56 -0
- data/lib/ddtrace/ext/runtime.rb +2 -7
- data/lib/ddtrace/ext/sampling.rb +1 -0
- data/lib/ddtrace/ext/sql.rb +1 -0
- data/lib/ddtrace/ext/test.rb +9 -0
- data/lib/ddtrace/ext/transport.rb +3 -0
- data/lib/ddtrace/forced_tracing.rb +3 -0
- data/lib/ddtrace/logger.rb +2 -1
- data/lib/ddtrace/metrics.rb +84 -24
- data/lib/ddtrace/opentelemetry/extensions.rb +2 -1
- data/lib/ddtrace/opentelemetry/span.rb +1 -0
- data/lib/ddtrace/opentracer.rb +21 -39
- data/lib/ddtrace/opentracer/binary_propagator.rb +1 -0
- data/lib/ddtrace/opentracer/carrier.rb +1 -0
- data/lib/ddtrace/opentracer/distributed_headers.rb +4 -0
- data/lib/ddtrace/opentracer/global_tracer.rb +1 -0
- data/lib/ddtrace/opentracer/propagator.rb +1 -0
- data/lib/ddtrace/opentracer/rack_propagator.rb +1 -0
- data/lib/ddtrace/opentracer/scope.rb +1 -0
- data/lib/ddtrace/opentracer/scope_manager.rb +1 -0
- data/lib/ddtrace/opentracer/span.rb +3 -6
- data/lib/ddtrace/opentracer/span_context.rb +1 -0
- data/lib/ddtrace/opentracer/span_context_factory.rb +1 -0
- data/lib/ddtrace/opentracer/text_map_propagator.rb +1 -0
- data/lib/ddtrace/opentracer/thread_local_scope.rb +2 -0
- data/lib/ddtrace/opentracer/thread_local_scope_manager.rb +1 -0
- data/lib/ddtrace/opentracer/tracer.rb +1 -0
- data/lib/ddtrace/patcher.rb +28 -6
- data/lib/ddtrace/pin.rb +9 -61
- data/lib/ddtrace/pipeline.rb +1 -0
- data/lib/ddtrace/pipeline/span_filter.rb +2 -1
- data/lib/ddtrace/pipeline/span_processor.rb +1 -0
- data/lib/ddtrace/profiling.rb +151 -0
- data/lib/ddtrace/profiling/backtrace_location.rb +33 -0
- data/lib/ddtrace/profiling/buffer.rb +42 -0
- data/lib/ddtrace/profiling/collectors/stack.rb +257 -0
- data/lib/ddtrace/profiling/encoding/profile.rb +38 -0
- data/lib/ddtrace/profiling/event.rb +14 -0
- data/lib/ddtrace/profiling/events/stack.rb +81 -0
- data/lib/ddtrace/profiling/exporter.rb +24 -0
- data/lib/ddtrace/profiling/ext/cpu.rb +67 -0
- data/lib/ddtrace/profiling/ext/cthread.rb +156 -0
- data/lib/ddtrace/profiling/ext/forking.rb +98 -0
- data/lib/ddtrace/profiling/flush.rb +44 -0
- data/lib/ddtrace/profiling/native_extension.rb +18 -0
- data/lib/ddtrace/profiling/pprof/builder.rb +120 -0
- data/lib/ddtrace/profiling/pprof/converter.rb +90 -0
- data/lib/ddtrace/profiling/pprof/message_set.rb +15 -0
- data/lib/ddtrace/profiling/pprof/payload.rb +19 -0
- data/lib/ddtrace/profiling/pprof/pprof.proto +212 -0
- data/lib/ddtrace/profiling/pprof/pprof_pb.rb +82 -0
- data/lib/ddtrace/profiling/pprof/stack_sample.rb +117 -0
- data/lib/ddtrace/profiling/pprof/string_table.rb +11 -0
- data/lib/ddtrace/profiling/pprof/template.rb +119 -0
- data/lib/ddtrace/profiling/preload.rb +4 -0
- data/lib/ddtrace/profiling/profiler.rb +31 -0
- data/lib/ddtrace/profiling/recorder.rb +96 -0
- data/lib/ddtrace/profiling/scheduler.rb +134 -0
- data/lib/ddtrace/profiling/tasks/setup.rb +82 -0
- data/lib/ddtrace/profiling/trace_identifiers/ddtrace.rb +41 -0
- data/lib/ddtrace/profiling/trace_identifiers/helper.rb +46 -0
- data/lib/ddtrace/profiling/transport/client.rb +15 -0
- data/lib/ddtrace/profiling/transport/http.rb +120 -0
- data/lib/ddtrace/profiling/transport/http/api.rb +44 -0
- data/lib/ddtrace/profiling/transport/http/api/endpoint.rb +101 -0
- data/lib/ddtrace/profiling/transport/http/api/instance.rb +37 -0
- data/lib/ddtrace/profiling/transport/http/api/spec.rb +41 -0
- data/lib/ddtrace/profiling/transport/http/builder.rb +29 -0
- data/lib/ddtrace/profiling/transport/http/client.rb +34 -0
- data/lib/ddtrace/profiling/transport/http/response.rb +22 -0
- data/lib/ddtrace/profiling/transport/io.rb +31 -0
- data/lib/ddtrace/profiling/transport/io/client.rb +28 -0
- data/lib/ddtrace/profiling/transport/io/response.rb +17 -0
- data/lib/ddtrace/profiling/transport/parcel.rb +18 -0
- data/lib/ddtrace/profiling/transport/request.rb +16 -0
- data/lib/ddtrace/profiling/transport/response.rb +9 -0
- data/lib/ddtrace/propagation/grpc_propagator.rb +18 -4
- data/lib/ddtrace/propagation/http_propagator.rb +18 -2
- data/lib/ddtrace/quantization/hash.rb +1 -0
- data/lib/ddtrace/quantization/http.rb +4 -0
- data/lib/ddtrace/runtime/metrics.rb +21 -14
- data/lib/ddtrace/sampler.rb +2 -1
- data/lib/ddtrace/sampling.rb +1 -0
- data/lib/ddtrace/sampling/matcher.rb +1 -0
- data/lib/ddtrace/sampling/rate_limiter.rb +66 -16
- data/lib/ddtrace/sampling/rule.rb +2 -1
- data/lib/ddtrace/sampling/rule_sampler.rb +6 -10
- data/lib/ddtrace/span.rb +44 -19
- data/lib/ddtrace/sync_writer.rb +17 -15
- data/lib/ddtrace/tasks/exec.rb +47 -0
- data/lib/ddtrace/tasks/help.rb +15 -0
- data/lib/ddtrace/tracer.rb +68 -57
- data/lib/ddtrace/transport/http.rb +51 -38
- data/lib/ddtrace/transport/http/adapters/net.rb +28 -8
- data/lib/ddtrace/transport/http/adapters/registry.rb +2 -0
- data/lib/ddtrace/transport/http/adapters/test.rb +1 -0
- data/lib/ddtrace/transport/http/adapters/unix_socket.rb +3 -4
- data/lib/ddtrace/transport/http/api.rb +1 -0
- data/lib/ddtrace/transport/http/api/endpoint.rb +1 -0
- data/lib/ddtrace/transport/http/api/fallbacks.rb +1 -0
- data/lib/ddtrace/transport/http/api/instance.rb +1 -0
- data/lib/ddtrace/transport/http/api/map.rb +1 -0
- data/lib/ddtrace/transport/http/api/spec.rb +1 -0
- data/lib/ddtrace/transport/http/builder.rb +8 -1
- data/lib/ddtrace/transport/http/client.rb +3 -1
- data/lib/ddtrace/transport/http/env.rb +9 -0
- data/lib/ddtrace/transport/http/response.rb +1 -0
- data/lib/ddtrace/transport/http/statistics.rb +3 -2
- data/lib/ddtrace/transport/http/traces.rb +6 -6
- data/lib/ddtrace/transport/io.rb +2 -1
- data/lib/ddtrace/transport/io/client.rb +17 -9
- data/lib/ddtrace/transport/io/response.rb +2 -3
- data/lib/ddtrace/transport/io/traces.rb +10 -1
- data/lib/ddtrace/transport/parcel.rb +7 -0
- data/lib/ddtrace/transport/request.rb +1 -0
- data/lib/ddtrace/transport/response.rb +1 -0
- data/lib/ddtrace/transport/statistics.rb +1 -0
- data/lib/ddtrace/transport/traces.rb +21 -3
- data/lib/ddtrace/utils.rb +23 -12
- data/lib/ddtrace/utils/compression.rb +28 -0
- data/lib/ddtrace/utils/database.rb +1 -0
- data/lib/ddtrace/utils/forking.rb +53 -0
- data/lib/ddtrace/utils/object_set.rb +40 -0
- data/lib/ddtrace/utils/only_once.rb +41 -0
- data/lib/ddtrace/utils/sequence.rb +18 -0
- data/lib/ddtrace/utils/string_table.rb +46 -0
- data/lib/ddtrace/utils/time.rb +34 -2
- data/lib/ddtrace/vendor/active_record/MIT-LICENSE +20 -0
- data/lib/ddtrace/vendor/active_record/connection_specification.rb +1 -0
- data/lib/ddtrace/vendor/multipart-post/LICENSE +11 -0
- data/lib/ddtrace/vendor/multipart-post/multipart.rb +13 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post.rb +9 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post/composite_read_io.rb +117 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post/multipartable.rb +58 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post/parts.rb +136 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post/version.rb +10 -0
- data/lib/ddtrace/vendor/multipart-post/net/http/post/multipart.rb +33 -0
- data/lib/ddtrace/version.rb +15 -2
- data/lib/ddtrace/worker.rb +1 -0
- data/lib/ddtrace/workers.rb +8 -2
- data/lib/ddtrace/workers/async.rb +15 -5
- data/lib/ddtrace/workers/loop.rb +32 -5
- data/lib/ddtrace/workers/polling.rb +13 -5
- data/lib/ddtrace/workers/queue.rb +3 -1
- data/lib/ddtrace/workers/runtime_metrics.rb +22 -4
- data/lib/ddtrace/workers/trace_writer.rb +14 -16
- data/lib/ddtrace/writer.rb +33 -8
- metadata +149 -388
- data/.circleci/config.yml +0 -548
- data/.circleci/images/primary/Dockerfile-2.0.0 +0 -73
- data/.circleci/images/primary/Dockerfile-2.1.10 +0 -73
- data/.circleci/images/primary/Dockerfile-2.2.10 +0 -73
- data/.circleci/images/primary/Dockerfile-2.3.8 +0 -75
- data/.circleci/images/primary/Dockerfile-2.4.6 +0 -73
- data/.circleci/images/primary/Dockerfile-2.5.6 +0 -73
- data/.circleci/images/primary/Dockerfile-2.6.4 +0 -73
- data/.circleci/images/primary/Dockerfile-2.7.0 +0 -73
- data/.circleci/images/primary/Dockerfile-jruby-9.2 +0 -77
- data/.dockerignore +0 -1
- data/.env +0 -26
- data/.github/CODEOWNERS +0 -1
- data/.gitlab-ci.yml +0 -27
- data/.rspec +0 -1
- data/.rubocop.yml +0 -85
- data/.simplecov +0 -38
- data/Appraisals +0 -1071
- data/Gemfile +0 -7
- data/Rakefile +0 -768
- data/benchmarks/postgres_database.yml +0 -9
- data/benchmarks/sidekiq_test.rb +0 -154
- data/docker-compose.yml +0 -370
- data/lib/ddtrace/augmentation.rb +0 -13
- data/lib/ddtrace/augmentation/method_wrapper.rb +0 -20
- data/lib/ddtrace/augmentation/method_wrapping.rb +0 -38
- data/lib/ddtrace/augmentation/shim.rb +0 -102
- data/lib/ddtrace/environment.rb +0 -41
- data/lib/ddtrace/monkey.rb +0 -58
- data/lib/ddtrace/runtime/cgroup.rb +0 -44
- data/lib/ddtrace/runtime/class_count.rb +0 -17
- data/lib/ddtrace/runtime/container.rb +0 -73
- data/lib/ddtrace/runtime/gc.rb +0 -16
- data/lib/ddtrace/runtime/identity.rb +0 -41
- data/lib/ddtrace/runtime/object_space.rb +0 -19
- data/lib/ddtrace/runtime/socket.rb +0 -14
- data/lib/ddtrace/runtime/thread_count.rb +0 -16
- data/tasks/release_gem.rake +0 -28
data/CONTRIBUTING.md
CHANGED
@@ -20,8 +20,6 @@ Additionally, if you can, include:
|
|
20
20
|
- Links to similar features that would serve as a good comparison
|
21
21
|
- (Any other details that would be useful for implementing this feature!)
|
22
22
|
|
23
|
-
Feature requests will be reviewed, discussed, and then added to [our Community project](https://github.com/DataDog/dd-trace-rb/projects/2).
|
24
|
-
|
25
23
|
## Found a bug?
|
26
24
|
|
27
25
|
For any urgent matters (such as outages) or issues concerning the Datadog service or UI, contact our support team via https://docs.datadoghq.com/help/ for direct, faster assistance.
|
@@ -46,7 +44,7 @@ If at all possible, also provide:
|
|
46
44
|
- Code sample or test that reproduces the problem
|
47
45
|
- An explanation of what causes the bug and/or how it can be fixed
|
48
46
|
|
49
|
-
Reports that include rich detail are better, and ones with code that reproduce the bug are best.
|
47
|
+
Reports that include rich detail are better, and ones with code that reproduce the bug are best.
|
50
48
|
|
51
49
|
## Have a patch?
|
52
50
|
|
@@ -56,7 +54,7 @@ We welcome code contributions to the library, which you can [submit as a pull re
|
|
56
54
|
2. **Make any changes** for your patch.
|
57
55
|
3. **Write tests** that demonstrate how the feature works or how the bug is fixed.
|
58
56
|
4. **Update any documentation** such as `docs/GettingStarted.md`, especially for new features.
|
59
|
-
5. **Submit the pull request** from your fork back to
|
57
|
+
5. **Submit the pull request** from your fork back to the latest revision of the `master` branch on https://github.com/DataDog/dd-trace-rb.
|
60
58
|
|
61
59
|
The pull request will be run through our CI pipeline, and a project member will review the changes with you. At a minimum, to be accepted and merged, pull requests must:
|
62
60
|
|
@@ -74,9 +72,7 @@ We also recommend that you share in your description:
|
|
74
72
|
- Benchmarks if the feature is anticipated to have performance implications
|
75
73
|
- Any limitations, constraints or risks that are important to consider
|
76
74
|
|
77
|
-
|
78
|
-
|
79
|
-
For more information on common topics such as debugging locally, or how to write new integrations, check out [our development guide](https://github.com/DataDog/dd-trace-rb/docs/DevelopmentGuide.md). If at any point you have a question or need assistance with your pull request, feel free to mention a project member! We're always happy to help contributors with their pull requests.
|
75
|
+
For more information on common topics such as debugging locally, or how to write new integrations, check out [our development guide](https://github.com/DataDog/dd-trace-rb/blob/master/docs/DevelopmentGuide.md). If at any point you have a question or need assistance with your pull request, feel free to mention a project member! We're always happy to help contributors with their pull requests.
|
80
76
|
|
81
77
|
## Final word
|
82
78
|
|
data/README.md
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# Datadog Trace Client
|
2
2
|
|
3
3
|
[![CircleCI](https://circleci.com/gh/DataDog/dd-trace-rb/tree/master.svg?style=svg&circle-token=b0bd5ef866ec7f7b018f48731bb495f2d1372cc1)](https://circleci.com/gh/DataDog/dd-trace-rb/tree/master)
|
4
|
+
[![codecov](https://codecov.io/gh/DataDog/dd-trace-rb/branch/master/graph/badge.svg)](https://app.codecov.io/gh/DataDog/dd-trace-rb/branch/master)
|
4
5
|
|
5
6
|
``ddtrace`` is Datadog’s tracing client for Ruby. It is used to trace requests as they flow across web servers,
|
6
7
|
databases and microservices so that developers have great visiblity into bottlenecks and troublesome requests.
|
data/bin/ddtracerb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'ddtrace/tasks/exec'
|
3
|
+
require 'ddtrace/tasks/help'
|
4
|
+
|
5
|
+
command = ARGV.shift
|
6
|
+
|
7
|
+
case command
|
8
|
+
when 'exec'
|
9
|
+
Datadog::Tasks::Exec.new(ARGV).run
|
10
|
+
when 'help', '--help'
|
11
|
+
Datadog::Tasks::Help.new.run
|
12
|
+
else
|
13
|
+
puts "Command '#{command}' is not valid for ddtrace."
|
14
|
+
Datadog::Tasks::Help.new.run
|
15
|
+
end
|
data/ddtrace.gemspec
CHANGED
@@ -7,7 +7,7 @@ require 'ddtrace/version'
|
|
7
7
|
Gem::Specification.new do |spec|
|
8
8
|
spec.name = 'ddtrace'
|
9
9
|
spec.version = Datadog::VERSION::STRING
|
10
|
-
spec.required_ruby_version = ">= #{Datadog::VERSION::MINIMUM_RUBY_VERSION}"
|
10
|
+
spec.required_ruby_version = [">= #{Datadog::VERSION::MINIMUM_RUBY_VERSION}", "< #{Datadog::VERSION::MAXIMUM_RUBY_VERSION}"]
|
11
11
|
spec.required_rubygems_version = '>= 2.0.0'
|
12
12
|
spec.authors = ['Datadog, Inc.']
|
13
13
|
spec.email = ['dev@datadoghq.com']
|
@@ -28,46 +28,26 @@ Gem::Specification.new do |spec|
|
|
28
28
|
raise 'RubyGems 2.0 or newer is required to protect against public gem pushes.'
|
29
29
|
end
|
30
30
|
|
31
|
-
spec.files
|
32
|
-
|
33
|
-
|
31
|
+
spec.files =
|
32
|
+
`git ls-files -z`
|
33
|
+
.split("\x0")
|
34
|
+
.reject { |f| f.match(%r{^(test|spec|features|[.]circleci|[.]github|[.]dd-ci|benchmarks|gemfiles|integration|tasks|sorbet)/}) }
|
35
|
+
.reject do |f|
|
36
|
+
['.dockerignore', '.env', '.gitattributes', '.gitlab-ci.yml', '.rspec', '.rubocop.yml',
|
37
|
+
'.rubocop_todo.yml', '.simplecov', 'Appraisals', 'Gemfile', 'Rakefile', 'docker-compose.yml'].include?(f)
|
38
|
+
end
|
39
|
+
spec.executables = ['ddtracerb']
|
34
40
|
spec.require_paths = ['lib']
|
35
41
|
|
36
|
-
|
37
|
-
|
38
|
-
# Optional extensions
|
39
|
-
# TODO: Move this to Appraisals?
|
40
|
-
spec.add_development_dependency 'dogstatsd-ruby', '>= 3.3.0'
|
41
|
-
spec.add_development_dependency 'opentracing', '>= 0.4.1'
|
42
|
-
|
43
|
-
# Development dependencies
|
44
|
-
spec.add_development_dependency 'concurrent-ruby' # Leave it open as we also have it as an integration and want Appraisal to control the version under test.
|
45
|
-
spec.add_development_dependency 'rake', '>= 10.5'
|
46
|
-
spec.add_development_dependency 'rubocop', '= 0.49.1' if RUBY_VERSION >= '2.1.0'
|
47
|
-
spec.add_development_dependency 'rspec', '~> 3.0'
|
48
|
-
spec.add_development_dependency 'rspec-collection_matchers', '~> 1.1'
|
49
|
-
spec.add_development_dependency 'minitest', '= 5.10.1'
|
50
|
-
spec.add_development_dependency 'minitest-around', '0.5.0'
|
51
|
-
spec.add_development_dependency 'minitest-stub_any_instance', '1.0.2'
|
52
|
-
spec.add_development_dependency 'appraisal', '~> 2.2'
|
53
|
-
spec.add_development_dependency 'yard', '~> 0.9'
|
54
|
-
spec.add_development_dependency 'webmock', '~> 2.0'
|
55
|
-
spec.add_development_dependency 'builder'
|
56
|
-
if RUBY_PLATFORM != 'java'
|
57
|
-
spec.add_development_dependency 'sqlite3', '~> 1.3.6'
|
42
|
+
if RUBY_VERSION >= '2.2.0'
|
43
|
+
spec.add_dependency 'msgpack'
|
58
44
|
else
|
59
|
-
|
45
|
+
# msgpack 1.4 fails for Ruby 2.1: https://github.com/msgpack/msgpack-ruby/issues/205
|
46
|
+
spec.add_dependency 'msgpack', '< 1.4'
|
60
47
|
end
|
61
|
-
spec.add_development_dependency 'climate_control', '~> 0.2.0'
|
62
48
|
|
63
|
-
#
|
64
|
-
spec.
|
65
|
-
|
66
|
-
spec.
|
67
|
-
spec.add_development_dependency 'memory_profiler', '~> 0.9'
|
68
|
-
spec.add_development_dependency 'redcarpet', '~> 3.4' if RUBY_PLATFORM != 'java'
|
69
|
-
spec.add_development_dependency 'pry', '~> 0.10.4'
|
70
|
-
spec.add_development_dependency 'pry-stack_explorer', '~> 0.4.9.2'
|
71
|
-
spec.add_development_dependency 'simplecov', '~> 0.17'
|
72
|
-
spec.add_development_dependency 'warning', '~> 1' if RUBY_VERSION >= '2.5.0'
|
49
|
+
# Used by the profiler
|
50
|
+
spec.add_dependency 'ffi', '~> 1.0'
|
51
|
+
|
52
|
+
spec.extensions = ['ext/ddtrace_profiling_native_extension/extconf.rb']
|
73
53
|
end
|
data/docs/DevelopmentGuide.md
CHANGED
@@ -9,6 +9,8 @@ This guide covers some of the common how-tos and technical reference material fo
|
|
9
9
|
- [Writing tests](#writing-tests)
|
10
10
|
- [Running tests](#running-tests)
|
11
11
|
- [Checking code quality](#checking-code-quality)
|
12
|
+
- [Running benchmarks](#running-benchmarks)
|
13
|
+
- [Type checking](#type-checking)
|
12
14
|
- [Appendix](#appendix)
|
13
15
|
- [Writing new integrations](#writing-new-integrations)
|
14
16
|
- [Custom transport adapters](#custom-transport-adapters)
|
@@ -114,6 +116,34 @@ Because you are likely not running all tests locally, your report will contain p
|
|
114
116
|
You *must* check the CI step `coverage` for the complete test coverage report, ensuring coverage is not
|
115
117
|
decreased.
|
116
118
|
|
119
|
+
**Ensuring tests don't leak resources**
|
120
|
+
|
121
|
+
Tests execution can create resources that are hard to track: threads, sockets, files, etc. Because these resources can come
|
122
|
+
from the both the test setup as well as the code under test, making sure all resources are properly disposed is important
|
123
|
+
to prevent the application from inadvertently creating cumulative resources during its execution.
|
124
|
+
|
125
|
+
When running tests that utilize threads, you might see an error message similar to this one:
|
126
|
+
|
127
|
+
```
|
128
|
+
Test leaked 1 thread: "Datadog::Workers::AsyncTransport integration tests"
|
129
|
+
Ensure all threads are terminated when test finishes:
|
130
|
+
1: #<Thread:0x00007fcbc99863d0 /Users/marco.costa/work/dd-trace-rb/spec/spec_helper.rb:145 sleep> (Thread)
|
131
|
+
Thread Creation Site:
|
132
|
+
./dd-trace-rb/spec/ddtrace/workers_integration_spec.rb:245:in 'new'
|
133
|
+
./dd-trace-rb/spec/ddtrace/workers_integration_spec.rb:245:in 'block (4 levels) in <top (required)>'
|
134
|
+
Thread Backtrace:
|
135
|
+
./dd-trace-rb/spec/ddtrace/workers_integration_spec.rb:262:in 'sleep'
|
136
|
+
.dd-trace-rb/spec/ddtrace/workers_integration_spec.rb:262:in 'block (5 levels) in <top (required)>'
|
137
|
+
./dd-trace-rb/spec/spec_helper.rb:147:in 'block in initialize'
|
138
|
+
```
|
139
|
+
|
140
|
+
This means that this test did not finish all threads by the time the test had finished. In this case, the thread
|
141
|
+
creation can be traced to `workers_integration_spec.rb:245:in 'new'`. The thread itself is sleeping at `workers_integration_spec.rb:262:in 'sleep'`.
|
142
|
+
|
143
|
+
The actionable in this case would be to ensure that the thread created in `workers_integration_spec.rb:245` is properly terminated by invoking `Thread#join` during the test tear down, which will wait for the thread to finish before returning.
|
144
|
+
|
145
|
+
Depending on the situation, the thread in question might need to be forced to terminate. It's recommended to have a mechanism in place to terminate it (a shared variable that changes value when the thread should exit), but as a last resort, `Thread#terminate` forces the thread to finish. Keep in mind that regardless of the termination method, `Thread#join` must be called to ensure that the thread has completely finished its shutdown process.
|
146
|
+
|
117
147
|
### Checking code quality
|
118
148
|
|
119
149
|
**Linting**
|
@@ -124,6 +154,29 @@ The trace library uses Rubocop to enforce [code style](https://github.com/bbatso
|
|
124
154
|
$ bundle exec rake rubocop
|
125
155
|
```
|
126
156
|
|
157
|
+
### Running benchmarks
|
158
|
+
|
159
|
+
If your changes can have a measurable performance impact, we recommend running our benchmark suite:
|
160
|
+
|
161
|
+
```
|
162
|
+
$ bundle exec rake spec:benchmark
|
163
|
+
```
|
164
|
+
|
165
|
+
Results are printed to STDOUT as well as written to the `./tmp/benchmark/` directory.
|
166
|
+
|
167
|
+
## Type checking
|
168
|
+
|
169
|
+
This library uses the [Sorbet](https://sorbet.org/) type checker. Sorbet can be run with `bundle exec srb tc` (or `bundle exec rake
|
170
|
+
typecheck`). There's also Language Server Protocol support, if your editor supports it.
|
171
|
+
|
172
|
+
Type checking can be controlled on a file-by-file manner, using a `# typed: ...` comment. The default (when none is provided) is assuming `# typed: false`.
|
173
|
+
|
174
|
+
Things to note:
|
175
|
+
|
176
|
+
* For compatibility with older Rubies, we use Sorbet but do not yet allow type annotations in the codebase. If Sorbet is blocking you, feel free to use `# typed: false` or `# typed: ignore` with a quick note on why this was needed. In many cases, Sorbet can typecheck a file correctly with no extra type annotations.
|
177
|
+
|
178
|
+
* Most integration-specific code will reference optional external dependencies which Sorbet cannot see into. You'll probably need to use `# typed: false` or `# typed: ignore` for those files as well.
|
179
|
+
|
127
180
|
## Appendix
|
128
181
|
|
129
182
|
### Writing new integrations
|
@@ -141,9 +194,9 @@ To get started quickly, it's perfectly fine to copy-paste an existing integratio
|
|
141
194
|
|
142
195
|
Once you have it working in your application, you can [add unit tests](#writing-tests), [run them locally](#running-tests), and [check for code quality](#checking-code-quality) using Docker Compose.
|
143
196
|
|
144
|
-
Then [open a pull request](
|
197
|
+
Then [open a pull request](../CONTRIBUTING.md#have-a-patch) and be sure to add the following to the description:
|
145
198
|
|
146
|
-
- [Documentation](
|
199
|
+
- [Documentation](./GettingStarted.md) for the integration, including versions supported.
|
147
200
|
- Links to the repository/website of the library being integrated
|
148
201
|
- Screenshots showing a sample trace
|
149
202
|
- Any additional code snippets, sample apps, benchmarks, or other resources that demonstrate its implementation are a huge plus!
|
data/docs/GettingStarted.md
CHANGED
@@ -34,6 +34,7 @@ To contribute, check out the [contribution guidelines][contribution docs] and [d
|
|
34
34
|
- [Active Support](#active-support)
|
35
35
|
- [AWS](#aws)
|
36
36
|
- [Concurrent Ruby](#concurrent-ruby)
|
37
|
+
- [Cucumber](#cucumber)
|
37
38
|
- [Dalli](#dalli)
|
38
39
|
- [DelayedJob](#delayedjob)
|
39
40
|
- [Elasticsearch](#elasticsearch)
|
@@ -44,10 +45,13 @@ To contribute, check out the [contribution guidelines][contribution docs] and [d
|
|
44
45
|
- [GraphQL](#graphql)
|
45
46
|
- [gRPC](#grpc)
|
46
47
|
- [http.rb](#http-rb)
|
48
|
+
- [httpclient](#httpclient)
|
49
|
+
- [httpx](#httpx)
|
47
50
|
- [MongoDB](#mongodb)
|
48
51
|
- [MySQL2](#mysql2)
|
49
52
|
- [Net/HTTP](#net-http)
|
50
53
|
- [Presto](#presto)
|
54
|
+
- [Qless](#qless)
|
51
55
|
- [Que](#que)
|
52
56
|
- [Racecar](#racecar)
|
53
57
|
- [Rack](#rack)
|
@@ -56,6 +60,7 @@ To contribute, check out the [contribution guidelines][contribution docs] and [d
|
|
56
60
|
- [Redis](#redis)
|
57
61
|
- [Rest Client](#rest-client)
|
58
62
|
- [Resque](#resque)
|
63
|
+
- [RSpec](#rspec)
|
59
64
|
- [Shoryuken](#shoryuken)
|
60
65
|
- [Sequel](#sequel)
|
61
66
|
- [Sidekiq](#sidekiq)
|
@@ -66,7 +71,9 @@ To contribute, check out the [contribution guidelines][contribution docs] and [d
|
|
66
71
|
- [Tracer settings](#tracer-settings)
|
67
72
|
- [Custom logging](#custom-logging)
|
68
73
|
- [Environment and tags](#environment-and-tags)
|
74
|
+
- [Environment variables](#environment-variables)
|
69
75
|
- [Sampling](#sampling)
|
76
|
+
- [Application-side sampling](#application-side-sampling)
|
70
77
|
- [Priority sampling](#priority-sampling)
|
71
78
|
- [Distributed tracing](#distributed-tracing)
|
72
79
|
- [HTTP request queuing](#http-request-queuing)
|
@@ -78,6 +85,12 @@ To contribute, check out the [contribution guidelines][contribution docs] and [d
|
|
78
85
|
- [Metrics](#metrics)
|
79
86
|
- [For application runtime](#for-application-runtime)
|
80
87
|
- [OpenTracing](#opentracing)
|
88
|
+
- [Profiling](#profiling)
|
89
|
+
- [Troubleshooting](#troubleshooting)
|
90
|
+
- [Profiling Resque jobs](#profiling-resque-jobs)
|
91
|
+
- [Known issues and suggested configurations](#known-issues-and-suggested-configurations)
|
92
|
+
- [Payload too large](#payload-too-large)
|
93
|
+
- [Stack level too deep](#stack-level-too-deep)
|
81
94
|
|
82
95
|
## Compatibility
|
83
96
|
|
@@ -85,14 +98,15 @@ To contribute, check out the [contribution guidelines][contribution docs] and [d
|
|
85
98
|
|
86
99
|
| Type | Documentation | Version | Support type | Gem version support |
|
87
100
|
| ----- | -------------------------- | ----- | ------------------------------------ | ------------------- |
|
88
|
-
| MRI | https://www.ruby-lang.org/ |
|
101
|
+
| MRI | https://www.ruby-lang.org/ | 3.0 | Full | Latest |
|
102
|
+
| | | 2.7 | Full | Latest |
|
89
103
|
| | | 2.6 | Full | Latest |
|
90
104
|
| | | 2.5 | Full | Latest |
|
91
105
|
| | | 2.4 | Full | Latest |
|
92
106
|
| | | 2.3 | Full | Latest |
|
93
107
|
| | | 2.2 | Full | Latest |
|
94
108
|
| | | 2.1 | Full | Latest |
|
95
|
-
| | | 2.0 |
|
109
|
+
| | | 2.0 | EOL since June 7th, 2021 | < 0.50.0 |
|
96
110
|
| | | 1.9.3 | EOL since August 6th, 2020 | < 0.27.0 |
|
97
111
|
| | | 1.9.1 | EOL since August 6th, 2020 | < 0.27.0 |
|
98
112
|
| JRuby | https://www.jruby.org | 9.2 | Full | Latest |
|
@@ -123,14 +137,38 @@ To contribute, check out the [contribution guidelines][contribution docs] and [d
|
|
123
137
|
|
124
138
|
The following steps will help you quickly start tracing your Ruby application.
|
125
139
|
|
126
|
-
###
|
140
|
+
### Configure the Datadog Agent for APM
|
127
141
|
|
128
142
|
Before downloading tracing on your application, install the Datadog Agent. The Ruby APM tracer sends trace data through the Datadog Agent.
|
129
143
|
|
130
|
-
|
144
|
+
Install and configure the Datadog Agent to receive traces from your now instrumented application. By default the Datadog Agent is enabled in your `datadog.yaml` file under `apm_enabled: true` and listens for trace traffic at `localhost:8126`. For containerized environments, follow the steps below to enable trace collection within the Datadog Agent.
|
145
|
+
|
146
|
+
#### Containers
|
147
|
+
|
148
|
+
1. Set `apm_non_local_traffic: true` in your main [`datadog.yaml` configuration file](https://docs.datadoghq.com/agent/guide/agent-configuration-files/#agent-main-configuration-file).
|
149
|
+
|
150
|
+
2. See the specific setup instructions for [Docker](https://docs.datadoghq.com/agent/docker/apm/?tab=ruby), [Kubernetes](https://docs.datadoghq.com/agent/kubernetes/apm/?tab=helm), [Amazon ECS](https://docs.datadoghq.com/agent/amazon_ecs/apm/?tab=ruby) or [Fargate](https://docs.datadoghq.com/integrations/ecs_fargate/#trace-collection) to ensure that the Agent is configured to receive traces in a containerized environment:
|
151
|
+
|
152
|
+
3. After having instrumented your application, the tracing client sends traces to `localhost:8126` by default. If this is not the correct host and port change it by setting the env variables `DD_AGENT_HOST` and `DD_TRACE_AGENT_PORT`.
|
153
|
+
|
131
154
|
|
132
155
|
### Quickstart for Rails applications
|
133
156
|
|
157
|
+
#### Automatic instrumentation
|
158
|
+
|
159
|
+
1. Add the `ddtrace` gem to your Gemfile:
|
160
|
+
|
161
|
+
```ruby
|
162
|
+
source 'https://rubygems.org'
|
163
|
+
gem 'ddtrace', require: 'ddtrace/auto_instrument'
|
164
|
+
```
|
165
|
+
|
166
|
+
2. Install the gem with `bundle install`
|
167
|
+
|
168
|
+
3. You can configure, override, or disable any specific integration settings by also adding a [Rails Manual Configuration](#rails-manual-configuration) file.
|
169
|
+
|
170
|
+
#### Manual instrumentation
|
171
|
+
|
134
172
|
1. Add the `ddtrace` gem to your Gemfile:
|
135
173
|
|
136
174
|
```ruby
|
@@ -152,6 +190,25 @@ Before downloading tracing on your application, install the Datadog Agent. The R
|
|
152
190
|
|
153
191
|
### Quickstart for Ruby applications
|
154
192
|
|
193
|
+
#### Automatic instrumentation
|
194
|
+
|
195
|
+
1. Install the gem with `gem install ddtrace`
|
196
|
+
2. Requiring any [supported libraries or frameworks](#integration-instrumentation) that should be instrumented.
|
197
|
+
3. Add `require 'ddtrace/auto_instrument'` to your application. _Note:_ This must be done _after_ requiring any supported libraries or frameworks.
|
198
|
+
|
199
|
+
```ruby
|
200
|
+
# Example frameworks and libraries
|
201
|
+
require 'sinatra'
|
202
|
+
require 'faraday'
|
203
|
+
require 'redis'
|
204
|
+
|
205
|
+
require 'ddtrace/auto_instrument'
|
206
|
+
```
|
207
|
+
|
208
|
+
You can configure, override, or disable any specific integration settings by also adding a [Ruby Manual Configuration Block](#ruby-manual-configuration).
|
209
|
+
|
210
|
+
#### Manual instrumentation
|
211
|
+
|
155
212
|
1. Install the gem with `gem install ddtrace`
|
156
213
|
2. Add a configuration block to your Ruby application:
|
157
214
|
|
@@ -226,7 +283,7 @@ And `options` is an optional `Hash` that accepts the following parameters:
|
|
226
283
|
| `resource` | `String` | Name of the resource or action being operated on. Traces with the same resource value will be grouped together for the purpose of metrics (but still independently viewable.) Usually domain specific, such as a URL, query, request, etc. (e.g. `'Article#submit'`, `http://example.com/articles/list`.) | `name` of Span. |
|
227
284
|
| `span_type` | `String` | The type of the span (such as `'http'`, `'db'`, etc.) | `nil` |
|
228
285
|
| `child_of` | `Datadog::Span` / `Datadog::Context` | Parent for this span. If not provided, will automatically become current active span. | `nil` |
|
229
|
-
| `start_time` | `
|
286
|
+
| `start_time` | `Time` | When the span actually starts. Useful when tracing events that have already happened. | `Time.now` |
|
230
287
|
| `tags` | `Hash` | Extra tags which should be added to the span. | `{}` |
|
231
288
|
| `on_error` | `Proc` | Handler invoked when a block is provided to trace, and it raises an error. Provided `span` and `error` as arguments. Sets error on the span by default. | `proc { |span, error| span.set_error(error) unless span.nil? }` |
|
232
289
|
|
@@ -338,6 +395,7 @@ For a list of available integrations, and their configuration options, please re
|
|
338
395
|
| Active Support | `active_support` | `>= 3.0` | `>= 3.0` | *[Link](#active-support)* | *[Link](https://github.com/rails/rails/tree/master/activesupport)* |
|
339
396
|
| AWS | `aws` | `>= 2.0` | `>= 2.0` | *[Link](#aws)* | *[Link](https://github.com/aws/aws-sdk-ruby)* |
|
340
397
|
| Concurrent Ruby | `concurrent_ruby` | `>= 0.9` | `>= 0.9` | *[Link](#concurrent-ruby)* | *[Link](https://github.com/ruby-concurrency/concurrent-ruby)* |
|
398
|
+
| Cucumber | `cucumber` | `>= 3.0` | `>= 1.7.16` | *[Link](#cucumber)* | *[Link](https://github.com/cucumber/cucumber-ruby)* |
|
341
399
|
| Dalli | `dalli` | `>= 2.0` | `>= 2.0` | *[Link](#dalli)* | *[Link](https://github.com/petergoldstein/dalli)* |
|
342
400
|
| DelayedJob | `delayed_job` | `>= 4.1` | `>= 4.1` | *[Link](#delayedjob)* | *[Link](https://github.com/collectiveidea/delayed_job)* |
|
343
401
|
| Elasticsearch | `elasticsearch` | `>= 1.0` | `>= 1.0` | *[Link](#elasticsearch)* | *[Link](https://github.com/elastic/elasticsearch-ruby)* |
|
@@ -348,19 +406,24 @@ For a list of available integrations, and their configuration options, please re
|
|
348
406
|
| GraphQL | `graphql` | `>= 1.7.9` | `>= 1.7.9` | *[Link](#graphql)* | *[Link](https://github.com/rmosolgo/graphql-ruby)* |
|
349
407
|
| gRPC | `grpc` | `>= 1.7` | *gem not available* | *[Link](#grpc)* | *[Link](https://github.com/grpc/grpc/tree/master/src/rubyc)* |
|
350
408
|
| http.rb | `httprb` | `>= 2.0` | `>= 2.0` | *[Link](#http-rb)* | *[Link](https://github.com/httprb/http)* |
|
409
|
+
| httpclient | `httpclient` | `>= 2.2` | `>= 2.2` | *[Link](#httpclient)* | *[Link](https://github.com/nahi/httpclient)* |
|
410
|
+
| httpx | `httpx` | `>= 0.11` | `>= 0.11` | *[Link](#httpx)* | *[Link](https://gitlab.com/honeyryderchuck/httpx)* |
|
351
411
|
| Kafka | `ruby-kafka` | `>= 0.7.10` | `>= 0.7.10` | *[Link](#kafka)* | *[Link](https://github.com/zendesk/ruby-kafka)* |
|
412
|
+
| Makara (through Active Record) | `makara` | `>= 0.3.5` | `>= 0.3.5` | *[Link](#active-record)* | *[Link](https://github.com/instacart/makara)* |
|
352
413
|
| MongoDB | `mongo` | `>= 2.1` | `>= 2.1` | *[Link](#mongodb)* | *[Link](https://github.com/mongodb/mongo-ruby-driver)* |
|
353
414
|
| MySQL2 | `mysql2` | `>= 0.3.21` | *gem not available* | *[Link](#mysql2)* | *[Link](https://github.com/brianmario/mysql2)* |
|
354
415
|
| Net/HTTP | `http` | *(Any supported Ruby)* | *(Any supported Ruby)* | *[Link](#nethttp)* | *[Link](https://ruby-doc.org/stdlib-2.4.0/libdoc/net/http/rdoc/Net/HTTP.html)* |
|
355
416
|
| Presto | `presto` | `>= 0.5.14` | `>= 0.5.14` | *[Link](#presto)* | *[Link](https://github.com/treasure-data/presto-client-ruby)* |
|
417
|
+
| Qless | `qless` | `>= 0.10.0` | `>= 0.10.0` | *[Link](#qless)* | *[Link](https://github.com/seomoz/qless)* |
|
356
418
|
| Que | `que` | `>= 1.0.0.beta2` | `>= 1.0.0.beta2` | *[Link](#que)* | *[Link](https://github.com/que-rb/que)* |
|
357
419
|
| Racecar | `racecar` | `>= 0.3.5` | `>= 0.3.5` | *[Link](#racecar)* | *[Link](https://github.com/zendesk/racecar)* |
|
358
420
|
| Rack | `rack` | `>= 1.1` | `>= 1.1` | *[Link](#rack)* | *[Link](https://github.com/rack/rack)* |
|
359
421
|
| Rails | `rails` | `>= 3.0` | `>= 3.0` | *[Link](#rails)* | *[Link](https://github.com/rails/rails)* |
|
360
422
|
| Rake | `rake` | `>= 12.0` | `>= 12.0` | *[Link](#rake)* | *[Link](https://github.com/ruby/rake)* |
|
361
423
|
| Redis | `redis` | `>= 3.2` | `>= 3.2` | *[Link](#redis)* | *[Link](https://github.com/redis/redis-rb)* |
|
362
|
-
| Resque | `resque` | `>= 1.0
|
424
|
+
| Resque | `resque` | `>= 1.0` | `>= 1.0` | *[Link](#resque)* | *[Link](https://github.com/resque/resque)* |
|
363
425
|
| Rest Client | `rest-client` | `>= 1.8` | `>= 1.8` | *[Link](#rest-client)* | *[Link](https://github.com/rest-client/rest-client)* |
|
426
|
+
| RSpec | `rspec`. | `>= 3.0.0` | `>= 3.0.0` | *[Link](#rspec)*. | *[Link](https://github.com/rspec/rspec)* |
|
364
427
|
| Sequel | `sequel` | `>= 3.41` | `>= 3.41` | *[Link](#sequel)* | *[Link](https://github.com/jeremyevans/sequel)* |
|
365
428
|
| Shoryuken | `shoryuken` | `>= 3.2` | `>= 3.2` | *[Link](#shoryuken)* | *[Link](https://github.com/phstc/shoryuken)* |
|
366
429
|
| Sidekiq | `sidekiq` | `>= 3.5.4` | `>= 3.5.4` | *[Link](#sidekiq)* | *[Link](https://github.com/mperham/sidekiq)* |
|
@@ -386,7 +449,6 @@ Where `options` is an optional `Hash` that accepts the following parameters:
|
|
386
449
|
|
387
450
|
| Key | Description | Default |
|
388
451
|
| --- | ----------- | ------- |
|
389
|
-
| `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
|
390
452
|
| `service_name` | Service name used for `action_cable` instrumentation | `'action_cable'` |
|
391
453
|
|
392
454
|
### Action View
|
@@ -406,7 +468,6 @@ Where `options` is an optional `Hash` that accepts the following parameters:
|
|
406
468
|
|
407
469
|
| Key | Description | Default |
|
408
470
|
| ---| --- | --- |
|
409
|
-
| `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
|
410
471
|
| `service_name` | Service name used for rendering instrumentation. | `action_view` |
|
411
472
|
| `template_base_path` | Used when the template name is parsed. If you don't store your templates in the `views/` folder, you may need to change this value | `'views/'` |
|
412
473
|
|
@@ -428,7 +489,6 @@ ActiveModelSerializers::SerializableResource.new(test_obj).serializable_hash
|
|
428
489
|
|
429
490
|
| Key | Description | Default |
|
430
491
|
| --- | ----------- | ------- |
|
431
|
-
| `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
|
432
492
|
| `service_name` | Service name used for `active_model_serializers` instrumentation. | `'active_model_serializers'` |
|
433
493
|
|
434
494
|
### Action Pack
|
@@ -448,7 +508,6 @@ Where `options` is an optional `Hash` that accepts the following parameters:
|
|
448
508
|
|
449
509
|
| Key | Description | Default |
|
450
510
|
| ---| --- | --- |
|
451
|
-
| `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
|
452
511
|
| `service_name` | Service name used for rendering instrumentation. | `action_pack` |
|
453
512
|
|
454
513
|
### Active Record
|
@@ -476,7 +535,6 @@ Where `options` is an optional `Hash` that accepts the following parameters:
|
|
476
535
|
|
477
536
|
| Key | Description | Default |
|
478
537
|
| ---| --- | --- |
|
479
|
-
| `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to the global setting, `false` for off. | `false` |
|
480
538
|
| `orm_service_name` | Service name used for the mapping portion of query results to ActiveRecord objects. Inherits service name from parent by default. | _parent.service_name_ (e.g. `'mysql2'`) |
|
481
539
|
| `service_name` | Service name used for database portion of `active_record` instrumentation. | Name of database adapter (e.g. `'mysql2'`) |
|
482
540
|
|
@@ -495,16 +553,19 @@ Datadog.configure do |c|
|
|
495
553
|
# Only available if you are using Rails with ActiveRecord.
|
496
554
|
c.use :active_record, describes: :secondary_database, service_name: 'secondary-db'
|
497
555
|
|
556
|
+
# Block configuration pattern.
|
498
557
|
c.use :active_record, describes: :secondary_database do |second_db|
|
499
558
|
second_db.service_name = 'secondary-db'
|
500
559
|
end
|
501
560
|
|
502
561
|
# Connection string with the following connection settings:
|
503
|
-
#
|
562
|
+
# adapter, username, host, port, database
|
563
|
+
# Other fields are ignored.
|
504
564
|
c.use :active_record, describes: 'mysql2://root@127.0.0.1:3306/mysql', service_name: 'secondary-db'
|
505
565
|
|
506
|
-
# Hash with following connection settings
|
507
|
-
#
|
566
|
+
# Hash with following connection settings:
|
567
|
+
# adapter, username, host, port, database
|
568
|
+
# Other fields are ignored.
|
508
569
|
c.use :active_record, describes: {
|
509
570
|
adapter: 'mysql2',
|
510
571
|
host: '127.0.0.1',
|
@@ -513,9 +574,34 @@ Datadog.configure do |c|
|
|
513
574
|
username: 'root'
|
514
575
|
},
|
515
576
|
service_name: 'secondary-db'
|
577
|
+
|
578
|
+
# If using the `makara` gem, it's possible to match on connection `role`:
|
579
|
+
c.use :active_record, describes: { makara_role: 'primary' }, service_name: 'primary-db'
|
580
|
+
c.use :active_record, describes: { makara_role: 'replica' }, service_name: 'secondary-db'
|
581
|
+
end
|
582
|
+
```
|
583
|
+
|
584
|
+
You can also create configurations based on partial matching of database connection fields:
|
585
|
+
|
586
|
+
```ruby
|
587
|
+
Datadog.configure do |c|
|
588
|
+
# Matches any connection on host `127.0.0.1`.
|
589
|
+
c.use :active_record, describes: { host: '127.0.0.1' }, service_name: 'local-db'
|
590
|
+
|
591
|
+
# Matches any `mysql2` connection.
|
592
|
+
c.use :active_record, describes: { adapter: 'mysql2'}, service_name: 'mysql-db'
|
593
|
+
|
594
|
+
# Matches any `mysql2` connection to the `reports` database.
|
595
|
+
#
|
596
|
+
# In case of multiple matching `describe` configurations, the latest one applies.
|
597
|
+
# In this case a connection with both adapter `mysql` and database `reports`
|
598
|
+
# will be configured `service_name: 'reports-db'`, not `service_name: 'mysql-db'`.
|
599
|
+
c.use :active_record, describes: { adapter: 'mysql2', database: 'reports'}, service_name: 'reports-db'
|
516
600
|
end
|
517
601
|
```
|
518
602
|
|
603
|
+
When multiple `describes` configurations match a connection, the latest configured rule that matches will be applied.
|
604
|
+
|
519
605
|
If ActiveRecord traces an event that uses a connection that matches a key defined by `describes`, it will use the trace settings assigned to that connection. If the connection does not match any of the described connections, it will use default settings defined by `c.use :active_record` instead.
|
520
606
|
|
521
607
|
### Active Support
|
@@ -538,7 +624,6 @@ Where `options` is an optional `Hash` that accepts the following parameters:
|
|
538
624
|
|
539
625
|
| Key | Description | Default |
|
540
626
|
| ---| --- | --- |
|
541
|
-
| `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
|
542
627
|
| `cache_service` | Service name used for caching with `active_support` instrumentation. | `active_support-cache` |
|
543
628
|
|
544
629
|
### AWS
|
@@ -561,7 +646,6 @@ Where `options` is an optional `Hash` that accepts the following parameters:
|
|
561
646
|
|
562
647
|
| Key | Description | Default |
|
563
648
|
| --- | ----------- | ------- |
|
564
|
-
| `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
|
565
649
|
| `service_name` | Service name used for `aws` instrumentation | `'aws'` |
|
566
650
|
|
567
651
|
### Concurrent Ruby
|
@@ -590,6 +674,41 @@ Where `options` is an optional `Hash` that accepts the following parameters:
|
|
590
674
|
| --- | ----------- | ------- |
|
591
675
|
| `service_name` | Service name used for `concurrent-ruby` instrumentation | `'concurrent-ruby'` |
|
592
676
|
|
677
|
+
### Cucumber
|
678
|
+
|
679
|
+
Cucumber integration will trace all executions of scenarios and steps when using `cucumber` framework.
|
680
|
+
|
681
|
+
To activate your integration, use the `Datadog.configure` method:
|
682
|
+
|
683
|
+
```ruby
|
684
|
+
require 'cucumber'
|
685
|
+
require 'ddtrace'
|
686
|
+
|
687
|
+
# Configure default Cucumber integration
|
688
|
+
Datadog.configure do |c|
|
689
|
+
c.use :cucumber, options
|
690
|
+
end
|
691
|
+
|
692
|
+
# Example of how to attach tags from scenario to active span
|
693
|
+
Around do |scenario, block|
|
694
|
+
active_span = Datadog.configuration[:cucumber][:tracer].active_span
|
695
|
+
unless active_span.nil?
|
696
|
+
scenario.tags.filter { |tag| tag.include? ':' }.each do |tag|
|
697
|
+
active_span.set_tag(*tag.name.split(':', 2))
|
698
|
+
end
|
699
|
+
end
|
700
|
+
block.call
|
701
|
+
end
|
702
|
+
```
|
703
|
+
|
704
|
+
Where `options` is an optional `Hash` that accepts the following parameters:
|
705
|
+
|
706
|
+
| Key | Description | Default |
|
707
|
+
| --- | ----------- | ------- |
|
708
|
+
| `enabled` | Defines whether Cucumber tests should be traced. Useful for temporarily disabling tracing. `true` or `false` | `true` |
|
709
|
+
| `service_name` | Service name used for `cucumber` instrumentation. | `'cucumber'` |
|
710
|
+
| `operation_name` | Operation name used for `cucumber` instrumentation. Useful if you want rename automatic trace metrics e.g. `trace.#{operation_name}.errors`. | `'cucumber.test'` |
|
711
|
+
|
593
712
|
### Dalli
|
594
713
|
|
595
714
|
Dalli integration will trace all calls to your `memcached` server:
|
@@ -612,12 +731,11 @@ Where `options` is an optional `Hash` that accepts the following parameters:
|
|
612
731
|
|
613
732
|
| Key | Description | Default |
|
614
733
|
| --- | ----------- | ------- |
|
615
|
-
| `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
|
616
734
|
| `service_name` | Service name used for `dalli` instrumentation | `'memcached'` |
|
617
735
|
|
618
736
|
### DelayedJob
|
619
737
|
|
620
|
-
The DelayedJob integration uses lifecycle hooks to trace the job executions.
|
738
|
+
The DelayedJob integration uses lifecycle hooks to trace the job executions and enqueues.
|
621
739
|
|
622
740
|
You can enable it through `Datadog.configure`:
|
623
741
|
|
@@ -633,8 +751,9 @@ Where `options` is an optional `Hash` that accepts the following parameters:
|
|
633
751
|
|
634
752
|
| Key | Description | Default |
|
635
753
|
| --- | ----------- | ------- |
|
636
|
-
| `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
|
637
754
|
| `service_name` | Service name used for `DelayedJob` instrumentation | `'delayed_job'` |
|
755
|
+
| `client_service_name` | Service name used for client-side `DelayedJob` instrumentation | `'delayed_job-client'` |
|
756
|
+
| `error_handler` | Custom error handler invoked when a job raises an error. Provided `span` and `error` as arguments. Sets error on the span by default. Useful for ignoring transient errors. | `proc { |span, error| span.set_error(error) unless span.nil? }` |
|
638
757
|
|
639
758
|
### Elasticsearch
|
640
759
|
|
@@ -657,7 +776,6 @@ Where `options` is an optional `Hash` that accepts the following parameters:
|
|
657
776
|
|
658
777
|
| Key | Description | Default |
|
659
778
|
| --- | ----------- | ------- |
|
660
|
-
| `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
|
661
779
|
| `quantize` | Hash containing options for quantization. May include `:show` with an Array of keys to not quantize (or `:all` to skip quantization), or `:exclude` with Array of keys to exclude entirely. | `{}` |
|
662
780
|
| `service_name` | Service name used for `elasticsearch` instrumentation | `'elasticsearch'` |
|
663
781
|
|
@@ -683,7 +801,6 @@ Where `options` is an optional `Hash` that accepts the following parameters:
|
|
683
801
|
|
684
802
|
| Key | Description | Default |
|
685
803
|
| --- | ----------- | ------- |
|
686
|
-
| `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
|
687
804
|
| `distributed_tracing` | Enables [distributed tracing](#distributed-tracing) | `true` |
|
688
805
|
| `service_name` | Service name for `ethon` instrumentation. | `'ethon'` |
|
689
806
|
| `split_by_domain` | Uses the request domain as the service name when set to `true`. | `false` |
|
@@ -715,7 +832,6 @@ Where `options` is an optional `Hash` that accepts the following parameters:
|
|
715
832
|
|
716
833
|
| Key | Description | Default |
|
717
834
|
| --- | ----------- | ------- |
|
718
|
-
| `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
|
719
835
|
| `distributed_tracing` | Enables [distributed tracing](#distributed-tracing) | `true` |
|
720
836
|
| `error_handler` | A `Proc` that accepts a `response` parameter. If it evaluates to a *truthy* value, the trace span is marked as an error. By default only sets 5XX responses as errors. | `nil` |
|
721
837
|
| `service_name` | Service name for Excon instrumentation. When provided to middleware for a specific connection, it applies only to that connection object. | `'excon'` |
|
@@ -778,7 +894,6 @@ Where `options` is an optional `Hash` that accepts the following parameters:
|
|
778
894
|
|
779
895
|
| Key | Description | Default |
|
780
896
|
| --- | ----------- | ------- |
|
781
|
-
| `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
|
782
897
|
| `distributed_tracing` | Enables [distributed tracing](#distributed-tracing) | `true` |
|
783
898
|
| `error_handler` | A `Proc` that accepts a `response` parameter. If it evaluates to a *truthy* value, the trace span is marked as an error. By default only sets 5XX responses as errors. | `nil` |
|
784
899
|
| `service_name` | Service name for Faraday instrumentation. When provided to middleware for a specific connection, it applies only to that connection object. | `'faraday'` |
|
@@ -812,9 +927,9 @@ Where `options` is an optional `Hash` that accepts the following parameters:
|
|
812
927
|
|
813
928
|
| Key | Description | Default |
|
814
929
|
| --- | ----------- | ------- |
|
815
|
-
| `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `nil` |
|
816
930
|
| `enabled` | Defines whether Grape should be traced. Useful for temporarily disabling tracing. `true` or `false` | `true` |
|
817
931
|
| `service_name` | Service name used for `grape` instrumentation | `'grape'` |
|
932
|
+
| `error_statuses`| Defines a status code or range of status codes which should be marked as errors. `'404,405,500-599'` or `[404,405,'500-599']` | `nil` |
|
818
933
|
|
819
934
|
### GraphQL
|
820
935
|
|
@@ -836,7 +951,6 @@ The `use :graphql` method accepts the following parameters. Additional options c
|
|
836
951
|
|
837
952
|
| Key | Description | Default |
|
838
953
|
| --- | ----------- | ------- |
|
839
|
-
| `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `nil` |
|
840
954
|
| `service_name` | Service name used for `graphql` instrumentation | `'ruby-graphql'` |
|
841
955
|
| `schemas` | Required. Array of `GraphQL::Schema` objects which to trace. Tracing will be added to all the schemas listed, using the options provided to this configuration. If you do not provide any, then tracing will not be activated. | `[]` |
|
842
956
|
|
@@ -915,8 +1029,8 @@ Where `options` is an optional `Hash` that accepts the following parameters:
|
|
915
1029
|
|
916
1030
|
| Key | Description | Default |
|
917
1031
|
| --- | ----------- | ------- |
|
918
|
-
| `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
|
919
1032
|
| `service_name` | Service name used for `grpc` instrumentation | `'grpc'` |
|
1033
|
+
| `error_handler` | Custom error handler invoked when a request is an error. A `Proc` that accepts `span` and `error` parameters. Sets error on the span by default. | `proc { |span, error| span.set_error(error) unless span.nil? }` |
|
920
1034
|
|
921
1035
|
**Configuring clients to use different settings**
|
922
1036
|
|
@@ -957,11 +1071,54 @@ Where `options` is an optional `Hash` that accepts the following parameters:
|
|
957
1071
|
|
958
1072
|
| Key | Description | Default |
|
959
1073
|
| --- | ----------- | ------- |
|
960
|
-
| `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
|
961
1074
|
| `distributed_tracing` | Enables [distributed tracing](#distributed-tracing) | `true` |
|
962
1075
|
| `service_name` | Service name for `httprb` instrumentation. | `'httprb'` |
|
963
1076
|
| `split_by_domain` | Uses the request domain as the service name when set to `true`. | `false` |
|
964
1077
|
|
1078
|
+
### httpclient
|
1079
|
+
|
1080
|
+
The httpclient integration will trace any HTTP call using the httpclient gem.
|
1081
|
+
|
1082
|
+
```ruby
|
1083
|
+
require 'httpclient'
|
1084
|
+
require 'ddtrace'
|
1085
|
+
Datadog.configure do |c|
|
1086
|
+
c.use :httpclient, options
|
1087
|
+
# optionally, specify a different service name for hostnames matching a regex
|
1088
|
+
c.use :httpclient, describes: /user-[^.]+\.example\.com/ do |httpclient|
|
1089
|
+
httpclient.service_name = 'user.example.com'
|
1090
|
+
httpclient.split_by_domain = false # Only necessary if split_by_domain is true by default
|
1091
|
+
end
|
1092
|
+
end
|
1093
|
+
```
|
1094
|
+
|
1095
|
+
Where `options` is an optional `Hash` that accepts the following parameters:
|
1096
|
+
|
1097
|
+
| Key | Description | Default |
|
1098
|
+
| --- | ----------- | ------- |
|
1099
|
+
| `distributed_tracing` | Enables [distributed tracing](#distributed-tracing) | `true` |
|
1100
|
+
| `service_name` | Service name for `httpclient` instrumentation. | `'httpclient'` |
|
1101
|
+
| `split_by_domain` | Uses the request domain as the service name when set to `true`. | `false` |
|
1102
|
+
|
1103
|
+
### httpx
|
1104
|
+
|
1105
|
+
`httpx` maintains its [own integration with `ddtrace`](https://honeyryderchuck.gitlab.io/httpx/wiki/Datadog-Adapter):
|
1106
|
+
|
1107
|
+
```ruby
|
1108
|
+
require "ddtrace"
|
1109
|
+
require "httpx/adapters/datadog"
|
1110
|
+
|
1111
|
+
Datadog.configure do |c|
|
1112
|
+
c.use :httpx
|
1113
|
+
|
1114
|
+
# optionally, specify a different service name for hostnames matching a regex
|
1115
|
+
c.use :httpx, describes: /user-[^.]+\.example\.com/ do |http|
|
1116
|
+
http.service_name = 'user.example.com'
|
1117
|
+
http.split_by_domain = false # Only necessary if split_by_domain is true by default
|
1118
|
+
end
|
1119
|
+
end
|
1120
|
+
```
|
1121
|
+
|
965
1122
|
### Kafka
|
966
1123
|
|
967
1124
|
The Kafka integration provides tracing of the `ruby-kafka` gem:
|
@@ -982,7 +1139,6 @@ Where `options` is an optional `Hash` that accepts the following parameters:
|
|
982
1139
|
|
983
1140
|
| Key | Description | Default |
|
984
1141
|
| --- | ----------- | ------- |
|
985
|
-
| `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
|
986
1142
|
| `service_name` | Service name used for `kafka` instrumentation | `'kafka'` |
|
987
1143
|
| `tracer` | `Datadog::Tracer` used to perform instrumentation. Usually you don't need to set this. | `Datadog.tracer` |
|
988
1144
|
|
@@ -1011,7 +1167,6 @@ Where `options` is an optional `Hash` that accepts the following parameters:
|
|
1011
1167
|
|
1012
1168
|
| Key | Description | Default |
|
1013
1169
|
| --- | ----------- | ------- |
|
1014
|
-
| `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
|
1015
1170
|
| `quantize` | Hash containing options for quantization. May include `:show` with an Array of keys to not quantize (or `:all` to skip quantization), or `:exclude` with Array of keys to exclude entirely. | `{ show: [:collection, :database, :operation] }` |
|
1016
1171
|
| `service_name` | Service name used for `mongo` instrumentation | `'mongodb'` |
|
1017
1172
|
|
@@ -1035,7 +1190,6 @@ Where `options` is an optional `Hash` that accepts the following parameters:
|
|
1035
1190
|
|
1036
1191
|
| Key | Description | Default |
|
1037
1192
|
| --- | ----------- | ------- |
|
1038
|
-
| `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
|
1039
1193
|
| `service_name` | Service name used for `mysql2` instrumentation | `'mysql2'` |
|
1040
1194
|
|
1041
1195
|
### Net/HTTP
|
@@ -1068,7 +1222,6 @@ Where `options` is an optional `Hash` that accepts the following parameters:
|
|
1068
1222
|
|
1069
1223
|
| Key | Description | Default |
|
1070
1224
|
| --- | ----------- | ------- |
|
1071
|
-
| `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
|
1072
1225
|
| `distributed_tracing` | Enables [distributed tracing](#distributed-tracing) | `true` |
|
1073
1226
|
| `service_name` | Service name used for `http` instrumentation | `'net/http'` |
|
1074
1227
|
| `split_by_domain` | Uses the request domain as the service name when set to `true`. | `false` |
|
@@ -1109,9 +1262,30 @@ Where `options` is an optional `Hash` that accepts the following parameters:
|
|
1109
1262
|
|
1110
1263
|
| Key | Description | Default |
|
1111
1264
|
| --- | ----------- | ------- |
|
1112
|
-
| `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
|
1113
1265
|
| `service_name` | Service name used for `presto` instrumentation | `'presto'` |
|
1114
1266
|
|
1267
|
+
### Qless
|
1268
|
+
|
1269
|
+
The Qless integration uses lifecycle hooks to trace job executions.
|
1270
|
+
|
1271
|
+
To add tracing to a Qless job:
|
1272
|
+
|
1273
|
+
```ruby
|
1274
|
+
require 'ddtrace'
|
1275
|
+
|
1276
|
+
Datadog.configure do |c|
|
1277
|
+
c.use :qless, options
|
1278
|
+
end
|
1279
|
+
```
|
1280
|
+
|
1281
|
+
Where `options` is an optional `Hash` that accepts the following parameters:
|
1282
|
+
|
1283
|
+
| Key | Description | Default |
|
1284
|
+
| --- | ----------- | ------- |
|
1285
|
+
| `service_name` | Service name used for `qless` instrumentation | `'qless'` |
|
1286
|
+
| `tag_job_data` | Enable tagging with job arguments. true for on, false for off. | `false` |
|
1287
|
+
| `tag_job_tags` | Enable tagging with job tags. true for on, false for off. | `false` |
|
1288
|
+
|
1115
1289
|
### Que
|
1116
1290
|
|
1117
1291
|
The Que integration is a middleware which will trace job executions.
|
@@ -1130,11 +1304,11 @@ Where `options` is an optional `Hash` that accepts the following parameters:
|
|
1130
1304
|
|
1131
1305
|
| Key | Description | Default |
|
1132
1306
|
| --- | ----------- | ------- |
|
1133
|
-
| `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
|
1134
1307
|
| `enabled` | Defines whether Que should be traced. Useful for temporarily disabling tracing. `true` or `false` | `true` |
|
1135
1308
|
| `service_name` | Service name used for `que` instrumentation | `'que'` |
|
1136
1309
|
| `tag_args` | Enable tagging of a job's args field. `true` for on, `false` for off. | `false` |
|
1137
1310
|
| `tag_data` | Enable tagging of a job's data field. `true` for on, `false` for off. | `false` |
|
1311
|
+
| `error_handler` | Custom error handler invoked when a job raises an error. Provided `span` and `error` as arguments. Sets error on the span by default. Useful for ignoring transient errors. | `proc { |span, error| span.set_error(error) unless span.nil? }` |
|
1138
1312
|
|
1139
1313
|
### Racecar
|
1140
1314
|
|
@@ -1154,7 +1328,6 @@ Where `options` is an optional `Hash` that accepts the following parameters:
|
|
1154
1328
|
|
1155
1329
|
| Key | Description | Default |
|
1156
1330
|
| --- | ----------- | ------- |
|
1157
|
-
| `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
|
1158
1331
|
| `service_name` | Service name used for `racecar` instrumentation | `'racecar'` |
|
1159
1332
|
|
1160
1333
|
### Rack
|
@@ -1184,11 +1357,10 @@ Where `options` is an optional `Hash` that accepts the following parameters:
|
|
1184
1357
|
|
1185
1358
|
| Key | Description | Default |
|
1186
1359
|
| --- | ----------- | ------- |
|
1187
|
-
| `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `nil` |
|
1188
1360
|
| `application` | Your Rack application. Required for `middleware_names`. | `nil` |
|
1189
1361
|
| `distributed_tracing` | Enables [distributed tracing](#distributed-tracing) so that this service trace is connected with a trace of another service if tracing headers are received | `true` |
|
1190
1362
|
| `headers` | Hash of HTTP request or response headers to add as tags to the `rack.request`. Accepts `request` and `response` keys with Array values e.g. `['Last-Modified']`. Adds `http.request.headers.*` and `http.response.headers.*` tags respectively. | `{ response: ['Content-Type', 'X-Request-ID'] }` |
|
1191
|
-
| `middleware_names` | Enable this if you want to use the middleware
|
1363
|
+
| `middleware_names` | Enable this if you want to use the last executed middleware class as the resource name for the `rack` span. If enabled alongside the `rails` instrumention, `rails` takes precedence by setting the `rack` resource name to the active `rails` controller when applicable. Requires `application` option to use. | `false` |
|
1192
1364
|
| `quantize` | Hash containing options for quantization. May include `:query` or `:fragment`. | `{}` |
|
1193
1365
|
| `quantize.query` | Hash containing options for query portion of URL quantization. May include `:show` or `:exclude`. See options below. Option must be nested inside the `quantize` option. | `{}` |
|
1194
1366
|
| `quantize.query.show` | Defines which values should always be shown. Shows no values by default. May be an Array of strings, or `:all` to show all values. Option must be nested inside the `query` option. | `nil` |
|
@@ -1247,7 +1419,6 @@ Where `options` is an optional `Hash` that accepts the following parameters:
|
|
1247
1419
|
|
1248
1420
|
| Key | Description | Default |
|
1249
1421
|
| --- | ----------- | ------- |
|
1250
|
-
| `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to the global setting, `false` for off. | `nil` |
|
1251
1422
|
| `cache_service` | Cache service name used when tracing cache activity | `'<app_name>-cache'` |
|
1252
1423
|
| `controller_service` | Service name used when tracing a Rails action controller | `'<app_name>'` |
|
1253
1424
|
| `database_service` | Database service name used when tracing database activity | `'<app_name>-<adapter_name>'` |
|
@@ -1267,8 +1438,9 @@ Where `options` is an optional `Hash` that accepts the following parameters:
|
|
1267
1438
|
| 2.1 | | 3.0 - 4.2 |
|
1268
1439
|
| 2.2 - 2.3 | | 3.0 - 5.2 |
|
1269
1440
|
| 2.4 | | 4.2.8 - 5.2 |
|
1270
|
-
| 2.5 | | 4.2.8 - 6.
|
1271
|
-
| 2.6 - 2.7 | 9.2 | 5.0 - 6.
|
1441
|
+
| 2.5 | | 4.2.8 - 6.1 |
|
1442
|
+
| 2.6 - 2.7 | 9.2 | 5.0 - 6.1 |
|
1443
|
+
| 3.0 | | 6.1 |
|
1272
1444
|
|
1273
1445
|
### Rake
|
1274
1446
|
|
@@ -1296,7 +1468,6 @@ Where `options` is an optional `Hash` that accepts the following parameters:
|
|
1296
1468
|
|
1297
1469
|
| Key | Description | Default |
|
1298
1470
|
| --- | ----------- | ------- |
|
1299
|
-
| `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to the global setting, `false` for off. | `false` |
|
1300
1471
|
| `enabled` | Defines whether Rake tasks should be traced. Useful for temporarily disabling tracing. `true` or `false` | `true` |
|
1301
1472
|
| `quantize` | Hash containing options for quantization of task arguments. See below for more details and examples. | `{}` |
|
1302
1473
|
| `service_name` | Service name used for `rake` instrumentation | `'rake'` |
|
@@ -1356,8 +1527,8 @@ Where `options` is an optional `Hash` that accepts the following parameters:
|
|
1356
1527
|
|
1357
1528
|
| Key | Description | Default |
|
1358
1529
|
| --- | ----------- | ------- |
|
1359
|
-
| `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
|
1360
1530
|
| `service_name` | Service name used for `redis` instrumentation | `'redis'` |
|
1531
|
+
| `command_args` | Show the command arguments (e.g. `key` in `GET key`) as resource name and tag | true |
|
1361
1532
|
|
1362
1533
|
You can also set *per-instance* configuration as it follows:
|
1363
1534
|
|
@@ -1395,12 +1566,17 @@ Datadog.configure do |c|
|
|
1395
1566
|
# The default configuration for any redis client
|
1396
1567
|
c.use :redis, service_name: 'redis-default'
|
1397
1568
|
|
1398
|
-
# The configuration matching a given unix socket
|
1569
|
+
# The configuration matching a given unix socket.
|
1399
1570
|
c.use :redis, describes: { url: 'unix://path/to/file' }, service_name: 'redis-unix'
|
1400
1571
|
|
1401
|
-
#
|
1402
|
-
|
1403
|
-
#
|
1572
|
+
# For network connections, only these fields are considered during matching:
|
1573
|
+
# scheme, host, port, db
|
1574
|
+
# Other fields are ignored.
|
1575
|
+
|
1576
|
+
# Network connection string
|
1577
|
+
c.use :redis, describes: 'redis://127.0.0.1:6379/0', service_name: 'redis-connection-string'
|
1578
|
+
c.use :redis, describes: { url: 'redis://127.0.0.1:6379/1' }, service_name: 'redis-connection-url'
|
1579
|
+
# Network client hash
|
1404
1580
|
c.use :redis, describes: { host: 'my-host.com', port: 6379, db: 1, scheme: 'redis' }, service_name: 'redis-connection-hash'
|
1405
1581
|
# Only a subset of the connection hash
|
1406
1582
|
c.use :redis, describes: { host: ENV['APP_CACHE_HOST'], port: ENV['APP_CACHE_PORT'] }, service_name: 'redis-cache'
|
@@ -1408,6 +1584,8 @@ Datadog.configure do |c|
|
|
1408
1584
|
end
|
1409
1585
|
```
|
1410
1586
|
|
1587
|
+
When multiple `describes` configurations match a connection, the latest configured rule that matches will be applied.
|
1588
|
+
|
1411
1589
|
### Resque
|
1412
1590
|
|
1413
1591
|
The Resque integration uses Resque hooks that wraps the `perform` method.
|
@@ -1415,16 +1593,11 @@ The Resque integration uses Resque hooks that wraps the `perform` method.
|
|
1415
1593
|
To add tracing to a Resque job:
|
1416
1594
|
|
1417
1595
|
```ruby
|
1596
|
+
require 'resque'
|
1418
1597
|
require 'ddtrace'
|
1419
1598
|
|
1420
|
-
class MyJob
|
1421
|
-
def self.perform(*args)
|
1422
|
-
# do_something
|
1423
|
-
end
|
1424
|
-
end
|
1425
|
-
|
1426
1599
|
Datadog.configure do |c|
|
1427
|
-
c.use :resque, options
|
1600
|
+
c.use :resque, **options
|
1428
1601
|
end
|
1429
1602
|
```
|
1430
1603
|
|
@@ -1432,9 +1605,9 @@ Where `options` is an optional `Hash` that accepts the following parameters:
|
|
1432
1605
|
|
1433
1606
|
| Key | Description | Default |
|
1434
1607
|
| --- | ----------- | ------- |
|
1435
|
-
| `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to the global setting, `false` for off. | `false` |
|
1436
1608
|
| `service_name` | Service name used for `resque` instrumentation | `'resque'` |
|
1437
|
-
| `
|
1609
|
+
| `error_handler` | Custom error handler invoked when a job raises an error. Provided `span` and `error` as arguments. Sets error on the span by default. Useful for ignoring transient errors. | `proc { |span, error| span.set_error(error) unless span.nil? }` |
|
1610
|
+
| `workers` | **[DEPRECATED]** Limits instrumented worker classes to only the ones specified in an array (e.g. `[MyJob]`). If not provided, instruments all workers. | `nil` |
|
1438
1611
|
|
1439
1612
|
### Rest Client
|
1440
1613
|
|
@@ -1453,10 +1626,33 @@ Where `options` is an optional `Hash` that accepts the following parameters:
|
|
1453
1626
|
|
1454
1627
|
| Key | Description | Default |
|
1455
1628
|
| --- | ----------- | ------- |
|
1456
|
-
| `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
|
1457
1629
|
| `distributed_tracing` | Enables [distributed tracing](#distributed-tracing) | `true` |
|
1458
1630
|
| `service_name` | Service name for `rest_client` instrumentation. | `'rest_client'` |
|
1459
1631
|
|
1632
|
+
### RSpec
|
1633
|
+
|
1634
|
+
RSpec integration will trace all executions of example groups and examples when using `rspec` test framework.
|
1635
|
+
|
1636
|
+
To activate your integration, use the `Datadog.configure` method:
|
1637
|
+
|
1638
|
+
```ruby
|
1639
|
+
require 'rspec'
|
1640
|
+
require 'ddtrace'
|
1641
|
+
|
1642
|
+
# Configure default RSpec integration
|
1643
|
+
Datadog.configure do |c|
|
1644
|
+
c.use :rspec, options
|
1645
|
+
end
|
1646
|
+
```
|
1647
|
+
|
1648
|
+
Where `options` is an optional `Hash` that accepts the following parameters:
|
1649
|
+
|
1650
|
+
| Key | Description | Default |
|
1651
|
+
| --- | ----------- | ------- |
|
1652
|
+
| `enabled` | Defines whether RSpec tests should be traced. Useful for temporarily disabling tracing. `true` or `false` | `true` |
|
1653
|
+
| `service_name` | Service name used for `rspec` instrumentation. | `'rspec'` |
|
1654
|
+
| `operation_name` | Operation name used for `rspec` instrumentation. Useful if you want rename automatic trace metrics e.g. `trace.#{operation_name}.errors`. | `'rspec.example'` |
|
1655
|
+
|
1460
1656
|
### Sequel
|
1461
1657
|
|
1462
1658
|
The Sequel integration traces queries made to your database.
|
@@ -1487,11 +1683,8 @@ Where `options` is an optional `Hash` that accepts the following parameters:
|
|
1487
1683
|
|
1488
1684
|
| Key | Description | Default |
|
1489
1685
|
| --- | ----------- | ------- |
|
1490
|
-
| `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
|
1491
1686
|
| `service_name` | Service name for `sequel` instrumentation | Name of database adapter (e.g. `'mysql2'`) |
|
1492
1687
|
|
1493
|
-
Only Ruby 2.0+ is supported.
|
1494
|
-
|
1495
1688
|
**Configuring databases to use different settings**
|
1496
1689
|
|
1497
1690
|
If you use multiple databases with Sequel, you can give each of them different settings by configuring their respective `Sequel::Database` objects:
|
@@ -1523,8 +1716,9 @@ Where `options` is an optional `Hash` that accepts the following parameters:
|
|
1523
1716
|
|
1524
1717
|
| Key | Description | Default |
|
1525
1718
|
| --- | ----------- | ------- |
|
1526
|
-
| `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
|
1527
1719
|
| `service_name` | Service name used for `shoryuken` instrumentation | `'shoryuken'` |
|
1720
|
+
| `tag_body` | Tag spans with the SQS message body `true` or `false` | `false` |
|
1721
|
+
| `error_handler` | Custom error handler invoked when a job raises an error. Provided `span` and `error` as arguments. Sets error on the span by default. Useful for ignoring transient errors. | `proc { |span, error| span.set_error(error) unless span.nil? }` |
|
1528
1722
|
|
1529
1723
|
### Sidekiq
|
1530
1724
|
|
@@ -1544,10 +1738,10 @@ Where `options` is an optional `Hash` that accepts the following parameters:
|
|
1544
1738
|
|
1545
1739
|
| Key | Description | Default |
|
1546
1740
|
| --- | ----------- | ------- |
|
1547
|
-
| `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
|
1548
1741
|
| `client_service_name` | Service name used for client-side `sidekiq` instrumentation | `'sidekiq-client'` |
|
1549
1742
|
| `service_name` | Service name used for server-side `sidekiq` instrumentation | `'sidekiq'` |
|
1550
1743
|
| `tag_args` | Enable tagging of job arguments. `true` for on, `false` for off. | `false` |
|
1744
|
+
| `error_handler` | Custom error handler invoked when a job raises an error. Provided `span` and `error` as arguments. Sets error on the span by default. Useful for ignoring transient errors. | `proc { |span, error| span.set_error(error) unless span.nil? }` |
|
1551
1745
|
|
1552
1746
|
### Sinatra
|
1553
1747
|
|
@@ -1607,7 +1801,6 @@ Ensure you register `Datadog::Contrib::Sinatra::Tracer` as a middleware before y
|
|
1607
1801
|
|
1608
1802
|
| Key | Description | Default |
|
1609
1803
|
| --- | ----------- | ------- |
|
1610
|
-
| `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `nil` |
|
1611
1804
|
| `distributed_tracing` | Enables [distributed tracing](#distributed-tracing) so that this service trace is connected with a trace of another service if tracing headers are received | `true` |
|
1612
1805
|
| `headers` | Hash of HTTP request or response headers to add as tags to the `sinatra.request`. Accepts `request` and `response` keys with Array values e.g. `['Last-Modified']`. Adds `http.request.headers.*` and `http.response.headers.*` tags respectively. | `{ response: ['Content-Type', 'X-Request-ID'] }` |
|
1613
1806
|
| `resource_script_names` | Prepend resource names with script name | `false` |
|
@@ -1631,10 +1824,10 @@ Where `options` is an optional `Hash` that accepts the following parameters:
|
|
1631
1824
|
|
1632
1825
|
| Key | Description | Default |
|
1633
1826
|
| --- | ----------- | ------- |
|
1634
|
-
| `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
|
1635
1827
|
| `enabled` | Defines whether Sneakers should be traced. Useful for temporarily disabling tracing. `true` or `false` | `true` |
|
1636
1828
|
| `service_name` | Service name used for `sneakers` instrumentation | `'sneakers'` |
|
1637
1829
|
| `tag_body` | Enable tagging of job message. `true` for on, `false` for off. | `false` |
|
1830
|
+
| `error_handler` | Custom error handler invoked when a job raises an error. Provided `span` and `error` as arguments. Sets error on the span by default. Useful for ignoring transient errors. | `proc { |span, error| span.set_error(error) unless span.nil? }` |
|
1638
1831
|
|
1639
1832
|
### Sucker Punch
|
1640
1833
|
|
@@ -1655,7 +1848,6 @@ Where `options` is an optional `Hash` that accepts the following parameters:
|
|
1655
1848
|
|
1656
1849
|
| Key | Description | Default |
|
1657
1850
|
| --- | ----------- | ------- |
|
1658
|
-
| `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
|
1659
1851
|
| `service_name` | Service name used for `sucker_punch` instrumentation | `'sucker_punch'` |
|
1660
1852
|
|
1661
1853
|
## Advanced configuration
|
@@ -1671,13 +1863,20 @@ Datadog.configure do |c|
|
|
1671
1863
|
c.tracer.enabled = true
|
1672
1864
|
c.tracer.hostname = 'my-agent'
|
1673
1865
|
c.tracer.port = 8126
|
1674
|
-
|
1866
|
+
|
1867
|
+
# Ensure all traces are ingested by Datadog
|
1868
|
+
c.sampling.default_rate = 1.0 # Recommended
|
1869
|
+
c.sampling.rate_limit = 200
|
1870
|
+
# or provide a custom implementation (overrides c.sampling settings)
|
1675
1871
|
c.tracer.sampler = Datadog::AllSampler.new
|
1676
1872
|
|
1677
|
-
#
|
1873
|
+
# Breaks down very large traces into smaller batches
|
1874
|
+
c.tracer.partial_flush.enabled = false
|
1875
|
+
|
1876
|
+
# You can specify your own tracer
|
1678
1877
|
c.tracer.instance = Datadog::Tracer.new
|
1679
1878
|
|
1680
|
-
# To enable debug mode
|
1879
|
+
# To enable debug mode
|
1681
1880
|
c.diagnostics.debug = true
|
1682
1881
|
end
|
1683
1882
|
```
|
@@ -1689,9 +1888,12 @@ Available options are:
|
|
1689
1888
|
- `instance`: set to a custom `Datadog::Tracer` instance. If provided, other trace settings are ignored (you must configure it manually.)
|
1690
1889
|
- `partial_flush.enabled`: set to `true` to enable partial trace flushing (for long running traces.) Disabled by default. *Experimental.*
|
1691
1890
|
- `port`: set the port the trace agent is listening on.
|
1891
|
+
- `sampling.default_rate`: default tracer sampling rate, between `0.0` (0%) and `1.0` (100%, recommended). `1.0` or Tracing without Limits™, allows you to send all of your traffic and retention can be [configured within the Datadog app](https://docs.datadoghq.com/tracing/trace_retention_and_ingestion/). When this configuration is not set, the Datadog agent will keep an intelligent assortment of diverse traces.
|
1892
|
+
- `sampling.rate_limit`: maximum number of traces per second to sample. Defaults to 100 per second.
|
1692
1893
|
- `sampler`: set to a custom `Datadog::Sampler` instance. If provided, the tracer will use this sampler to determine sampling behavior.
|
1693
1894
|
- `diagnostics.startup_logs.enabled`: Startup configuration and diagnostic log. Defaults to `true`. Can be configured through the `DD_TRACE_STARTUP_LOGS` environment variable.
|
1694
1895
|
- `diagnostics.debug`: set to true to enable debug logging. Can be configured through the `DD_TRACE_DEBUG` environment variable. Defaults to `false`.
|
1896
|
+
- `time_now_provider`: when testing, it might be helpful to use a different time provider. For Timecop, for example, `->{ Time.now_without_mock_time }` allows the tracer to use the real wall time. Span duration calculation will still use the system monotonic clock when available, thus not being affected by this setting. Defaults to `->{ Time.now }`.
|
1695
1897
|
|
1696
1898
|
#### Custom logging
|
1697
1899
|
|
@@ -1745,13 +1947,22 @@ Other Environment Variables:
|
|
1745
1947
|
|
1746
1948
|
- `DD_TRACE_AGENT_URL`: Sets the URL endpoint where traces are sent. Has priority over `DD_AGENT_HOST` and `DD_TRACE_AGENT_PORT` if set. e.g. `DD_TRACE_AGENT_URL=http://localhost:8126`.
|
1747
1949
|
- `DD_TRACE_<INTEGRATION>_ENABLED`: Enables or disables an **activated** integration. Defaults to `true`.. e.g. `DD_TRACE_RAILS_ENABLED=false`. This option has no effects on integrations that have not been explicitly activated (e.g. `Datadog.configure{ |c| c.use :integration }`).on code. This environment variable can only be used to disable an integration.
|
1748
|
-
- `
|
1749
|
-
- `DD_TRACE_<INTEGRATION>_ANALYTICS_SAMPLE_RATE`: Sets the App Analytics sampling rate for a specific integration. A floating number between 0.0 and 1.0 (default). e.g. `DD_TRACE_ACTION_CABLE_ANALYTICS_SAMPLE_RATE=0.5`.
|
1950
|
+
- `DD_TRACE_SAMPLE_RATE`: Sets the trace sampling rate between `0.0` (0%) and `1.0` (100%, recommended). `1.0` or Tracing without Limits™, allows you to send all of your traffic and retention can be [configured within the Datadog app](https://docs.datadoghq.com/tracing/trace_retention_and_ingestion/). When this configuration is not set, the Datadog agent will keep an intelligent assortment of diverse traces.
|
1750
1951
|
- `DD_LOGS_INJECTION`: Automatically enables injection [Trace Correlation](#trace-correlation) information, such as `dd.trace_id`, into Rails logs. Supports the default logger (`ActiveSupport::TaggedLogging`) and `Lograge`. Details on the format of Trace Correlation information can be found in the [Trace Correlation](#trace-correlation) section. Valid values are: `true` or `false`(default). e.g. `DD_LOGS_INJECTION=true`.
|
1751
1952
|
|
1752
1953
|
### Sampling
|
1753
1954
|
|
1754
|
-
|
1955
|
+
Datadog's Tracing without Limits™ allows you to send all of your traffic and [configure retention within the Datadog app](https://docs.datadoghq.com/tracing/trace_retention_and_ingestion/).
|
1956
|
+
|
1957
|
+
We recommend setting the environment variable `DD_TRACE_SAMPLE_RATE=1.0` in all new applications using `ddtrace`.
|
1958
|
+
|
1959
|
+
App Analytics, previously configured with the `analytics_enabled` setting, is deprecated in favor of Tracing without Limits™. Documentation for this [deprecated configuration is still available](https://docs.datadoghq.com/tracing/legacy_app_analytics/).
|
1960
|
+
|
1961
|
+
#### Application-side sampling
|
1962
|
+
|
1963
|
+
While the trace agent can sample traces to reduce bandwidth usage, application-side sampling reduces the performance overhead.
|
1964
|
+
|
1965
|
+
This will **reduce visibility and is not recommended**. See [DD_TRACE_SAMPLE_RATE](#environment-variables) for the recommended sampling approach.
|
1755
1966
|
|
1756
1967
|
`Datadog::RateSampler` samples a ratio of the traces. For example:
|
1757
1968
|
|
@@ -1909,12 +2120,14 @@ For more details on how to activate distributed tracing for integrations, see th
|
|
1909
2120
|
|
1910
2121
|
- [Excon](#excon)
|
1911
2122
|
- [Faraday](#faraday)
|
1912
|
-
- [Rest Client](#
|
2123
|
+
- [Rest Client](#rest-client)
|
1913
2124
|
- [Net/HTTP](#nethttp)
|
1914
2125
|
- [Rack](#rack)
|
1915
2126
|
- [Rails](#rails)
|
1916
2127
|
- [Sinatra](#sinatra)
|
1917
2128
|
- [http.rb](#http-rb)
|
2129
|
+
- [httpclient](#httpclient)
|
2130
|
+
- [httpx](#httpx)
|
1918
2131
|
|
1919
2132
|
**Using the HTTP propagator**
|
1920
2133
|
|
@@ -1943,9 +2156,7 @@ end
|
|
1943
2156
|
|
1944
2157
|
Traces that originate from HTTP requests can be configured to include the time spent in a frontend web server or load balancer queue before the request reaches the Ruby application.
|
1945
2158
|
|
1946
|
-
This
|
1947
|
-
|
1948
|
-
To activate this feature, you must add an `X-Request-Start` or `X-Queue-Start` header from your web server (i.e., Nginx). The following is an Nginx configuration example:
|
2159
|
+
This feature is disabled by default. To activate it, you must add an `X-Request-Start` or `X-Queue-Start` header from your web server (i.e., Nginx). The following is an Nginx configuration example:
|
1949
2160
|
|
1950
2161
|
```
|
1951
2162
|
# /etc/nginx/conf.d/ruby_service.conf
|
@@ -1959,9 +2170,7 @@ server {
|
|
1959
2170
|
}
|
1960
2171
|
```
|
1961
2172
|
|
1962
|
-
Then you must enable the request queuing feature in the integration handling the request.
|
1963
|
-
|
1964
|
-
For Rack-based applications, see the [documentation](#rack) for details for enabling this feature.
|
2173
|
+
Then you must enable the request queuing feature, by setting `request_queuing: true`, in the integration handling the request. For Rack-based applications, see the [documentation](#rack) for details.
|
1965
2174
|
|
1966
2175
|
### Processing Pipeline
|
1967
2176
|
|
@@ -2034,7 +2243,7 @@ In many cases, such as logging, it may be useful to correlate trace IDs to other
|
|
2034
2243
|
|
2035
2244
|
##### Automatic
|
2036
2245
|
|
2037
|
-
For Rails applications using the default logger (`ActiveSupport::TaggedLogging`) or `lograge`, you can automatically enable trace correlation injection by setting the `rails` instrumentation configuration option `log_injection` to `true` or by setting environment variable `DD_LOGS_INJECTION=true`:
|
2246
|
+
For Rails applications using the default logger (`ActiveSupport::TaggedLogging`), `semantic_logger`, or `lograge`, you can automatically enable trace correlation injection by setting the `rails` instrumentation configuration option `log_injection` to `true` or by setting environment variable `DD_LOGS_INJECTION=true`:
|
2038
2247
|
|
2039
2248
|
```ruby
|
2040
2249
|
# config/initializers/datadog.rb
|
@@ -2047,7 +2256,7 @@ end
|
|
2047
2256
|
|
2048
2257
|
##### Manual (Lograge)
|
2049
2258
|
|
2050
|
-
After [setting up Lograge in a Rails application](https://docs.datadoghq.com/logs/log_collection/ruby/), manually modify the `custom_options` block in your environment configuration file (e.g. `config/environments/production.rb`) to add the trace IDs.
|
2259
|
+
After [setting up Lograge in a Rails application](https://docs.datadoghq.com/logs/log_collection/ruby/), manually modify the `custom_options` block in your environment configuration file (e.g. `config/environments/production.rb`) to add the trace IDs.
|
2051
2260
|
|
2052
2261
|
```ruby
|
2053
2262
|
config.lograge.custom_options = lambda do |event|
|
@@ -2204,7 +2413,7 @@ The tracer and its integrations can produce some additional metrics that can pro
|
|
2204
2413
|
To configure your application for metrics collection:
|
2205
2414
|
|
2206
2415
|
1. [Configure your Datadog agent for StatsD](https://docs.datadoghq.com/developers/dogstatsd/#setup)
|
2207
|
-
2. Add `gem 'dogstatsd-ruby'` to your Gemfile
|
2416
|
+
2. Add `gem 'dogstatsd-ruby', '~> 5.2'` to your Gemfile
|
2208
2417
|
|
2209
2418
|
#### For application runtime
|
2210
2419
|
|
@@ -2274,3 +2483,53 @@ However, additional instrumentation provided by Datadog can be activated alongsi
|
|
2274
2483
|
| `OpenTracing::FORMAT_TEXT_MAP` | Yes | |
|
2275
2484
|
| `OpenTracing::FORMAT_RACK` | Yes | Because of the loss of resolution in the Rack format, please note that baggage items with names containing either upper case characters or `-` will be converted to lower case and `_` in a round-trip respectively. We recommend avoiding these characters or accommodating accordingly on the receiving end. |
|
2276
2485
|
| `OpenTracing::FORMAT_BINARY` | No | |
|
2486
|
+
|
2487
|
+
### Profiling
|
2488
|
+
|
2489
|
+
*Currently available as BETA feature.*
|
2490
|
+
|
2491
|
+
`ddtrace` can produce profiles that measure method-level application resource usage within production environments. These profiles can give insight into resources spent in Ruby code outside of existing trace instrumentation.
|
2492
|
+
|
2493
|
+
**Setup**
|
2494
|
+
|
2495
|
+
To get started with profiling, follow the [Profiler Getting Started Guide](https://docs.datadoghq.com/tracing/profiler/getting_started/?code-lang=ruby).
|
2496
|
+
|
2497
|
+
#### Troubleshooting
|
2498
|
+
|
2499
|
+
If you run into issues with profiling, please check the [Profiler Troubleshooting Guide](https://docs.datadoghq.com/tracing/profiler/profiler_troubleshooting/?code-lang=ruby).
|
2500
|
+
|
2501
|
+
#### Profiling Resque jobs
|
2502
|
+
|
2503
|
+
When profiling [Resque](https://github.com/resque/resque) jobs, you should set the `RUN_AT_EXIT_HOOKS=1` option described in the [Resque](https://github.com/resque/resque/blob/v2.0.0/docs/HOOKS.md#worker-hooks) documentation.
|
2504
|
+
|
2505
|
+
Without this flag, profiles for short-lived Resque jobs will not be available as Resque kills worker processes before they have a chance to submit this information.
|
2506
|
+
|
2507
|
+
## Known issues and suggested configurations
|
2508
|
+
|
2509
|
+
### Payload too large
|
2510
|
+
|
2511
|
+
By default, Datadog limits the size of trace payloads to prevent memory overhead within instrumented applications. As a result, traces containing thousands of operations may not be sent to Datadog.
|
2512
|
+
|
2513
|
+
If traces are missing, enable [debug mode](#tracer-settings) to check if messages containing `"Dropping trace. Payload too large"` are logged.
|
2514
|
+
|
2515
|
+
Since debug mode is verbose, Datadog does not recommend leaving this enabled or enabling this in production. Disable it after confirming. You can inspect the [Datadog Agent logs](https://docs.datadoghq.com/agent/guide/agent-log-files/) for similar messages.
|
2516
|
+
|
2517
|
+
If you have confirmed that traces are dropped due to large payloads, then enable the [partial_flush](#tracer-settings) setting to break down large traces into smaller chunks.
|
2518
|
+
|
2519
|
+
### Stack level too deep
|
2520
|
+
|
2521
|
+
Datadog tracing collects trace data by adding instrumentation into other common libraries (e.g. Rails, Rack, etc.) Some libraries provide APIs to add this instrumentation, but some do not. In order to add instrumentation into libraries lacking an instrumentation API, Datadog uses a technique called "monkey-patching" to modify the code of that library.
|
2522
|
+
|
2523
|
+
In Ruby version 1.9.3 and earlier, "monkey-patching" often involved the use of [`alias_method`](https://ruby-doc.org/core-3.0.0/Module.html#method-i-alias_method), also known as *method rewriting*, to destructively replace existing Ruby methods. However, this practice would often create conflicts & errors if two libraries attempted to "rewrite" the same method. (e.g. two different APM packages trying to instrument the same method.)
|
2524
|
+
|
2525
|
+
In Ruby 2.0, the [`Module#prepend`](https://ruby-doc.org/core-3.0.0/Module.html#method-i-prepend) feature was introduced. This feature avoids destructive method rewriting and allows multiple "monkey patches" on the same method. Consequently, it has become the safest, preferred means to "monkey patch" code.
|
2526
|
+
|
2527
|
+
Datadog instrumentation almost exclusively uses the `Module#prepend` feature to add instrumentation non-destructively. However, some libraries (typically those supporting Ruby < 2.0) still use `alias_method` which can create conflicts with Datadog instrumentation, often resulting in `SystemStackError` or `stack level too deep` errors.
|
2528
|
+
|
2529
|
+
As the implementation of `alias_method` exists within those libraries, Datadog generally cannot fix them. However, some libraries have known workarounds:
|
2530
|
+
|
2531
|
+
* `rack-mini-profiler`: [Net::HTTP stack level too deep errors](https://github.com/MiniProfiler/rack-mini-profiler#nethttp-stack-level-too-deep-errors).
|
2532
|
+
|
2533
|
+
For libraries without a known workaround, consider removing the library using `alias` or `Module#alias_method` or separating libraries into different environments for testing.
|
2534
|
+
|
2535
|
+
For any further questions or to report an occurence of this issue, please [reach out to Datadog support](https://docs.datadoghq.com/help)
|