ddtrace 1.0.0.beta1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (627) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +4 -16
  3. data/CHANGELOG.md +156 -2
  4. data/LICENSE-3rdparty.csv +3 -2
  5. data/README.md +2 -2
  6. data/ddtrace.gemspec +12 -3
  7. data/docs/GettingStarted.md +231 -146
  8. data/docs/ProfilingDevelopment.md +8 -8
  9. data/docs/UpgradeGuide.md +384 -205
  10. data/ext/ddtrace_profiling_loader/ddtrace_profiling_loader.c +118 -0
  11. data/ext/ddtrace_profiling_loader/extconf.rb +53 -0
  12. data/ext/ddtrace_profiling_native_extension/NativeExtensionDesign.md +31 -5
  13. data/ext/ddtrace_profiling_native_extension/clock_id_from_pthread.c +0 -8
  14. data/ext/ddtrace_profiling_native_extension/collectors_stack.c +278 -0
  15. data/ext/ddtrace_profiling_native_extension/extconf.rb +79 -100
  16. data/ext/ddtrace_profiling_native_extension/libddprof_helpers.h +13 -0
  17. data/ext/ddtrace_profiling_native_extension/native_extension_helpers.rb +186 -0
  18. data/ext/ddtrace_profiling_native_extension/private_vm_api_access.c +579 -7
  19. data/ext/ddtrace_profiling_native_extension/private_vm_api_access.h +30 -0
  20. data/ext/ddtrace_profiling_native_extension/profiling.c +10 -1
  21. data/ext/ddtrace_profiling_native_extension/stack_recorder.c +139 -0
  22. data/ext/ddtrace_profiling_native_extension/stack_recorder.h +28 -0
  23. data/lib/datadog/appsec/assets/waf_rules/recommended.json +248 -318
  24. data/lib/datadog/appsec/assets/waf_rules/risky.json +78 -18
  25. data/lib/datadog/appsec/assets/waf_rules/strict.json +4 -67
  26. data/lib/datadog/appsec/assets.rb +2 -0
  27. data/lib/datadog/appsec/autoload.rb +2 -2
  28. data/lib/datadog/appsec/configuration/settings.rb +22 -1
  29. data/lib/datadog/appsec/configuration.rb +10 -0
  30. data/lib/datadog/appsec/contrib/auto_instrument.rb +2 -0
  31. data/lib/datadog/appsec/contrib/configuration/settings.rb +2 -0
  32. data/lib/datadog/appsec/contrib/integration.rb +2 -0
  33. data/lib/datadog/appsec/contrib/patcher.rb +2 -0
  34. data/lib/datadog/appsec/contrib/rack/configuration/settings.rb +2 -0
  35. data/lib/datadog/appsec/contrib/rack/ext.rb +2 -0
  36. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +78 -37
  37. data/lib/datadog/appsec/contrib/rack/integration.rb +1 -0
  38. data/lib/datadog/appsec/contrib/rack/patcher.rb +0 -1
  39. data/lib/datadog/appsec/contrib/rack/reactive/request.rb +4 -2
  40. data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +64 -0
  41. data/lib/datadog/appsec/contrib/rack/reactive/response.rb +4 -2
  42. data/lib/datadog/appsec/contrib/rack/request.rb +16 -1
  43. data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +41 -0
  44. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +60 -46
  45. data/lib/datadog/appsec/contrib/rack/response.rb +2 -0
  46. data/lib/datadog/appsec/contrib/rails/configuration/settings.rb +2 -0
  47. data/lib/datadog/appsec/contrib/rails/ext.rb +2 -0
  48. data/lib/datadog/appsec/contrib/rails/framework.rb +2 -0
  49. data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +81 -0
  50. data/lib/datadog/appsec/contrib/rails/patcher.rb +35 -2
  51. data/lib/datadog/appsec/contrib/rails/reactive/action.rb +68 -0
  52. data/lib/datadog/appsec/contrib/rails/request.rb +33 -0
  53. data/lib/datadog/appsec/contrib/rails/request_middleware.rb +2 -0
  54. data/lib/datadog/appsec/contrib/sinatra/configuration/settings.rb +2 -0
  55. data/lib/datadog/appsec/contrib/sinatra/ext.rb +2 -0
  56. data/lib/datadog/appsec/contrib/sinatra/framework.rb +2 -0
  57. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +124 -0
  58. data/lib/datadog/appsec/contrib/sinatra/patcher.rb +69 -2
  59. data/lib/datadog/appsec/contrib/sinatra/reactive/routed.rb +63 -0
  60. data/lib/datadog/appsec/contrib/sinatra/request_middleware.rb +2 -0
  61. data/lib/datadog/appsec/event.rb +44 -34
  62. data/lib/datadog/appsec/extensions.rb +2 -4
  63. data/lib/datadog/appsec/instrumentation/gateway.rb +2 -0
  64. data/lib/datadog/appsec/processor.rb +164 -0
  65. data/lib/datadog/appsec/rate_limiter.rb +7 -0
  66. data/lib/datadog/appsec/reactive/address_hash.rb +2 -0
  67. data/lib/datadog/appsec/reactive/engine.rb +2 -0
  68. data/lib/datadog/appsec/reactive/operation.rb +2 -1
  69. data/lib/datadog/appsec/reactive/subscriber.rb +2 -0
  70. data/lib/datadog/appsec.rb +2 -0
  71. data/lib/datadog/ci/configuration/components.rb +1 -0
  72. data/lib/datadog/ci/configuration/settings.rb +9 -2
  73. data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +1 -0
  74. data/lib/datadog/ci/contrib/cucumber/ext.rb +1 -0
  75. data/lib/datadog/ci/contrib/cucumber/formatter.rb +2 -1
  76. data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +1 -0
  77. data/lib/datadog/ci/contrib/cucumber/integration.rb +1 -0
  78. data/lib/datadog/ci/contrib/cucumber/patcher.rb +1 -0
  79. data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +1 -0
  80. data/lib/datadog/ci/contrib/rspec/example.rb +3 -2
  81. data/lib/datadog/ci/contrib/rspec/ext.rb +1 -0
  82. data/lib/datadog/ci/contrib/rspec/integration.rb +1 -0
  83. data/lib/datadog/ci/contrib/rspec/patcher.rb +1 -0
  84. data/lib/datadog/ci/ext/app_types.rb +1 -0
  85. data/lib/datadog/ci/ext/environment.rb +23 -8
  86. data/lib/datadog/ci/ext/settings.rb +1 -0
  87. data/lib/datadog/ci/ext/test.rb +1 -0
  88. data/lib/datadog/ci/extensions.rb +1 -0
  89. data/lib/datadog/ci/flush.rb +1 -0
  90. data/lib/datadog/ci/test.rb +2 -1
  91. data/lib/datadog/ci.rb +3 -1
  92. data/lib/datadog/core/buffer/cruby.rb +1 -0
  93. data/lib/datadog/core/buffer/thread_safe.rb +1 -0
  94. data/lib/datadog/core/configuration/agent_settings_resolver.rb +109 -40
  95. data/lib/datadog/core/configuration/base.rb +1 -0
  96. data/lib/datadog/core/configuration/components.rb +23 -4
  97. data/lib/datadog/core/configuration/dependency_resolver.rb +1 -0
  98. data/lib/datadog/core/configuration/option.rb +1 -0
  99. data/lib/datadog/core/configuration/option_definition.rb +1 -0
  100. data/lib/datadog/core/configuration/option_definition_set.rb +1 -0
  101. data/lib/datadog/core/configuration/option_set.rb +1 -0
  102. data/lib/datadog/core/configuration/options.rb +1 -0
  103. data/lib/datadog/core/configuration/settings.rb +4 -12
  104. data/lib/datadog/core/configuration.rb +8 -5
  105. data/lib/datadog/core/diagnostics/environment_logger.rb +2 -1
  106. data/lib/datadog/core/diagnostics/ext.rb +1 -0
  107. data/lib/datadog/core/diagnostics/health.rb +2 -1
  108. data/lib/datadog/core/encoding.rb +1 -0
  109. data/lib/datadog/core/environment/cgroup.rb +4 -1
  110. data/lib/datadog/core/environment/class_count.rb +1 -0
  111. data/lib/datadog/core/environment/container.rb +3 -1
  112. data/lib/datadog/core/environment/ext.rb +1 -0
  113. data/lib/datadog/core/environment/gc.rb +1 -0
  114. data/lib/datadog/core/environment/identity.rb +1 -0
  115. data/lib/datadog/core/environment/socket.rb +1 -0
  116. data/lib/datadog/core/environment/thread_count.rb +1 -0
  117. data/lib/datadog/core/environment/variable_helpers.rb +27 -2
  118. data/lib/datadog/core/environment/vm_cache.rb +1 -0
  119. data/lib/datadog/core/error.rb +2 -1
  120. data/lib/datadog/core/extensions.rb +2 -1
  121. data/lib/datadog/core/git/ext.rb +1 -0
  122. data/lib/datadog/core/logger.rb +1 -0
  123. data/lib/datadog/core/logging/ext.rb +11 -0
  124. data/lib/datadog/core/metrics/client.rb +16 -5
  125. data/lib/datadog/core/metrics/ext.rb +1 -0
  126. data/lib/datadog/core/metrics/helpers.rb +2 -0
  127. data/lib/datadog/core/metrics/logging.rb +2 -0
  128. data/lib/datadog/core/metrics/metric.rb +2 -0
  129. data/lib/datadog/core/metrics/options.rb +2 -0
  130. data/lib/datadog/core/pin.rb +1 -1
  131. data/lib/datadog/core/runtime/metrics.rb +2 -1
  132. data/lib/datadog/core/utils/compression.rb +1 -0
  133. data/lib/datadog/core/utils/forking.rb +1 -0
  134. data/lib/datadog/core/utils/object_set.rb +1 -0
  135. data/lib/datadog/core/utils/only_once.rb +2 -1
  136. data/lib/datadog/core/utils/safe_dup.rb +27 -0
  137. data/lib/datadog/core/utils/sequence.rb +1 -0
  138. data/lib/datadog/core/utils/string_table.rb +1 -0
  139. data/lib/datadog/core/utils/time.rb +1 -0
  140. data/lib/datadog/core/utils.rb +1 -0
  141. data/lib/datadog/core/vendor/multipart-post/multipart/post/composite_read_io.rb +1 -0
  142. data/lib/datadog/core/vendor/multipart-post/multipart/post/multipartable.rb +1 -0
  143. data/lib/datadog/core/vendor/multipart-post/multipart/post/parts.rb +1 -0
  144. data/lib/datadog/core/vendor/multipart-post/multipart/post/version.rb +1 -0
  145. data/lib/datadog/core/vendor/multipart-post/multipart/post.rb +1 -0
  146. data/lib/datadog/core/vendor/multipart-post/multipart.rb +1 -0
  147. data/lib/datadog/core/vendor/multipart-post/net/http/post/multipart.rb +1 -0
  148. data/lib/datadog/core/worker.rb +1 -0
  149. data/lib/datadog/core/workers/async.rb +4 -1
  150. data/lib/datadog/core/workers/interval_loop.rb +1 -0
  151. data/lib/datadog/core/workers/polling.rb +1 -0
  152. data/lib/datadog/core/workers/queue.rb +1 -0
  153. data/lib/datadog/core/workers/runtime_metrics.rb +0 -2
  154. data/lib/datadog/core.rb +7 -0
  155. data/lib/datadog/kit/enable_core_dumps.rb +50 -0
  156. data/lib/datadog/kit/identity.rb +63 -0
  157. data/lib/datadog/kit.rb +11 -0
  158. data/lib/datadog/opentracer/binary_propagator.rb +1 -0
  159. data/lib/datadog/opentracer/carrier.rb +1 -0
  160. data/lib/datadog/opentracer/distributed_headers.rb +1 -0
  161. data/lib/datadog/opentracer/global_tracer.rb +1 -0
  162. data/lib/datadog/opentracer/propagator.rb +1 -0
  163. data/lib/datadog/opentracer/rack_propagator.rb +1 -0
  164. data/lib/datadog/opentracer/scope.rb +1 -0
  165. data/lib/datadog/opentracer/scope_manager.rb +1 -0
  166. data/lib/datadog/opentracer/span.rb +1 -0
  167. data/lib/datadog/opentracer/span_context.rb +1 -0
  168. data/lib/datadog/opentracer/span_context_factory.rb +1 -0
  169. data/lib/datadog/opentracer/text_map_propagator.rb +1 -0
  170. data/lib/datadog/opentracer/thread_local_scope.rb +1 -0
  171. data/lib/datadog/opentracer/thread_local_scope_manager.rb +1 -0
  172. data/lib/datadog/opentracer/tracer.rb +1 -2
  173. data/lib/datadog/opentracer.rb +1 -0
  174. data/lib/datadog/profiling/backtrace_location.rb +1 -0
  175. data/lib/datadog/profiling/buffer.rb +1 -0
  176. data/lib/datadog/profiling/collectors/code_provenance.rb +2 -1
  177. data/lib/datadog/profiling/collectors/old_stack.rb +298 -0
  178. data/lib/datadog/profiling/collectors/stack.rb +5 -286
  179. data/lib/datadog/profiling/encoding/profile.rb +1 -1
  180. data/lib/datadog/profiling/event.rb +1 -0
  181. data/lib/datadog/profiling/events/stack.rb +1 -0
  182. data/lib/datadog/profiling/exporter.rb +1 -0
  183. data/lib/datadog/profiling/ext/forking.rb +1 -0
  184. data/lib/datadog/profiling/ext.rb +4 -3
  185. data/lib/datadog/profiling/flush.rb +2 -1
  186. data/lib/datadog/profiling/load_native_extension.rb +22 -0
  187. data/lib/datadog/profiling/native_extension.rb +1 -0
  188. data/lib/datadog/profiling/pprof/builder.rb +2 -1
  189. data/lib/datadog/profiling/pprof/converter.rb +1 -0
  190. data/lib/datadog/profiling/pprof/message_set.rb +1 -0
  191. data/lib/datadog/profiling/pprof/payload.rb +1 -0
  192. data/lib/datadog/profiling/pprof/pprof_pb.rb +1 -0
  193. data/lib/datadog/profiling/pprof/stack_sample.rb +1 -0
  194. data/lib/datadog/profiling/pprof/string_table.rb +1 -0
  195. data/lib/datadog/profiling/pprof/template.rb +1 -0
  196. data/lib/datadog/profiling/preload.rb +1 -0
  197. data/lib/datadog/profiling/profiler.rb +1 -0
  198. data/lib/datadog/profiling/recorder.rb +2 -1
  199. data/lib/datadog/profiling/scheduler.rb +3 -2
  200. data/lib/datadog/profiling/stack_recorder.rb +33 -0
  201. data/lib/datadog/profiling/tag_builder.rb +48 -0
  202. data/lib/datadog/profiling/tasks/exec.rb +3 -2
  203. data/lib/datadog/profiling/tasks/help.rb +1 -0
  204. data/lib/datadog/profiling/tasks/setup.rb +7 -4
  205. data/lib/datadog/profiling/trace_identifiers/ddtrace.rb +2 -1
  206. data/lib/datadog/profiling/trace_identifiers/helper.rb +2 -1
  207. data/lib/datadog/profiling/transport/client.rb +1 -0
  208. data/lib/datadog/profiling/transport/http/api/endpoint.rb +1 -0
  209. data/lib/datadog/profiling/transport/http/api/instance.rb +1 -0
  210. data/lib/datadog/profiling/transport/http/api/spec.rb +1 -0
  211. data/lib/datadog/profiling/transport/http/api.rb +1 -0
  212. data/lib/datadog/profiling/transport/http/builder.rb +1 -0
  213. data/lib/datadog/profiling/transport/http/client.rb +1 -0
  214. data/lib/datadog/profiling/transport/http/response.rb +1 -0
  215. data/lib/datadog/profiling/transport/http.rb +1 -0
  216. data/lib/datadog/profiling/transport/io/client.rb +1 -0
  217. data/lib/datadog/profiling/transport/io/response.rb +1 -0
  218. data/lib/datadog/profiling/transport/io.rb +1 -0
  219. data/lib/datadog/profiling/transport/parcel.rb +1 -0
  220. data/lib/datadog/profiling/transport/request.rb +1 -0
  221. data/lib/datadog/profiling/transport/response.rb +1 -0
  222. data/lib/datadog/profiling.rb +30 -27
  223. data/lib/datadog/tracing/analytics.rb +1 -0
  224. data/lib/datadog/tracing/buffer.rb +10 -3
  225. data/lib/datadog/tracing/configuration/ext.rb +1 -0
  226. data/lib/datadog/tracing/context.rb +1 -0
  227. data/lib/datadog/tracing/context_provider.rb +18 -19
  228. data/lib/datadog/tracing/contrib/action_cable/configuration/settings.rb +1 -0
  229. data/lib/datadog/tracing/contrib/action_cable/event.rb +2 -1
  230. data/lib/datadog/tracing/contrib/action_cable/events/broadcast.rb +1 -0
  231. data/lib/datadog/tracing/contrib/action_cable/events/perform_action.rb +1 -0
  232. data/lib/datadog/tracing/contrib/action_cable/events/transmit.rb +1 -0
  233. data/lib/datadog/tracing/contrib/action_cable/events.rb +1 -0
  234. data/lib/datadog/tracing/contrib/action_cable/ext.rb +1 -0
  235. data/lib/datadog/tracing/contrib/action_cable/instrumentation.rb +1 -1
  236. data/lib/datadog/tracing/contrib/action_cable/integration.rb +1 -0
  237. data/lib/datadog/tracing/contrib/action_cable/patcher.rb +1 -0
  238. data/lib/datadog/tracing/contrib/action_mailer/configuration/settings.rb +1 -0
  239. data/lib/datadog/tracing/contrib/action_mailer/event.rb +2 -1
  240. data/lib/datadog/tracing/contrib/action_mailer/events/deliver.rb +1 -0
  241. data/lib/datadog/tracing/contrib/action_mailer/events/process.rb +1 -0
  242. data/lib/datadog/tracing/contrib/action_mailer/events.rb +1 -0
  243. data/lib/datadog/tracing/contrib/action_mailer/ext.rb +1 -0
  244. data/lib/datadog/tracing/contrib/action_mailer/integration.rb +1 -0
  245. data/lib/datadog/tracing/contrib/action_mailer/patcher.rb +1 -0
  246. data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +3 -2
  247. data/lib/datadog/tracing/contrib/action_pack/action_controller/patcher.rb +1 -0
  248. data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +1 -0
  249. data/lib/datadog/tracing/contrib/action_pack/ext.rb +1 -0
  250. data/lib/datadog/tracing/contrib/action_pack/integration.rb +1 -0
  251. data/lib/datadog/tracing/contrib/action_pack/patcher.rb +1 -0
  252. data/lib/datadog/tracing/contrib/action_pack/utils.rb +2 -1
  253. data/lib/datadog/tracing/contrib/action_view/configuration/settings.rb +1 -0
  254. data/lib/datadog/tracing/contrib/action_view/event.rb +2 -1
  255. data/lib/datadog/tracing/contrib/action_view/events/render_partial.rb +1 -0
  256. data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +1 -0
  257. data/lib/datadog/tracing/contrib/action_view/events.rb +1 -0
  258. data/lib/datadog/tracing/contrib/action_view/ext.rb +1 -0
  259. data/lib/datadog/tracing/contrib/action_view/instrumentation/partial_renderer.rb +1 -0
  260. data/lib/datadog/tracing/contrib/action_view/instrumentation/template_renderer.rb +1 -0
  261. data/lib/datadog/tracing/contrib/action_view/integration.rb +1 -0
  262. data/lib/datadog/tracing/contrib/action_view/patcher.rb +1 -1
  263. data/lib/datadog/tracing/contrib/action_view/utils.rb +2 -1
  264. data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +1 -0
  265. data/lib/datadog/tracing/contrib/active_job/event.rb +2 -1
  266. data/lib/datadog/tracing/contrib/active_job/events/discard.rb +1 -0
  267. data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +1 -0
  268. data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +1 -0
  269. data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +1 -0
  270. data/lib/datadog/tracing/contrib/active_job/events/perform.rb +1 -0
  271. data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +1 -0
  272. data/lib/datadog/tracing/contrib/active_job/events.rb +1 -0
  273. data/lib/datadog/tracing/contrib/active_job/ext.rb +1 -0
  274. data/lib/datadog/tracing/contrib/active_job/integration.rb +1 -0
  275. data/lib/datadog/tracing/contrib/active_job/log_injection.rb +1 -0
  276. data/lib/datadog/tracing/contrib/active_job/patcher.rb +1 -0
  277. data/lib/datadog/tracing/contrib/active_model_serializers/configuration/settings.rb +1 -0
  278. data/lib/datadog/tracing/contrib/active_model_serializers/event.rb +2 -1
  279. data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +1 -0
  280. data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +1 -0
  281. data/lib/datadog/tracing/contrib/active_model_serializers/events.rb +1 -0
  282. data/lib/datadog/tracing/contrib/active_model_serializers/ext.rb +1 -0
  283. data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +1 -0
  284. data/lib/datadog/tracing/contrib/active_model_serializers/patcher.rb +2 -1
  285. data/lib/datadog/tracing/contrib/active_record/configuration/makara_resolver.rb +1 -0
  286. data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +3 -2
  287. data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +1 -0
  288. data/lib/datadog/tracing/contrib/active_record/event.rb +2 -1
  289. data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +1 -0
  290. data/lib/datadog/tracing/contrib/active_record/events/sql.rb +2 -1
  291. data/lib/datadog/tracing/contrib/active_record/events.rb +1 -0
  292. data/lib/datadog/tracing/contrib/active_record/ext.rb +1 -0
  293. data/lib/datadog/tracing/contrib/active_record/integration.rb +1 -0
  294. data/lib/datadog/tracing/contrib/active_record/patcher.rb +1 -0
  295. data/lib/datadog/tracing/contrib/active_record/utils.rb +2 -1
  296. data/lib/datadog/tracing/contrib/active_record/vendor/connection_specification.rb +2 -1
  297. data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +2 -1
  298. data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +1 -0
  299. data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +1 -0
  300. data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +1 -0
  301. data/lib/datadog/tracing/contrib/active_support/ext.rb +1 -0
  302. data/lib/datadog/tracing/contrib/active_support/integration.rb +1 -0
  303. data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +1 -0
  304. data/lib/datadog/tracing/contrib/active_support/notifications/subscriber.rb +1 -0
  305. data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +5 -2
  306. data/lib/datadog/tracing/contrib/active_support/patcher.rb +1 -0
  307. data/lib/datadog/tracing/contrib/analytics.rb +1 -0
  308. data/lib/datadog/tracing/contrib/auto_instrument.rb +23 -20
  309. data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +1 -0
  310. data/lib/datadog/tracing/contrib/aws/ext.rb +1 -0
  311. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +3 -1
  312. data/lib/datadog/tracing/contrib/aws/integration.rb +1 -0
  313. data/lib/datadog/tracing/contrib/aws/parsed_context.rb +1 -0
  314. data/lib/datadog/tracing/contrib/aws/patcher.rb +2 -1
  315. data/lib/datadog/tracing/contrib/aws/services.rb +1 -0
  316. data/lib/datadog/tracing/contrib/concurrent_ruby/configuration/settings.rb +1 -0
  317. data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +12 -4
  318. data/lib/datadog/tracing/contrib/concurrent_ruby/ext.rb +1 -0
  319. data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +1 -0
  320. data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +1 -0
  321. data/lib/datadog/tracing/contrib/concurrent_ruby/patcher.rb +1 -0
  322. data/lib/datadog/tracing/contrib/configurable.rb +1 -0
  323. data/lib/datadog/tracing/contrib/configuration/resolver.rb +1 -0
  324. data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +1 -0
  325. data/lib/datadog/tracing/contrib/configuration/settings.rb +1 -0
  326. data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +1 -0
  327. data/lib/datadog/tracing/contrib/dalli/ext.rb +1 -0
  328. data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +2 -1
  329. data/lib/datadog/tracing/contrib/dalli/integration.rb +1 -0
  330. data/lib/datadog/tracing/contrib/dalli/patcher.rb +1 -1
  331. data/lib/datadog/tracing/contrib/dalli/quantize.rb +1 -0
  332. data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +1 -0
  333. data/lib/datadog/tracing/contrib/delayed_job/ext.rb +1 -0
  334. data/lib/datadog/tracing/contrib/delayed_job/integration.rb +1 -0
  335. data/lib/datadog/tracing/contrib/delayed_job/patcher.rb +1 -1
  336. data/lib/datadog/tracing/contrib/delayed_job/plugin.rb +2 -1
  337. data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +1 -0
  338. data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +1 -0
  339. data/lib/datadog/tracing/contrib/elasticsearch/integration.rb +10 -3
  340. data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +40 -3
  341. data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +1 -0
  342. data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +1 -0
  343. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +2 -1
  344. data/lib/datadog/tracing/contrib/ethon/ext.rb +1 -0
  345. data/lib/datadog/tracing/contrib/ethon/integration.rb +1 -0
  346. data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +2 -1
  347. data/lib/datadog/tracing/contrib/ethon/patcher.rb +1 -1
  348. data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +1 -0
  349. data/lib/datadog/tracing/contrib/excon/ext.rb +1 -0
  350. data/lib/datadog/tracing/contrib/excon/integration.rb +1 -0
  351. data/lib/datadog/tracing/contrib/excon/middleware.rb +2 -1
  352. data/lib/datadog/tracing/contrib/excon/patcher.rb +1 -0
  353. data/lib/datadog/tracing/contrib/extensions.rb +57 -44
  354. data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +1 -0
  355. data/lib/datadog/tracing/contrib/faraday/connection.rb +1 -0
  356. data/lib/datadog/tracing/contrib/faraday/ext.rb +1 -0
  357. data/lib/datadog/tracing/contrib/faraday/integration.rb +1 -0
  358. data/lib/datadog/tracing/contrib/faraday/middleware.rb +2 -1
  359. data/lib/datadog/tracing/contrib/faraday/patcher.rb +1 -1
  360. data/lib/datadog/tracing/contrib/faraday/rack_builder.rb +1 -0
  361. data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +1 -0
  362. data/lib/datadog/tracing/contrib/grape/endpoint.rb +4 -2
  363. data/lib/datadog/tracing/contrib/grape/ext.rb +1 -0
  364. data/lib/datadog/tracing/contrib/grape/instrumentation.rb +1 -0
  365. data/lib/datadog/tracing/contrib/grape/integration.rb +1 -0
  366. data/lib/datadog/tracing/contrib/grape/patcher.rb +1 -1
  367. data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +1 -0
  368. data/lib/datadog/tracing/contrib/graphql/ext.rb +3 -2
  369. data/lib/datadog/tracing/contrib/graphql/integration.rb +1 -0
  370. data/lib/datadog/tracing/contrib/graphql/patcher.rb +31 -4
  371. data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +1 -0
  372. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +1 -0
  373. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +1 -0
  374. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor.rb +3 -2
  375. data/lib/datadog/tracing/contrib/grpc/ext.rb +1 -0
  376. data/lib/datadog/tracing/contrib/grpc/integration.rb +1 -0
  377. data/lib/datadog/tracing/contrib/grpc/intercept_with_datadog.rb +1 -0
  378. data/lib/datadog/tracing/contrib/grpc/patcher.rb +1 -1
  379. data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +2 -1
  380. data/lib/datadog/tracing/contrib/http/configuration/settings.rb +1 -0
  381. data/lib/datadog/tracing/contrib/http/ext.rb +1 -0
  382. data/lib/datadog/tracing/contrib/http/instrumentation.rb +2 -1
  383. data/lib/datadog/tracing/contrib/http/integration.rb +1 -0
  384. data/lib/datadog/tracing/contrib/http/patcher.rb +1 -0
  385. data/lib/datadog/tracing/contrib/http_annotation_helper.rb +1 -0
  386. data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +1 -0
  387. data/lib/datadog/tracing/contrib/httpclient/ext.rb +1 -0
  388. data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +3 -2
  389. data/lib/datadog/tracing/contrib/httpclient/integration.rb +1 -0
  390. data/lib/datadog/tracing/contrib/httpclient/patcher.rb +1 -0
  391. data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +1 -0
  392. data/lib/datadog/tracing/contrib/httprb/ext.rb +1 -0
  393. data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +3 -2
  394. data/lib/datadog/tracing/contrib/httprb/integration.rb +1 -0
  395. data/lib/datadog/tracing/contrib/httprb/patcher.rb +1 -0
  396. data/lib/datadog/tracing/contrib/integration.rb +2 -1
  397. data/lib/datadog/tracing/contrib/kafka/configuration/settings.rb +1 -0
  398. data/lib/datadog/tracing/contrib/kafka/consumer_event.rb +1 -0
  399. data/lib/datadog/tracing/contrib/kafka/consumer_group_event.rb +1 -0
  400. data/lib/datadog/tracing/contrib/kafka/event.rb +2 -1
  401. data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +1 -0
  402. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_batch.rb +1 -0
  403. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_message.rb +1 -0
  404. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/heartbeat.rb +1 -0
  405. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/join_group.rb +1 -0
  406. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/leave_group.rb +1 -0
  407. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/sync_group.rb +1 -0
  408. data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +1 -0
  409. data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +1 -0
  410. data/lib/datadog/tracing/contrib/kafka/events.rb +1 -0
  411. data/lib/datadog/tracing/contrib/kafka/ext.rb +1 -0
  412. data/lib/datadog/tracing/contrib/kafka/integration.rb +1 -0
  413. data/lib/datadog/tracing/contrib/kafka/patcher.rb +1 -1
  414. data/lib/datadog/tracing/contrib/lograge/configuration/settings.rb +1 -0
  415. data/lib/datadog/tracing/contrib/lograge/ext.rb +1 -0
  416. data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +4 -2
  417. data/lib/datadog/tracing/contrib/lograge/integration.rb +1 -0
  418. data/lib/datadog/tracing/contrib/lograge/patcher.rb +1 -0
  419. data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +1 -0
  420. data/lib/datadog/tracing/contrib/mongodb/ext.rb +1 -0
  421. data/lib/datadog/tracing/contrib/mongodb/instrumentation.rb +1 -0
  422. data/lib/datadog/tracing/contrib/mongodb/integration.rb +1 -0
  423. data/lib/datadog/tracing/contrib/mongodb/parsers.rb +2 -1
  424. data/lib/datadog/tracing/contrib/mongodb/patcher.rb +1 -0
  425. data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +3 -2
  426. data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +1 -0
  427. data/lib/datadog/tracing/contrib/mysql2/ext.rb +1 -0
  428. data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +2 -1
  429. data/lib/datadog/tracing/contrib/mysql2/integration.rb +1 -0
  430. data/lib/datadog/tracing/contrib/mysql2/patcher.rb +1 -0
  431. data/lib/datadog/tracing/contrib/patchable.rb +1 -0
  432. data/lib/datadog/tracing/contrib/patcher.rb +1 -0
  433. data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +1 -0
  434. data/lib/datadog/tracing/contrib/presto/ext.rb +1 -0
  435. data/lib/datadog/tracing/contrib/presto/instrumentation.rb +2 -1
  436. data/lib/datadog/tracing/contrib/presto/integration.rb +1 -0
  437. data/lib/datadog/tracing/contrib/presto/patcher.rb +1 -0
  438. data/lib/datadog/tracing/contrib/qless/configuration/settings.rb +1 -0
  439. data/lib/datadog/tracing/contrib/qless/ext.rb +1 -0
  440. data/lib/datadog/tracing/contrib/qless/integration.rb +1 -0
  441. data/lib/datadog/tracing/contrib/qless/patcher.rb +2 -2
  442. data/lib/datadog/tracing/contrib/qless/qless_job.rb +3 -2
  443. data/lib/datadog/tracing/contrib/qless/tracer_cleaner.rb +2 -1
  444. data/lib/datadog/tracing/contrib/que/configuration/settings.rb +2 -1
  445. data/lib/datadog/tracing/contrib/que/ext.rb +2 -1
  446. data/lib/datadog/tracing/contrib/que/integration.rb +2 -1
  447. data/lib/datadog/tracing/contrib/que/patcher.rb +2 -2
  448. data/lib/datadog/tracing/contrib/que/tracer.rb +3 -2
  449. data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +1 -0
  450. data/lib/datadog/tracing/contrib/racecar/event.rb +2 -1
  451. data/lib/datadog/tracing/contrib/racecar/events/batch.rb +1 -0
  452. data/lib/datadog/tracing/contrib/racecar/events/consume.rb +1 -0
  453. data/lib/datadog/tracing/contrib/racecar/events/message.rb +1 -0
  454. data/lib/datadog/tracing/contrib/racecar/events.rb +1 -0
  455. data/lib/datadog/tracing/contrib/racecar/ext.rb +1 -0
  456. data/lib/datadog/tracing/contrib/racecar/integration.rb +1 -0
  457. data/lib/datadog/tracing/contrib/racecar/patcher.rb +1 -1
  458. data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +1 -0
  459. data/lib/datadog/tracing/contrib/rack/ext.rb +1 -0
  460. data/lib/datadog/tracing/contrib/rack/integration.rb +1 -0
  461. data/lib/datadog/tracing/contrib/rack/middlewares.rb +2 -1
  462. data/lib/datadog/tracing/contrib/rack/patcher.rb +3 -2
  463. data/lib/datadog/tracing/contrib/rack/request_queue.rb +1 -0
  464. data/lib/datadog/tracing/contrib/rails/auto_instrument_railtie.rb +3 -1
  465. data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +5 -4
  466. data/lib/datadog/tracing/contrib/rails/ext.rb +1 -0
  467. data/lib/datadog/tracing/contrib/rails/framework.rb +37 -36
  468. data/lib/datadog/tracing/contrib/rails/integration.rb +1 -0
  469. data/lib/datadog/tracing/contrib/rails/log_injection.rb +4 -16
  470. data/lib/datadog/tracing/contrib/rails/middlewares.rb +1 -0
  471. data/lib/datadog/tracing/contrib/rails/patcher.rb +8 -3
  472. data/lib/datadog/tracing/contrib/rails/railtie.rb +1 -0
  473. data/lib/datadog/tracing/contrib/rails/utils.rb +1 -0
  474. data/lib/datadog/tracing/contrib/rake/configuration/settings.rb +1 -0
  475. data/lib/datadog/tracing/contrib/rake/ext.rb +1 -0
  476. data/lib/datadog/tracing/contrib/rake/instrumentation.rb +6 -4
  477. data/lib/datadog/tracing/contrib/rake/integration.rb +1 -0
  478. data/lib/datadog/tracing/contrib/rake/patcher.rb +2 -2
  479. data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +1 -0
  480. data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +1 -0
  481. data/lib/datadog/tracing/contrib/redis/ext.rb +1 -0
  482. data/lib/datadog/tracing/contrib/redis/instrumentation.rb +2 -1
  483. data/lib/datadog/tracing/contrib/redis/integration.rb +1 -0
  484. data/lib/datadog/tracing/contrib/redis/patcher.rb +1 -1
  485. data/lib/datadog/tracing/contrib/redis/quantize.rb +1 -0
  486. data/lib/datadog/tracing/contrib/redis/tags.rb +2 -1
  487. data/lib/datadog/tracing/contrib/redis/vendor/resolver.rb +1 -0
  488. data/lib/datadog/tracing/contrib/registry.rb +1 -0
  489. data/lib/datadog/tracing/contrib/resque/configuration/settings.rb +1 -0
  490. data/lib/datadog/tracing/contrib/resque/ext.rb +1 -0
  491. data/lib/datadog/tracing/contrib/resque/integration.rb +1 -0
  492. data/lib/datadog/tracing/contrib/resque/patcher.rb +1 -1
  493. data/lib/datadog/tracing/contrib/resque/resque_job.rb +3 -2
  494. data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +1 -0
  495. data/lib/datadog/tracing/contrib/rest_client/ext.rb +1 -0
  496. data/lib/datadog/tracing/contrib/rest_client/integration.rb +1 -0
  497. data/lib/datadog/tracing/contrib/rest_client/patcher.rb +1 -1
  498. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +2 -1
  499. data/lib/datadog/tracing/contrib/semantic_logger/configuration/settings.rb +1 -0
  500. data/lib/datadog/tracing/contrib/semantic_logger/ext.rb +1 -0
  501. data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +4 -2
  502. data/lib/datadog/tracing/contrib/semantic_logger/integration.rb +1 -0
  503. data/lib/datadog/tracing/contrib/semantic_logger/patcher.rb +1 -0
  504. data/lib/datadog/tracing/contrib/sequel/configuration/settings.rb +1 -0
  505. data/lib/datadog/tracing/contrib/sequel/database.rb +2 -1
  506. data/lib/datadog/tracing/contrib/sequel/dataset.rb +2 -1
  507. data/lib/datadog/tracing/contrib/sequel/ext.rb +1 -0
  508. data/lib/datadog/tracing/contrib/sequel/integration.rb +1 -0
  509. data/lib/datadog/tracing/contrib/sequel/patcher.rb +1 -0
  510. data/lib/datadog/tracing/contrib/sequel/utils.rb +2 -1
  511. data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +1 -0
  512. data/lib/datadog/tracing/contrib/shoryuken/ext.rb +1 -0
  513. data/lib/datadog/tracing/contrib/shoryuken/integration.rb +1 -0
  514. data/lib/datadog/tracing/contrib/shoryuken/patcher.rb +1 -0
  515. data/lib/datadog/tracing/contrib/shoryuken/tracer.rb +2 -1
  516. data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +2 -1
  517. data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +2 -0
  518. data/lib/datadog/tracing/contrib/sidekiq/ext.rb +1 -0
  519. data/lib/datadog/tracing/contrib/sidekiq/integration.rb +1 -0
  520. data/lib/datadog/tracing/contrib/sidekiq/patcher.rb +1 -0
  521. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/heartbeat.rb +1 -1
  522. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/job_fetch.rb +1 -1
  523. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/scheduled_push.rb +1 -1
  524. data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +22 -2
  525. data/lib/datadog/tracing/contrib/sidekiq/tracing.rb +1 -0
  526. data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +1 -0
  527. data/lib/datadog/tracing/contrib/sinatra/env.rb +1 -0
  528. data/lib/datadog/tracing/contrib/sinatra/ext.rb +1 -0
  529. data/lib/datadog/tracing/contrib/sinatra/framework.rb +14 -1
  530. data/lib/datadog/tracing/contrib/sinatra/headers.rb +1 -0
  531. data/lib/datadog/tracing/contrib/sinatra/integration.rb +1 -0
  532. data/lib/datadog/tracing/contrib/sinatra/patcher.rb +1 -1
  533. data/lib/datadog/tracing/contrib/sinatra/tracer.rb +3 -2
  534. data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +2 -1
  535. data/lib/datadog/tracing/contrib/sneakers/configuration/settings.rb +2 -1
  536. data/lib/datadog/tracing/contrib/sneakers/ext.rb +2 -1
  537. data/lib/datadog/tracing/contrib/sneakers/integration.rb +2 -1
  538. data/lib/datadog/tracing/contrib/sneakers/patcher.rb +2 -2
  539. data/lib/datadog/tracing/contrib/sneakers/tracer.rb +3 -2
  540. data/lib/datadog/tracing/contrib/status_code_matcher.rb +1 -0
  541. data/lib/datadog/tracing/contrib/sucker_punch/configuration/settings.rb +1 -0
  542. data/lib/datadog/tracing/contrib/sucker_punch/exception_handler.rb +1 -0
  543. data/lib/datadog/tracing/contrib/sucker_punch/ext.rb +1 -0
  544. data/lib/datadog/tracing/contrib/sucker_punch/instrumentation.rb +2 -1
  545. data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +1 -0
  546. data/lib/datadog/tracing/contrib/sucker_punch/patcher.rb +2 -2
  547. data/lib/datadog/tracing/contrib/utils/database.rb +1 -0
  548. data/lib/datadog/tracing/contrib/utils/quantization/hash.rb +1 -0
  549. data/lib/datadog/tracing/contrib/utils/quantization/http.rb +1 -0
  550. data/lib/datadog/tracing/contrib.rb +3 -0
  551. data/lib/datadog/tracing/correlation.rb +12 -20
  552. data/lib/datadog/tracing/distributed/headers/b3.rb +1 -0
  553. data/lib/datadog/tracing/distributed/headers/b3_single.rb +1 -0
  554. data/lib/datadog/tracing/distributed/headers/datadog.rb +1 -0
  555. data/lib/datadog/tracing/distributed/headers/ext.rb +1 -0
  556. data/lib/datadog/tracing/distributed/helpers.rb +1 -0
  557. data/lib/datadog/tracing/distributed/parser.rb +1 -0
  558. data/lib/datadog/tracing/event.rb +3 -1
  559. data/lib/datadog/tracing/flush.rb +1 -0
  560. data/lib/datadog/tracing/metadata/analytics.rb +2 -0
  561. data/lib/datadog/tracing/metadata/errors.rb +24 -0
  562. data/lib/datadog/tracing/metadata/ext.rb +2 -1
  563. data/lib/datadog/tracing/metadata/tagging.rb +2 -10
  564. data/lib/datadog/tracing/metadata.rb +4 -0
  565. data/lib/datadog/tracing/pipeline/span_processor.rb +1 -0
  566. data/lib/datadog/tracing/propagation/grpc.rb +1 -0
  567. data/lib/datadog/tracing/propagation/http.rb +1 -0
  568. data/lib/datadog/tracing/runtime/metrics.rb +1 -0
  569. data/lib/datadog/tracing/sampling/all_sampler.rb +1 -0
  570. data/lib/datadog/tracing/sampling/ext.rb +1 -0
  571. data/lib/datadog/tracing/sampling/matcher.rb +1 -0
  572. data/lib/datadog/tracing/sampling/priority_sampler.rb +4 -4
  573. data/lib/datadog/tracing/sampling/rate_by_key_sampler.rb +1 -0
  574. data/lib/datadog/tracing/sampling/rate_by_service_sampler.rb +1 -0
  575. data/lib/datadog/tracing/sampling/rate_limiter.rb +1 -0
  576. data/lib/datadog/tracing/sampling/rate_sampler.rb +1 -0
  577. data/lib/datadog/tracing/sampling/rule.rb +12 -5
  578. data/lib/datadog/tracing/sampling/rule_sampler.rb +3 -4
  579. data/lib/datadog/tracing/sampling/sampler.rb +1 -0
  580. data/lib/datadog/tracing/span.rb +7 -5
  581. data/lib/datadog/tracing/span_operation.rb +8 -7
  582. data/lib/datadog/tracing/sync_writer.rb +1 -0
  583. data/lib/datadog/tracing/trace_digest.rb +2 -0
  584. data/lib/datadog/tracing/trace_operation.rb +44 -24
  585. data/lib/datadog/tracing/trace_segment.rb +109 -194
  586. data/lib/datadog/tracing/tracer.rb +3 -2
  587. data/lib/datadog/tracing/workers/trace_writer.rb +1 -0
  588. data/lib/datadog/tracing/workers.rb +1 -0
  589. data/lib/datadog/tracing/writer.rb +1 -0
  590. data/lib/datadog/tracing.rb +2 -0
  591. data/lib/ddtrace/auto_instrument.rb +2 -1
  592. data/lib/ddtrace/auto_instrument_base.rb +1 -0
  593. data/lib/ddtrace/profiling/preload.rb +2 -0
  594. data/lib/ddtrace/transport/ext.rb +1 -0
  595. data/lib/ddtrace/transport/http/adapters/net.rb +1 -0
  596. data/lib/ddtrace/transport/http/adapters/registry.rb +1 -0
  597. data/lib/ddtrace/transport/http/adapters/test.rb +1 -0
  598. data/lib/ddtrace/transport/http/adapters/unix_socket.rb +1 -0
  599. data/lib/ddtrace/transport/http/api/endpoint.rb +1 -0
  600. data/lib/ddtrace/transport/http/api/fallbacks.rb +1 -0
  601. data/lib/ddtrace/transport/http/api/instance.rb +1 -0
  602. data/lib/ddtrace/transport/http/api/map.rb +1 -0
  603. data/lib/ddtrace/transport/http/api/spec.rb +1 -0
  604. data/lib/ddtrace/transport/http/api.rb +1 -0
  605. data/lib/ddtrace/transport/http/builder.rb +1 -0
  606. data/lib/ddtrace/transport/http/client.rb +3 -1
  607. data/lib/ddtrace/transport/http/env.rb +1 -0
  608. data/lib/ddtrace/transport/http/response.rb +35 -4
  609. data/lib/ddtrace/transport/http/statistics.rb +1 -0
  610. data/lib/ddtrace/transport/http/traces.rb +1 -0
  611. data/lib/ddtrace/transport/http.rb +14 -3
  612. data/lib/ddtrace/transport/io/client.rb +4 -1
  613. data/lib/ddtrace/transport/io/response.rb +1 -0
  614. data/lib/ddtrace/transport/io/traces.rb +1 -0
  615. data/lib/ddtrace/transport/io.rb +1 -0
  616. data/lib/ddtrace/transport/parcel.rb +1 -0
  617. data/lib/ddtrace/transport/request.rb +1 -0
  618. data/lib/ddtrace/transport/response.rb +1 -0
  619. data/lib/ddtrace/transport/serializable_trace.rb +2 -0
  620. data/lib/ddtrace/transport/statistics.rb +1 -0
  621. data/lib/ddtrace/transport/trace_formatter.rb +24 -1
  622. data/lib/ddtrace/transport/traces.rb +1 -0
  623. data/lib/ddtrace/version.rb +13 -11
  624. data/lib/ddtrace.rb +3 -21
  625. metadata +47 -9
  626. data/lib/datadog/opentelemetry/extensions.rb +0 -14
  627. data/lib/datadog/opentelemetry/span.rb +0 -34
@@ -1,4 +1,4 @@
1
- ***Version 1.0.0 is in beta! Check out our [upgrade guide](https://github.com/DataDog/dd-trace-rb/blob/master/docs/UpgradeGuide.md#from-0x-to-10) for more details.***
1
+ ***Version 1.0.0 has been released. Check out our [upgrade guide](https://github.com/DataDog/dd-trace-rb/blob/master/docs/UpgradeGuide.md#from-0x-to-10) for more details.***
2
2
 
3
3
  # Datadog Ruby Trace Client
4
4
 
@@ -26,9 +26,13 @@ To contribute, check out the [contribution guidelines][contribution docs] and [d
26
26
 
27
27
  - [Compatibility](#compatibility)
28
28
  - [Installation](#installation)
29
- - [Quickstart for Rails applications](#quickstart-for-rails-applications)
30
- - [Quickstart for Ruby applications](#quickstart-for-ruby-applications)
31
- - [Quickstart for OpenTracing](#quickstart-for-opentracing)
29
+ - [Setup the Datadog Agent for tracing](#setup-the-datadog-agent-for-tracing)
30
+ - [Instrument your application](#instrument-your-application)
31
+ - [Rails applications](#rails-applications)
32
+ - [Ruby applications](#ruby-applications)
33
+ - [Configuring OpenTracing](#configuring-opentracing)
34
+ - [Configuring OpenTelemetry](#configuring-opentelemetry)
35
+ - [Connect your application to the Datadog Agent](#connect-your-application-to-the-datadog-agent)
32
36
  - [Manual instrumentation](#manual-instrumentation)
33
37
  - [Integration instrumentation](#integration-instrumentation)
34
38
  - [Action Cable](#action-cable)
@@ -75,11 +79,10 @@ To contribute, check out the [contribution guidelines][contribution docs] and [d
75
79
  - [Sinatra](#sinatra)
76
80
  - [Sneakers](#sneakers)
77
81
  - [Sucker Punch](#sucker-punch)
78
- - [Advanced configuration](#advanced-configuration)
79
- - [Tracer settings](#tracer-settings)
82
+ - [Additional configuration](#additional-configuration)
80
83
  - [Custom logging](#custom-logging)
81
84
  - [Environment and tags](#environment-and-tags)
82
- - [Environment variables](#environment-variables)
85
+ - [Debugging and diagnostics](#debugging-and-diagnostics)
83
86
  - [Sampling](#sampling)
84
87
  - [Application-side sampling](#application-side-sampling)
85
88
  - [Priority sampling](#priority-sampling)
@@ -102,11 +105,18 @@ To contribute, check out the [contribution guidelines][contribution docs] and [d
102
105
 
103
106
  ## Compatibility
104
107
 
108
+ <!--
109
+ Note: Please replicate any changes to this section also to
110
+ https://github.com/datadog/documentation/blob/master/content/en/tracing/setup_overview/compatibility_requirements/ruby.md
111
+ so that they remain in sync.
112
+ -->
113
+
105
114
  **Supported Ruby interpreters**:
106
115
 
107
116
  | Type | Documentation | Version | Support type | Gem version support |
108
117
  | ----- | -------------------------- | ----- | ------------------------------------ | ------------------- |
109
- | MRI | https://www.ruby-lang.org/ | 3.0 | Full | Latest |
118
+ | MRI | https://www.ruby-lang.org/ | 3.1 | Full | Latest |
119
+ | | | 3.0 | Full | Latest |
110
120
  | | | 2.7 | Full | Latest |
111
121
  | | | 2.6 | Full | Latest |
112
122
  | | | 2.5 | Full | Latest |
@@ -117,7 +127,8 @@ To contribute, check out the [contribution guidelines][contribution docs] and [d
117
127
  | | | 2.0 | EOL since June 7th, 2021 | < 0.50.0 |
118
128
  | | | 1.9.3 | EOL since August 6th, 2020 | < 0.27.0 |
119
129
  | | | 1.9.1 | EOL since August 6th, 2020 | < 0.27.0 |
120
- | JRuby | https://www.jruby.org | 9.2 | Full | Latest |
130
+ | JRuby | https://www.jruby.org | 9.3 | Full | Latest |
131
+ | | | 9.2 | Full | Latest |
121
132
 
122
133
  **Supported web servers**:
123
134
 
@@ -152,66 +163,95 @@ but will consider them as having low priority.
152
163
 
153
164
  ## Installation
154
165
 
155
- The following steps will help you quickly start tracing your Ruby application.
166
+ Adding tracing to your Ruby application only takes a few quick steps:
156
167
 
157
- ### Configure the Datadog Agent for APM
168
+ 1. Setup the Datadog Agent for tracing
169
+ 2. Instrument your application
170
+ 3. Connect your application to the Datadog Agent
158
171
 
159
- Before downloading tracing on your application, [install the Datadog Agent on the host](https://docs.datadoghq.com/agent/). The Ruby APM tracer sends trace data through the Datadog Agent.
172
+ ### Setup the Datadog Agent for tracing
160
173
 
161
- 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.
174
+ Before installing `ddtrace`, [install the Datadog Agent](https://docs.datadoghq.com/agent/), to which `ddtrace` will send trace data.
162
175
 
163
- #### Containers
176
+ Then configure the Datadog Agent to accept traces. To do this, either:
164
177
 
165
- 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).
178
+ - Set `DD_APM_ENABLED=true` in the agent's environment
166
179
 
167
- 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:
180
+ OR
168
181
 
169
- 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`.
182
+ - Add `apm_enabled: true` to the [agent's configuration file](https://docs.datadoghq.com/agent/guide/agent-configuration-files/?tab=agentv6v7#agent-main-configuration-file)
170
183
 
184
+ *Additionally, in containerized environments...*
171
185
 
172
- ### Quickstart for Rails applications
186
+ - Set `DD_APM_NON_LOCAL_TRAFFIC=true` in the agent's environment
173
187
 
174
- #### Automatic instrumentation
188
+ OR
175
189
 
176
- 1. Add the `ddtrace` gem to your Gemfile:
190
+ - Add `apm_non_local_traffic: true` to the [agent's configuration file](https://docs.datadoghq.com/agent/guide/agent-configuration-files/?tab=agentv6v7#agent-main-configuration-file).
177
191
 
178
- ```ruby
179
- source 'https://rubygems.org'
180
- gem 'ddtrace', require: 'ddtrace/auto_instrument'
181
- ```
192
+ 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.
182
193
 
183
- 2. Install the gem with `bundle install`
194
+ #### Configuring trace data ingestion
195
+
196
+ The Datadog agent will listen for traces via HTTP on port `8126` by default.
197
+
198
+ You may change the protocol or port the agent listens for trace data using the following:
199
+
200
+ **For HTTP over TCP**:
201
+
202
+ - Set `DD_APM_RECEIVER_PORT=<port>` in the agent's environment
203
+
204
+ OR
205
+
206
+ - Add `apm_config: receiver_port: <port>` to the [agent's configuration file](https://docs.datadoghq.com/agent/guide/agent-configuration-files/?tab=agentv6v7#agent-main-configuration-file)
184
207
 
185
- 3. You can configure, override, or disable any specific integration settings by also adding a Rails manual instrumentation configuration file (next).
208
+ **For Unix Domain Socket (UDS)**:
186
209
 
187
- #### Manual instrumentation
210
+ - Set `DD_APM_RECEIVER_SOCKET=<path-to-socket-file>`
211
+
212
+ OR
213
+
214
+ - Add `apm_config: receiver_socket: <path-to-socket-file>` to the [agent's configuration file](https://docs.datadoghq.com/agent/guide/agent-configuration-files/?tab=agentv6v7#agent-main-configuration-file)
215
+
216
+ ### Instrument your application
217
+
218
+ #### Rails applications
188
219
 
189
220
  1. Add the `ddtrace` gem to your Gemfile:
190
221
 
191
222
  ```ruby
192
223
  source 'https://rubygems.org'
193
- gem 'ddtrace'
224
+ gem 'ddtrace', require: 'ddtrace/auto_instrument'
194
225
  ```
195
226
 
196
227
  2. Install the gem with `bundle install`
228
+
197
229
  3. Create a `config/initializers/datadog.rb` file containing:
198
230
 
199
231
  ```ruby
200
232
  Datadog.configure do |c|
201
- # This will activate auto-instrumentation for Rails
202
- c.tracing.instrument :rails
233
+ # Add additional configuration here.
234
+ # Activate integrations, change tracer settings, etc...
203
235
  end
204
236
  ```
205
237
 
206
- You can also activate additional integrations here (see [Integration instrumentation](#integration-instrumentation))
238
+ Using this block you can:
207
239
 
208
- ### Quickstart for Ruby applications
240
+ - [Add additional configuration settings](#additional-configuration)
241
+ - [Activate or reconfigure instrumentation](#integration-instrumentation)
209
242
 
210
- #### Automatic instrumentation
243
+ #### Ruby applications
211
244
 
212
- 1. Install the gem with `gem install ddtrace`
213
- 2. Requiring any [supported libraries or frameworks](#integration-instrumentation) that should be instrumented.
214
- 3. Add `require 'ddtrace/auto_instrument'` to your application. _Note:_ This must be done _after_ requiring any supported libraries or frameworks.
245
+ 1. Add the `ddtrace` gem to your Gemfile:
246
+
247
+ ```ruby
248
+ source 'https://rubygems.org'
249
+ gem 'ddtrace'
250
+ ```
251
+
252
+ 2. Install the gem with `bundle install`
253
+ 3. `require` any [supported libraries or frameworks](#integration-instrumentation) that should be instrumented.
254
+ 4. Add `require 'ddtrace/auto_instrument'` to your application. _Note:_ This must be done _after_ requiring any supported libraries or frameworks.
215
255
 
216
256
  ```ruby
217
257
  # Example frameworks and libraries
@@ -222,30 +262,31 @@ Install and configure the Datadog Agent to receive traces from your now instrume
222
262
  require 'ddtrace/auto_instrument'
223
263
  ```
224
264
 
225
- You can configure, override, or disable any specific integration settings by also adding a Ruby manual configuration block (next).
226
-
227
- #### Manual instrumentation
228
-
229
- 1. Install the gem with `gem install ddtrace`
230
- 2. Add a configuration block to your Ruby application:
265
+ 5. Add a configuration block to your application:
231
266
 
232
267
  ```ruby
233
- require 'ddtrace'
234
268
  Datadog.configure do |c|
235
- # Configure the tracer here.
269
+ # Add additional configuration here.
236
270
  # Activate integrations, change tracer settings, etc...
237
- # By default without additional configuration, nothing will be traced.
238
271
  end
239
272
  ```
240
273
 
241
- 3. Add or activate instrumentation by doing either of the following:
242
- - Activate integration instrumentation (see [Integration instrumentation](#integration-instrumentation))
243
- - Add manual instrumentation around your code (see [Manual instrumentation](#manual-instrumentation))
274
+ Using this block you can:
244
275
 
245
- ### Quickstart for OpenTracing
276
+ - [Add additional configuration settings](#additional-configuration)
277
+ - [Activate or reconfigure instrumentation](#integration-instrumentation)
278
+
279
+ #### Configuring OpenTracing
280
+
281
+ 1. Add the `ddtrace` gem to your Gemfile:
282
+
283
+ ```ruby
284
+ source 'https://rubygems.org'
285
+ gem 'ddtrace'
286
+ ```
246
287
 
247
- 1. Install the gem with `gem install ddtrace`
248
- 2. To your OpenTracing configuration file, add the following:
288
+ 2. Install the gem with `bundle install`
289
+ 3. To your OpenTracing configuration file, add the following:
249
290
 
250
291
  ```ruby
251
292
  require 'opentracing'
@@ -256,7 +297,7 @@ Install and configure the Datadog Agent to receive traces from your now instrume
256
297
  OpenTracing.global_tracer = Datadog::OpenTracer::Tracer.new
257
298
  ```
258
299
 
259
- 3. (Optional) Add a configuration block to your Ruby application to configure Datadog with:
300
+ 4. Add a configuration block to your application:
260
301
 
261
302
  ```ruby
262
303
  Datadog.configure do |c|
@@ -268,9 +309,29 @@ Install and configure the Datadog Agent to receive traces from your now instrume
268
309
  end
269
310
  ```
270
311
 
271
- 4. (Optional) Add or activate additional instrumentation by doing either of the following:
272
- - Activate Datadog integration instrumentation (see [Integration instrumentation](#integration-instrumentation))
273
- - Add Datadog manual instrumentation around your code (see [Manual instrumentation](#manual-instrumentation))
312
+ Using this block you can:
313
+
314
+ - [Add additional Datadog configuration settings](#additional-configuration)
315
+ - [Activate or reconfigure Datadog instrumentation](#integration-instrumentation)
316
+
317
+ #### Configuring OpenTelemetry
318
+
319
+ You can send OpenTelemetry traces directly to the Datadog agent (without `ddtrace`) by using OTLP. Check out our documentation on [OTLP ingest in the Datadog Agent](https://docs.datadoghq.com/tracing/setup_overview/open_standards/#otlp-ingest-in-datadog-agent) for details.
320
+
321
+ ### Connect your application to the Datadog Agent
322
+
323
+ By default, `ddtrace` will connect to the agent using the first available settings in the listed priority:
324
+
325
+ 1. Via any explicitly provided configuration settings (hostname/port/transport)
326
+ 2. Via Unix Domain Socket (UDS) located at `/var/run/datadog/apm.socket`
327
+ 3. Via HTTP over TCP to `127.0.0.1:8126`
328
+
329
+ If your Datadog Agent is listening at any of these locations, no further configuration should be required.
330
+
331
+ If your agent runs on a different host or container than your application, or you would like to send traces via a different protocol, you will need to configure your application accordingly.
332
+
333
+ - [How to send trace data via HTTP over TCP to agent](#changing-default-agent-hostname-and-port)
334
+ - [How to send trace data via Unix Domain Socket (UDS) to agent](#using-the-unix-domain-socket-uds-adapter)
274
335
 
275
336
  ### Final steps for installation
276
337
 
@@ -401,6 +462,12 @@ end
401
462
 
402
463
  For a list of available integrations, and their configuration options, please refer to the following:
403
464
 
465
+ <!--
466
+ Note: Please replicate any changes to this section also to
467
+ https://github.com/datadog/documentation/blob/master/content/en/tracing/setup_overview/compatibility_requirements/ruby.md
468
+ so that they remain in sync.
469
+ -->
470
+
404
471
  | Name | Key | Versions Supported: MRI | Versions Supported: JRuby | How to configure | Gem source |
405
472
  | -------------------------- | -------------------------- | ------------------------ | --------------------------| ----------------------------------- | ------------------------------------------------------------------------------ |
406
473
  | Action Cable | `action_cable` | `>= 5.0` | `>= 5.0` | *[Link](#action-cable)* | *[Link](https://github.com/rails/rails/tree/master/actioncable)* |
@@ -815,6 +882,9 @@ end
815
882
  # Perform a query to Elasticsearch
816
883
  client = Elasticsearch::Client.new url: 'http://127.0.0.1:9200'
817
884
  response = client.perform_request 'GET', '_cluster/health'
885
+
886
+ # In case you want to override the global configuration for a certain client instance
887
+ Datadog.configure_onto(client.transport, **options)
818
888
  ```
819
889
 
820
890
  Where `options` is an optional `Hash` that accepts the following parameters:
@@ -1531,6 +1601,7 @@ Where `options` is an optional `Hash` that accepts the following parameters:
1531
1601
  | --- | ----------- | ------- |
1532
1602
  | `enabled` | Defines whether Rake tasks should be traced. Useful for temporarily disabling tracing. `true` or `false` | `true` |
1533
1603
  | `quantize` | Hash containing options for quantization of task arguments. See below for more details and examples. | `{}` |
1604
+ | `service_name` | Service name used for `rake` instrumentation | `'rake'` |
1534
1605
 
1535
1606
  **Configuring task quantization behavior**
1536
1607
 
@@ -1797,6 +1868,7 @@ Where `options` is an optional `Hash` that accepts the following parameters:
1797
1868
  | --- | ----------- | ------- |
1798
1869
  | `tag_args` | Enable tagging of job arguments. `true` for on, `false` for off. | `false` |
1799
1870
  | `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? }` |
1871
+ | `quantize` | Hash containing options for quantization of job arguments. | `{}` |
1800
1872
 
1801
1873
  ### Sinatra
1802
1874
 
@@ -1897,41 +1969,50 @@ end
1897
1969
  LogJob.perform_async('login')
1898
1970
  ```
1899
1971
 
1900
- ## Advanced configuration
1901
-
1902
- ### Environment variables
1972
+ ## Additional configuration
1903
1973
 
1904
- - `DD_AGENT_HOST`: Hostname of agent to where traces will be sent. See [Tracer settings](#tracer-settings) for more details.
1905
- - `DD_ENV`: Your application environment. See [Environment and tags](#environment-and-tags) for more details.
1906
- - `DD_LOGS_INJECTION`: Injects [Trace Correlation](#trace-correlation) information into Rails logs, if present. Supports the default logger (`ActiveSupport::TaggedLogging`), `lograge`, and `semantic_logger`. Valid values are: `true` (default) or `false`. e.g. `DD_LOGS_INJECTION=false`.
1907
- - `DD_PROPAGATION_STYLE_EXTRACT`: Distributed tracing header formats to extract. See [Distributed Tracing](#distributed-tracing) for more details.
1908
- - `DD_PROPAGATION_STYLE_INJECT`: Distributed tracing header formats to inject. See [Distributed Tracing](#distributed-tracing) for more details.
1909
- - `DD_SERVICE`: Your application's default service name. See [Environment and tags](#environment-and-tags) for more details.
1910
- - `DD_TAGS`: Custom tags for telemetry produced by your application. See [Environment and tags](#environment-and-tags) for more details.
1911
- - `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.tracing.instrument :integration }`).on code. This environment variable can only be used to disable an integration.
1912
- - `DD_TRACE_AGENT_PORT`: Port to where traces will be sent. See [Tracer settings](#tracer-settings) for more details.
1913
- - `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`.
1914
- - `DD_TRACE_ANALYTICS_ENABLED`: Enables or disables trace analytics. See [Sampling](#sampling) for more details.
1915
- - `DD_TRACE_RATE_LIMIT`: Sets a rate limit for sampling. See [Sampling](#sampling) for more details.
1916
- - `DD_TRACE_REPORT_HOSTNAME`: Enables ot disables hostname tags on traces.
1917
- - `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.
1918
- - `DD_TRACE_TEST_MODE_ENABLED`: Enables or disables test mode, for use of tracing in test suites.
1919
- - `DD_VERSION`: Your application version. See [Environment and tags](#environment-and-tags) for more details.
1920
-
1921
- ### Global settings
1974
+ To change the default behavior of Datadog tracing, you can set environment variables, or provide custom options inside a `Datadog.configure` block, e.g.:
1922
1975
 
1923
1976
  ```ruby
1924
- # config/initializers/datadog-tracer.rb
1925
1977
  Datadog.configure do |c|
1926
- c.agent.host = 'custom-agent-host'
1927
- c.agent.port = 8126
1928
- end
1929
- ```
1930
-
1931
- Available options are:
1932
-
1933
- - `agent.host`: set the hostname of the trace agent. Defaults to `127.0.0.1`.
1934
- - `agent.port`: set the APM TCP port the Datadog Agent listening on. Defaults to `8126`.
1978
+ c.service = 'billing-api'
1979
+ c.env = ENV['RACK_ENV']
1980
+
1981
+ c.tracing.report_hostname = true
1982
+ c.tracing.test_mode.enabled = (ENV['RACK_ENV'] == 'test')
1983
+ end
1984
+ ```
1985
+
1986
+ **Available configuration options:**
1987
+
1988
+ | Setting | Env Var | Default | Description |
1989
+ |---------------------------------------------------------|--------------------------------|-------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
1990
+ | **Global** | | | |
1991
+ | `agent.host` | `DD_AGENT_HOST` | `127.0.0.1` | Hostname of agent to where trace data will be sent. |
1992
+ | `agent.port` | `DD_TRACE_AGENT_PORT` | `8126` | Port of agent host to where trace data will be sent. |
1993
+ | | `DD_TRACE_AGENT_URL` | `nil` | Sets the URL endpoint where traces are sent. Has priority over `agent.host` and `agent.port`. |
1994
+ | `diagnostics.debug` | `DD_TRACE_DEBUG` | `false` | Enables or disables debug mode. Prints verbose logs. **NOT recommended for production or other sensitive environments.** See [Debugging and diagnostics](#debugging-and-diagnostics) for more details. |
1995
+ | `diagnostics.startup_logs.enabled` | `DD_TRACE_STARTUP_LOGS` | `nil` | Prints startup configuration and diagnostics to log. For assessing state of tracing at application startup. See [Debugging and diagnostics](#debugging-and-diagnostics) for more details. |
1996
+ | `env` | `DD_ENV` | `nil` | Your application environment. (e.g. `production`, `staging`, etc.) This value is set as a tag on all traces. |
1997
+ | `service` | `DD_SERVICE` | *Ruby filename* | Your application's default service name. (e.g. `billing-api`) This value is set as a tag on all traces. |
1998
+ | `tags` | `DD_TAGS` | `nil` | Custom tags in value pairs separated by `,` (e.g. `layer:api,team:intake`) These tags are set on all traces. See [Environment and tags](#environment-and-tags) for more details. |
1999
+ | `time_now_provider` | | `->{ Time.now }` | Changes how time is retrieved. See [Setting the time provider](#Setting the time provider) for more details. |
2000
+ | `version` | `DD_VERSION` | `nil` | Your application version (e.g. `2.5`, `202003181415`, `1.3-alpha`, etc.) This value is set as a tag on all traces. |
2001
+ | **Tracing** | | | |
2002
+ | `tracing.analytics.enabled` | `DD_TRACE_ANALYTICS_ENABLED` | `nil` | Enables or disables trace analytics. See [Sampling](#sampling) for more details. |
2003
+ | `tracing.distributed_tracing.propagation_extract_style` | `DD_PROPAGATION_STYLE_EXTRACT` | `['Datadog','B3','B3 single header']` | Distributed tracing header formats to extract. See [Distributed Tracing](#distributed-tracing) for more details. |
2004
+ | `tracing.distributed_tracing.propagation_inject_style` | `DD_PROPAGATION_STYLE_INJECT` | `['Datadog']` | Distributed tracing header formats to inject. See [Distributed Tracing](#distributed-tracing) for more details. |
2005
+ | `tracing.enabled` | `DD_TRACE_ENABLED` | `true` | Enables or disables tracing. If set to `false` instrumentation will still run, but no traces are sent to the trace agent. |
2006
+ | `tracing.instrument(<integration-name>, <options...>)` | | | Activates instrumentation for a specific library. See [Integration instrumentation](#integration-instrumentation) for more details. |
2007
+ | `tracing.log_injection` | `DD_LOGS_INJECTION` | `true` | Injects [Trace Correlation](#trace-correlation) information into Rails logs if present. Supports the default logger (`ActiveSupport::TaggedLogging`), `lograge`, and `semantic_logger`. |
2008
+ | `tracing.partial_flush.enabled` | | `false` | Enables or disables partial flushing. Partial flushing submits completed portions of a trace to the agent. Used when tracing instruments long running tasks (e.g. jobs) with many spans. |
2009
+ | `tracing.partial_flush.min_spans_threshold` | | `500` | The number of spans that must be completed in a trace before partial flushing submits those completed spans. |
2010
+ | `tracing.sampler` | | `nil` | Advanced usage only. Sets a custom `Datadog::Tracing::Sampling::Sampler` instance. If provided, the tracer will use this sampler to determine sampling behavior. See [Application-side sampling](#application-side-sampling) for details. |
2011
+ | `tracing.sampling.default_rate` | `DD_TRACE_SAMPLE_RATE` | `nil` | Sets the trace sampling rate between `0.0` (0%) and `1.0` (100%). See [Application-side sampling](#application-side-sampling) for details. |
2012
+ | `tracing.sampling.rate_limit` | `DD_TRACE_RATE_LIMIT` | `100` (per second) | Sets a maximum number of traces per second to sample. Set a rate limit to avoid the ingestion volume overages in the case of traffic spikes. |
2013
+ | `tracing.report_hostname` | `DD_TRACE_REPORT_HOSTNAME` | `false` | Adds hostname tag to traces. |
2014
+ | `tracing.test_mode.enabled` | `DD_TRACE_TEST_MODE_ENABLED` | `false` | Enables or disables test mode, for use of tracing in test suites. |
2015
+ | `tracing.test_mode.trace_flush` | | `nil` | Object that determines trace flushing behavior. |
1935
2016
 
1936
2017
  #### Custom logging
1937
2018
 
@@ -1953,9 +2034,7 @@ Datadog.logger.info { "this is typically called by tracing code" }
1953
2034
 
1954
2035
  #### Environment and tags
1955
2036
 
1956
- By default, the trace agent (not this library, but the program running in the background collecting data from various clients) uses the tags set in the agent config file, see our [environments tutorial](https://app.datadoghq.com/apm/docs/tutorials/environments) for details.
1957
-
1958
- You can configure the application to automatically tag your traces and metrics, using the following environment variables:
2037
+ By default, the trace agent (not this library, but the program running in the background collecting data from various clients) uses the tags set in the agent config file. You can configure the application to automatically tag your traces and metrics, using the following environment variables:
1959
2038
 
1960
2039
  - `DD_ENV`: Your application environment (e.g. `production`, `staging`, etc.)
1961
2040
  - `DD_SERVICE`: Your application's default service name (e.g. `billing-api`)
@@ -1981,73 +2060,43 @@ Tags can also be set directly on individual spans, which will supersede any conf
1981
2060
 
1982
2061
  #### Debugging and diagnostics
1983
2062
 
1984
- You can activate debugging features by using `Datadog.configure`:
2063
+ There are two different suggested means of producing diagnostics for tracing:
1985
2064
 
1986
- ```ruby
1987
- # config/initializers/datadog-tracer.rb
2065
+ ##### Enabling debug mode
1988
2066
 
1989
- # Global settings are set here:
1990
- Datadog.configure do |c|
1991
- # To enable debug mode
1992
- c.diagnostics.debug = true
1993
- end
1994
- ```
2067
+ Switching the library into debug mode will produce verbose, detailed logs about tracing activity, including any suppressed errors. This output can be helpful in identifying errors, or confirming trace output to the agent.
1995
2068
 
1996
- Available options are:
2069
+ You can enable this via `diagnostics.debug = true` or `DD_TRACE_DEBUG`.
1997
2070
 
1998
- - `diagnostics.debug`: set to true to enable debug logging. Can be configured through the `DD_TRACE_DEBUG` environment variable. Defaults to `false`.
1999
- - `diagnostics.startup_logs.enabled`: Startup configuration and diagnostic log. Defaults to `true`. Can be configured through the `DD_TRACE_STARTUP_LOGS` environment variable.
2000
- - `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 }`.
2001
-
2002
- ### Tracer settings
2071
+ ```ruby
2072
+ Datadog.configure { |c| c.diagnostics.debug = true }
2073
+ ```
2003
2074
 
2004
- To change the default behavior of the Datadog tracer, you can provide custom options inside the `Datadog.configure` block as in:
2075
+ **We do NOT recommend use of this feature in production or other sensitive environments**, as it can be very verbose under load. It's best to use this in a controlled environment where you can control application load.
2005
2076
 
2006
- ```ruby
2007
- # config/initializers/datadog-tracer.rb
2008
- # Tracer settings are set here:
2009
- Datadog.configure do |c|
2010
- c.tracing.enabled = true
2077
+ ##### Enabling startup logs
2011
2078
 
2012
- # Ensure all traces are ingested by Datadog
2013
- c.tracing.sampling.default_rate = 1.0 # Recommended
2014
- c.tracing.sampling.rate_limit = 200
2015
- # or provide a custom implementation (overrides c.tracing.sampling settings)
2016
- c.tracing.sampler = Datadog::Tracing::Sampling::AllSampler.new
2079
+ Startup logs produce a report of tracing state when the application is initially configured. This can be helpful for confirming that configuration and instrumentation is activated correctly.
2017
2080
 
2018
- # Breaks down very large traces into smaller batches
2019
- c.tracing.partial_flush.enabled = false
2081
+ You can enable this via `diagnostics.startup_logs.enabled = true` or `DD_TRACE_STARTUP_LOGS`.
2020
2082
 
2021
- # You can specify your own tracer
2022
- c.tracing.instance = Datadog::Tracing::Tracer.new
2023
- end
2083
+ ```ruby
2084
+ Datadog.configure { |c| c.diagnostics.startup_logs.enabled = true }
2024
2085
  ```
2025
2086
 
2026
- Available options are:
2027
-
2028
- - `tracing.log_injection`: Injects [Trace Correlation](#trace-correlation) information into Rails logs, if present. Defaults to `true`.
2029
- - `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.
2030
- - `sampling.rate_limit`: maximum number of traces per second to sample. Defaults to 100 per second.
2031
- - `tracing.enabled`: defines if the `tracer` is enabled or not. If set to `false` instrumentation will still run, but no spans are sent to the trace agent. Can be configured through the `DD_TRACE_ENABLED` environment variable. Defaults to `true`.
2032
- - `tracing.instance`: set to a custom `Datadog::Tracer` instance. If provided, other trace settings are ignored (you must configure it manually.)
2033
- - `tracing.partial_flush.enabled`: set to `true` to enable partial trace flushing (for long running traces.) Disabled by default. *Experimental.*
2034
- - `tracing.sampler`: set to a custom `Datadog::Sampler` instance. If provided, the tracer will use this sampler to determine sampling behavior.
2087
+ By default, this will be activated whenever `ddtrace` detects the application is running in a non-development environment.
2035
2088
 
2036
2089
  ### Sampling
2037
2090
 
2038
- 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/).
2039
-
2040
- We recommend setting the environment variable `DD_TRACE_SAMPLE_RATE=1.0` in all new applications using `ddtrace`.
2041
-
2042
- App Analytics, previously configured with the `tracing.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/).
2043
-
2044
2091
  #### Application-side sampling
2045
2092
 
2046
2093
  While the trace agent can sample traces to reduce bandwidth usage, application-side sampling reduces the performance overhead.
2047
2094
 
2048
- This will **reduce visibility and is not recommended**. See [DD_TRACE_SAMPLE_RATE](#environment-variables) for the recommended sampling approach.
2095
+ The default sampling rate can be set between `0.0` (0%) and `1.0` (100%). Configure the rate in order to control the volume of traces sent to Datadog. When this configuration is not set, the Datadog agent will distribute a default sampling rate of 10 traces per second.
2096
+
2097
+ Set this value via `DD_TRACE_SAMPLE_RATE` or `Datadog.configure { |c| c.tracing.sampling.default_rate = <value> }`.
2049
2098
 
2050
- `Datadog::Tracing::Sampling::RateSampler` samples a ratio of the traces. For example:
2099
+ Alternatively, you may provide your own sampler. The `Datadog::Tracing::Sampling::RateSampler` samples a ratio of the traces. For example:
2051
2100
 
2052
2101
  ```ruby
2053
2102
  # Sample rate is between 0 (nothing sampled) to 1 (everything sampled).
@@ -2058,6 +2107,8 @@ Datadog.configure do |c|
2058
2107
  end
2059
2108
  ```
2060
2109
 
2110
+ See [Additional Configuration](#additional-configuration) for more details about these settings.
2111
+
2061
2112
  #### Priority sampling
2062
2113
 
2063
2114
  Priority sampling decides whether to keep a trace by using a priority attribute propagated for distributed traces. Its value indicates to the Agent and the backend about how important the trace is.
@@ -2407,11 +2458,28 @@ Datadog::Tracing.trace('my.operation') { logger.warn('This is a traced operation
2407
2458
 
2408
2459
  ### Configuring the transport layer
2409
2460
 
2410
- By default, the tracer submits trace data using the Unix socket `/var/run/datadog/apm.socket`, if one is created by the Agent. Otherwise, it connects via HTTP to `127.0.0.1:8126`, the default TCP location the Agent listens on.
2461
+ By default, `ddtrace` will connect to the agent using the first available settings in the listed priority:
2462
+
2463
+ 1. Via any explicitly provided configuration settings (hostname/port/transport)
2464
+ 2. Via Unix Domain Socket (UDS) located at `/var/run/datadog/apm.socket`
2465
+ 3. Via HTTP over TCP to `127.0.0.1:8126`
2411
2466
 
2412
2467
  However, the tracer can be configured to send its trace data to alternative destinations, or by alternative protocols.
2413
2468
 
2414
- Some basic settings, such as hostname and port, can be configured using [tracer settings](#tracer-settings).
2469
+ #### Changing default agent hostname and port
2470
+
2471
+ To change the agent host or port, provide `DD_AGENT_HOST` and `DD_TRACE_AGENT_PORT`.
2472
+
2473
+ OR within a `Datadog.configure` block, provide the following settings:
2474
+
2475
+ ```ruby
2476
+ Datadog.configure do |c|
2477
+ c.agent.host = '127.0.0.1'
2478
+ c.agent.port = 8126
2479
+ end
2480
+ ```
2481
+
2482
+ See [Additional Configuration](#additional-configuration) for more details.
2415
2483
 
2416
2484
  #### Using the Net::HTTP adapter
2417
2485
 
@@ -2426,7 +2494,7 @@ Datadog.configure do |c|
2426
2494
  end
2427
2495
  ```
2428
2496
 
2429
- #### Using the Unix socket adapter
2497
+ #### Using the Unix Domain Socket (UDS) adapter
2430
2498
 
2431
2499
  The `UnixSocket` adapter submits traces using `Net::HTTP` over Unix socket.
2432
2500
 
@@ -2472,6 +2540,23 @@ Datadog.configure do |c|
2472
2540
  end
2473
2541
  ```
2474
2542
 
2543
+ ### Setting the time provider
2544
+
2545
+ By default, tracing uses a monotonic clock to measure the duration of spans, and timestamps (`->{ Time.now }`) for the start and end time.
2546
+
2547
+ When testing, it might be helpful to use a different time provider.
2548
+
2549
+ To change the function that provides timestamps, configure the following:
2550
+
2551
+ ```ruby
2552
+ Datadog.configure do |c|
2553
+ # For Timecop, for example, `->{ Time.now_without_mock_time }` allows the tracer to use the real wall time.
2554
+ c.time_now_provider = -> { Time.now_without_mock_time }
2555
+ end
2556
+ ```
2557
+
2558
+ Span duration calculation will still use the system monotonic clock when available, thus not being affected by this setting.
2559
+
2475
2560
  ### Metrics
2476
2561
 
2477
2562
  The tracer and its integrations can produce some additional metrics that can provide useful insight into the performance of your application. These metrics are collected with `dogstatsd-ruby`, and can be sent to the same Datadog agent to which you send your traces.
@@ -2525,7 +2610,7 @@ In addition, all metrics include the following tags:
2525
2610
 
2526
2611
  ### OpenTracing
2527
2612
 
2528
- For setting up Datadog with OpenTracing, see out [Quickstart for OpenTracing](#quickstart-for-opentracing) section for details.
2613
+ For setting up Datadog with OpenTracing, see our [Configuring OpenTracing](#configuring-opentracing) section for details.
2529
2614
 
2530
2615
  **Configuring Datadog tracer settings**
2531
2616
 
@@ -2536,7 +2621,7 @@ The underlying Datadog tracer can be configured by passing options (which match
2536
2621
  OpenTracing.global_tracer = Datadog::OpenTracer::Tracer.new(**options)
2537
2622
  ```
2538
2623
 
2539
- It can also be configured by using `Datadog.configure` described in the [Tracer settings](#tracer-settings) section.
2624
+ It can also be configured by using `Datadog.configure` described in the [Additional Configuration](#additional-configuration) section.
2540
2625
 
2541
2626
  **Activating and configuring integrations**
2542
2627
 
@@ -2578,11 +2663,11 @@ Without this flag, profiles for short-lived Resque jobs will not be available as
2578
2663
 
2579
2664
  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.
2580
2665
 
2581
- If traces are missing, enable [debug mode](#tracer-settings) to check if messages containing `"Dropping trace. Payload too large"` are logged.
2666
+ If traces are missing, enable [debug mode](#debugging-and-diagnostics) to check if messages containing `"Dropping trace. Payload too large"` are logged.
2582
2667
 
2583
- 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.
2668
+ 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.
2584
2669
 
2585
- 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.
2670
+ If you have confirmed that traces are dropped due to large payloads, then enable the [partial_flush](#additional-configuration) setting to break down large traces into smaller chunks.
2586
2671
 
2587
2672
  ### Stack level too deep
2588
2673
 
@@ -2592,7 +2677,7 @@ In Ruby version 1.9.3 and earlier, "monkey-patching" often involved the use of [
2592
2677
 
2593
2678
  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.
2594
2679
 
2595
- 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.
2680
+ Datadog instrumentation almost exclusively uses the `Module#prepend` feature to add instrumentation non-destructively. However, some other 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.
2596
2681
 
2597
2682
  As the implementation of `alias_method` exists within those libraries, Datadog generally cannot fix them. However, some libraries have known workarounds:
2598
2683