Enable Dynamic Instrumentation for Ruby
This product is not supported for your selected
Datadog site. (
).
このページは日本語には対応しておりません。随時翻訳に取り組んでいます。
翻訳に関してご質問やご意見ございましたら、
お気軽にご連絡ください。
Limited Availability
Dynamic Instrumentation for Ruby is in Limited Availability and may not be available for your organization.
Request access to join the waiting list.
Note: Some limitations apply.
Request AccessDynamic Instrumentation is a feature provided by the Datadog tracing library. If you are already using APM to collect traces for your application, ensure your Agent and tracing library are on the required version. Then, go directly to enabling Dynamic Instrumentation in step 4.
Requirements
Dynamic Instrumentation for Ruby has the following requirements:
- Ruby version: Ruby 2.6 or higher
- Ruby implementation: Only MRI (CRuby) is supported. JRuby and other Ruby implementations are not supported.
- Web framework: Only Rack-based applications are supported (including Rails, Sinatra, and other Rack-compatible frameworks). Background processes and jobs (including Sidekiq, Resque, etc.) are not supported.
- Environment:
RAILS_ENV or RACK_ENV must be set to production. Development environments are not supported.
Installation
- Install or upgrade your Agent to version 7.49.0 or higher.
- If you don’t already have APM enabled, in your Agent configuration, set the
DD_APM_ENABLED environment variable to true and listening to the port 8126/TCP. - Install or upgrade the Ruby tracing library to version 2.9.0 or higher, by following the relevant instructions.
- Run your service with Dynamic Instrumentation enabled by setting the
DD_DYNAMIC_INSTRUMENTATION_ENABLED environment variable to true. Specify DD_SERVICE, DD_ENV, and DD_VERSION Unified Service Tags so you can filter and group your instrumentations and target active clients across these dimensions. - After starting your service with Dynamic Instrumentation enabled, you can start using Dynamic Instrumentation on the APM > Dynamic Instrumentation page.
Note: Dynamic Instrumentation initializes when the application processes its first HTTP request. Ensure your application receives at least one request after startup before creating probes.
Configuration
Configure Dynamic Instrumentation using the following environment variables:
| Environment variable | Type | Description |
|---|
DD_DYNAMIC_INSTRUMENTATION_ENABLED | Boolean | Set to true to enable Dynamic Instrumentation. |
DD_SERVICE | String | The service name, for example, web-backend. |
DD_ENV | String | The environment name, for example, production. |
DD_VERSION | String | The version of your service. |
DD_TAGS | String | Tags to apply to produced data. Must be a list of <key>:<value> separated by commas such as: layer:api,team:intake. |
What to do next
See Dynamic Instrumentation for information about adding instrumentations and browsing and indexing the data.
Ruby-specific considerations
Instrumentable code
Line probes can only be placed on executable lines of code. The following example shows which lines can be targeted:
def example_method(param) # Cannot instrument (method definition)
if param == 1 # Can instrument
result = "yes" # Can instrument
else # Cannot instrument
result = "no" # Can instrument
end # Cannot instrument
result # Can instrument
end # Can instrument (method exit)
Lines that cannot be instrumented include method definition lines (def), else/elsif clauses, most end keywords (except the final end of a method), comment-only lines, and empty lines.
Expression language instance variable conflicts
Ruby’s use of @ for instance variables creates conflicts with Dynamic Instrumentation’s expression language special variables. The following variable names are reserved and cannot be accessed if used as instance variables in your Ruby code:
@return - The return value of the method@duration - Method execution duration@exception - Any exception raised by the method@it - Current item in collection operations@key - Current key in hash operations@value - Current value in hash operations
If your code uses instance variables with these names, rename them to use Dynamic Instrumentation expressions that reference them.
Code loading timing
Dynamic Instrumentation tracks code as it loads. For line probes to work correctly:
- Files must be loaded after the Datadog tracer initializes
- Code loaded before the tracer starts cannot be instrumented with line probes
- Method probes can still work for classes defined before tracking starts
- Best practice: Ensure the tracer initializes early in your application boot process
Supported features
Limitations
The following features available in other languages are not supported for Ruby:
- Dynamic Metrics
- Dynamic Spans
- Dynamic Span Tags
- Local variable capture for method probes (use line probes inside the method as a workaround)
Further reading