Custom Instrumentation of Ruby Applications with the OpenTelemetry API
Support for custom instrumenting your application using the OpenTelemetry API and sending the spans to Datadog is in beta.
If your code is custom instrumented with the OpenTelemetry (OTel) API, you can configure it to generate Datadog-style spans and traces to be processed by the Datadog tracing library for your language, and send those to Datadog.
The Datadog tracing library, when configured as described here, accepts the spans and traces generated by OTel-instrumented code, processes the telemetry, and sends it to Datadog. You can use this approach, for example, if your code has already been instrumented with the OTel API, or if you want to instrument using the OTel API, and you want to gain the benefits of using the Datadog tracing libraries without changing your code.
If you’re looking for a way to instrument your code with OpenTelemetry and then send span data to Datadog without going through the Datadog tracing library, see OpenTelemetry in Datadog.
Requirements and limitations
- Datadog Ruby tracing library
dd-trace-rb
version 1.9.0 or greater. - Gem version support 1.1.0 or greater.
The following OTel features implemented in the Datadog library as noted:
Configuring OTel to use the Datadog tracing library
Add your desired manual OTel instrumentation to your Ruby code following the OTel Ruby Manual Instrumentation documentation.
Add the ddtrace
gem to your Gemfile:
source 'https://rubygems.org'
gem 'ddtrace'
Install the gem by running bundle install
.
Add the following lines to your OpenTelemetry configuration file:
require 'opentelemetry'
require 'datadog/opentelemetry'
Add a configuration block to your application where you can activate integrations and change tracer settings. Without additional configuration here, only code you have instrumented with OTel is traced:
Datadog.configure do |c|
...
end
Using this block you can:
Datadog combines these OpenTelemetry spans with other Datadog APM spans into a single trace of your application. It supports integration instrumentation and OpenTelemetry Automatic instrumentation also.
Further Reading
Additional helpful documentation, links, and articles: