Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
3571707
chore(otel): add support for otel metrics [Part 1]
mabdinur Nov 4, 2025
2d64146
consolidate tests
mabdinur Nov 4, 2025
5ad9754
add support for exporting otlp
mabdinur Nov 4, 2025
9eb0a24
add docs and justify minimum supported versions
mabdinur Nov 5, 2025
d9cd08d
use testagent for otlp tests
mabdinur Nov 5, 2025
eb5c3a2
use default instead of default_proc in otel configs
mabdinur Nov 5, 2025
d6bbff9
consolidate agent resolutation logic
mabdinur Nov 5, 2025
4883393
simplify settings
mabdinur Nov 5, 2025
f1cb22c
clean up testagent helpers
mabdinur Nov 5, 2025
1818637
clean up docs
mabdinur Nov 5, 2025
2e8cdc1
Merge branch 'master' into munir/add-otel-metrics-configs
mabdinur Nov 5, 2025
060757d
clean up gemfile
mabdinur Nov 5, 2025
270a3e9
fix metric export timeout
mabdinur Nov 5, 2025
e138f38
use datadog_env
mabdinur Nov 5, 2025
2eefa81
make http protobuf the default
mabdinur Nov 6, 2025
65bcf2c
use agent resolver
mabdinur Nov 6, 2025
a894798
use opentelemetry configure
mabdinur Nov 6, 2025
c9abc8a
fix spacing
mabdinur Nov 6, 2025
94b46d8
fix spacing
mabdinur Nov 6, 2025
9f3751f
update config tests to validate the exporter that is set
mabdinur Nov 6, 2025
dc158de
track hostname
mabdinur Nov 6, 2025
fdc674b
clean up exporter init
mabdinur Nov 6, 2025
8fea838
break circular import
mabdinur Nov 6, 2025
88c8aee
run metrics tests everywhere
mabdinur Nov 6, 2025
9bcd1a9
Merge branch 'master' into munir/add-otel-metrics-configs
mabdinur Nov 7, 2025
31b7dd4
add version gating for unsupported ruby versions
mabdinur Nov 6, 2025
4c54c4e
clean up docker compose and docs
mabdinur Nov 13, 2025
074a638
update configs
mabdinur Nov 13, 2025
72d5b2f
Merge branch 'master' into munir/add-otel-metrics-configs
mabdinur Nov 15, 2025
9c4a9da
Merge 72d5b2f97cbdc7e5e4a381c2d4789edf6461a237 into 49cee89ecc8776876…
mabdinur Nov 15, 2025
9b876c4
[🤖] Lock Dependency: https://github.com/DataDog/dd-trace-rb/actions/r…
dd-apm-ecosystems-autobot[bot] Nov 15, 2025
4c04601
create an exporter to collect telemetry
mabdinur Nov 15, 2025
531565e
reduce min version 0.4.0
mabdinur Nov 16, 2025
cf17ae2
set default temporality to delta
mabdinur Nov 16, 2025
df81090
Merge cf17ae2fb01f3bb0da19c29e0085bbe0ba4e40bb into 49cee89ecc8776876…
mabdinur Nov 16, 2025
fc91825
[🤖] Lock Dependency: https://github.com/DataDog/dd-trace-rb/actions/r…
dd-apm-ecosystems-autobot[bot] Nov 16, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .env
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ DD_AGENT_HOST=testagent
DD_API_KEY=00000000000000000000000000000000
DD_METRIC_AGENT_PORT=8125
DD_TRACE_AGENT_PORT=9126
OTLP_HTTP_PORT=4318
OTLP_GRPC_PORT=4317

# Values are used for proxying from APM Test Agent to real Datadog Agent
DD_REAL_AGENT_HOST=ddagent
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/_unit_test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,8 @@ jobs:
TEST_MYSQL_HOST: mysql
DD_AGENT_HOST: agent
DD_TRACE_AGENT_PORT: '9126'
OTLP_GRPC_PORT: '4317'
OTLP_HTTP_PORT: '4318'
DATADOG_GEM_CI: 'true'
TEST_DATADOG_INTEGRATION: '1'
JRUBY_OPTS: "--dev" # Faster JVM startup: https://github.com/jruby/jruby/wiki/Improving-startup-time#use-the---dev-flag
Expand Down
6 changes: 6 additions & 0 deletions appraisal/ruby-3.1.rb
Original file line number Diff line number Diff line change
Expand Up @@ -169,18 +169,24 @@

appraise 'opentelemetry' do
gem 'opentelemetry-sdk', '~> 1.1'
gem 'opentelemetry-metrics-sdk', '>= 0.8'
gem 'opentelemetry-exporter-otlp-metrics', '>= 0.4'
end

appraise 'opentelemetry_otlp' do
gem 'opentelemetry-api', '< 1.5' # Context is kept in `Thread.current#[]`
gem 'opentelemetry-sdk', '~> 1.1'
gem 'opentelemetry-exporter-otlp'
gem 'opentelemetry-metrics-sdk', '>= 0.8'
gem 'opentelemetry-exporter-otlp-metrics', '>= 0.4'
end

appraise 'opentelemetry_otlp_1_5' do
gem 'opentelemetry-api', '>= 1.5' # Context is kept as instance variable in `Fiber.current`
gem 'opentelemetry-sdk', '~> 1.1'
gem 'opentelemetry-exporter-otlp'
gem 'opentelemetry-metrics-sdk', '>= 0.8'
gem 'opentelemetry-exporter-otlp-metrics', '>= 0.4'
end

appraise 'contrib-old' do
Expand Down
8 changes: 7 additions & 1 deletion appraisal/ruby-3.2.rb
Original file line number Diff line number Diff line change
Expand Up @@ -213,19 +213,25 @@
end

appraise 'opentelemetry' do
gem 'opentelemetry-sdk', '~> 1.1'
gem 'opentelemetry-sdk', '~> 1.2'
gem 'opentelemetry-metrics-sdk', '>= 0.8'
gem 'opentelemetry-exporter-otlp-metrics', '>= 0.4'
end

appraise 'opentelemetry_otlp' do
gem 'opentelemetry-api', '< 1.5' # Context is kept in `Thread.current#[]`
gem 'opentelemetry-sdk', '~> 1.1'
gem 'opentelemetry-exporter-otlp'
gem 'opentelemetry-metrics-sdk', '>= 0.8'
gem 'opentelemetry-exporter-otlp-metrics', '>= 0.4'
end

appraise 'opentelemetry_otlp_1_5' do
gem 'opentelemetry-api', '>= 1.5' # Context is kept as instance variable in `Fiber.current`
gem 'opentelemetry-sdk', '~> 1.1'
gem 'opentelemetry-exporter-otlp'
gem 'opentelemetry-metrics-sdk', '>= 0.8'
gem 'opentelemetry-exporter-otlp-metrics', '>= 0.4'
end

appraise 'contrib-old' do
Expand Down
6 changes: 6 additions & 0 deletions appraisal/ruby-3.3.rb
Original file line number Diff line number Diff line change
Expand Up @@ -216,18 +216,24 @@

appraise 'opentelemetry' do
gem 'opentelemetry-sdk', '~> 1.1'
gem 'opentelemetry-metrics-sdk', '>= 0.8'
gem 'opentelemetry-exporter-otlp-metrics', '>= 0.4'
end

appraise 'opentelemetry_otlp' do
gem 'opentelemetry-api', '< 1.5' # Context is kept in `Thread.current#[]`
gem 'opentelemetry-sdk', '~> 1.1'
gem 'opentelemetry-exporter-otlp'
gem 'opentelemetry-metrics-sdk', '>= 0.8'
gem 'opentelemetry-exporter-otlp-metrics', '>= 0.4'
end

appraise 'opentelemetry_otlp_1_5' do
gem 'opentelemetry-api', '>= 1.5' # Context is kept as instance variable in `Fiber.current`
gem 'opentelemetry-sdk', '~> 1.1'
gem 'opentelemetry-exporter-otlp'
gem 'opentelemetry-metrics-sdk', '>= 0.8'
gem 'opentelemetry-exporter-otlp-metrics', '>= 0.4'
end

appraise 'contrib-old' do
Expand Down
6 changes: 6 additions & 0 deletions appraisal/ruby-3.4.rb
Original file line number Diff line number Diff line change
Expand Up @@ -229,18 +229,24 @@

appraise 'opentelemetry' do
gem 'opentelemetry-sdk', '~> 1.1'
gem 'opentelemetry-metrics-sdk', '>= 0.8'
gem 'opentelemetry-exporter-otlp-metrics', '>= 0.4'
end

appraise 'opentelemetry_otlp' do
gem 'opentelemetry-api', '< 1.5' # Context is kept in `Thread.current#[]`
gem 'opentelemetry-sdk', '~> 1.1'
gem 'opentelemetry-exporter-otlp'
gem 'opentelemetry-metrics-sdk', '>= 0.8'
gem 'opentelemetry-exporter-otlp-metrics', '>= 0.4'
end

appraise 'opentelemetry_otlp_1_5' do
gem 'opentelemetry-api', '>= 1.5' # Context is kept as instance variable in `Fiber.current`
gem 'opentelemetry-sdk', '~> 1.1'
gem 'opentelemetry-exporter-otlp'
gem 'opentelemetry-metrics-sdk', '>= 0.8'
gem 'opentelemetry-exporter-otlp-metrics', '>= 0.4'
end

appraise 'contrib-old' do
Expand Down
6 changes: 6 additions & 0 deletions appraisal/ruby-3.5.rb
Original file line number Diff line number Diff line change
Expand Up @@ -175,18 +175,24 @@

appraise 'opentelemetry' do
gem 'opentelemetry-sdk', '~> 1.1'
gem 'opentelemetry-metrics-sdk', '>= 0.8'
gem 'opentelemetry-exporter-otlp-metrics', '>= 0.4'
end

appraise 'opentelemetry_otlp' do
gem 'opentelemetry-api', '< 1.5' # Context is kept in `Thread.current#[]`
gem 'opentelemetry-sdk', '~> 1.1'
gem 'opentelemetry-exporter-otlp'
gem 'opentelemetry-metrics-sdk', '>= 0.8'
gem 'opentelemetry-exporter-otlp-metrics', '>= 0.4'
end

appraise 'opentelemetry_otlp_1_5' do
gem 'opentelemetry-api', '>= 1.5' # Context is kept as instance variable in `Fiber.current`
gem 'opentelemetry-sdk', '~> 1.1'
gem 'opentelemetry-exporter-otlp'
gem 'opentelemetry-metrics-sdk', '>= 0.8'
gem 'opentelemetry-exporter-otlp-metrics', '>= 0.4'
end

appraise 'contrib-old' do
Expand Down
4 changes: 4 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,8 @@ services:
image: ghcr.io/datadog/dd-apm-test-agent/ddapm-test-agent:v1.37.0
ports:
- "127.0.0.1:${DD_TRACE_AGENT_PORT}:9126"
- "127.0.0.1:${OTLP_GRPC_PORT}:4317"
- "127.0.0.1:${OTLP_HTTP_PORT}:4318"
depends_on:
- ddagent
env_file: ./.env
Expand All @@ -271,6 +273,8 @@ services:
- TRACE_LANGUAGE=ruby
- DD_TRACE_AGENT_URL=http://${DD_REAL_AGENT_HOST}:${DD_REAL_AGENT_PORT}
- PORT=${DD_TRACE_AGENT_PORT}
- OTLP_GRPC_PORT=${OTLP_GRPC_PORT}
- OTLP_HTTP_PORT=${OTLP_HTTP_PORT}
- DD_POOL_TRACE_CHECK_FAILURES=true
- DD_DISABLE_ERROR_RESPONSES=true
- ENABLED_CHECKS=trace_content_length,trace_stall,meta_tracer_version_header,trace_count_header,trace_peer_service,trace_dd_service
Expand Down
51 changes: 48 additions & 3 deletions docs/OpenTelemetry.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
# OpenTelemetry

**Supported tracing frameworks**:
**Supported OpenTelemetry features**:

| Type | Documentation | datadog version | Gem version support |
| ------------- | ---------------------------------------------------- | --------------- | ------------------- |
| OpenTelemetry | https://github.com/open-telemetry/opentelemetry-ruby | 1.9.0+ | >= 1.1.0 |
| Tracing | https://github.com/open-telemetry/opentelemetry-ruby | 1.9.0+ | >= 1.1.0 |
| [Metrics SDK](https://rubygems.org/gems/opentelemetry-metrics-sdk) >= 0.8, [OTLP Metrics Exporter](https://rubygems.org/gems/opentelemetry-exporter-otlp-metrics) >= 0.4 |

## Configuring OpenTelemetry
## Configuring OpenTelemetry Tracing

1. Add the `datadog` gem to your Gemfile:

Expand Down Expand Up @@ -44,6 +45,50 @@

[Integration instrumentations](#integration-instrumentation) and OpenTelemetry [Automatic instrumentations](https://opentelemetry.io/docs/instrumentation/ruby/automatic/) are also supported.

## Configuring OpenTelemetry Metrics

1. Add required gems to your Gemfile:

```ruby
gem 'datadog'
gem 'opentelemetry-metrics-sdk', '>= 0.8'
gem 'opentelemetry-exporter-otlp-metrics', '>= 0.4'
```

1. Install gems with `bundle install`

1. Enable metrics export:

```ruby
# Set environment variable before initializing metrics support
ENV['DD_METRICS_OTEL_ENABLED'] = 'true'
require 'opentelemetry/sdk'
require 'opentelemetry-metrics-sdk'
require 'opentelemetry/exporter/otlp_metrics'
require 'datadog/opentelemetry'

Datadog.configure do |c|
# Configure Datadog settings if needed
end

# Initialize OpenTelemetry SDK (required for metrics)
OpenTelemetry::SDK.configure
```

1. Use the [OpenTelemetry Metrics API](https://opentelemetry.io/docs/languages/ruby/instrumentation/#metrics) to create and record metrics.

**Configuration Options:**

- `DD_METRICS_OTEL_ENABLED` - Enable metrics export (default: false)
- `OTEL_EXPORTER_OTLP_METRICS_PROTOCOL` - Protocol: `http/protobuf` (default); `grpc` and `http/json` are not yet supported.
- `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT` - Custom endpoint (defaults to the Datadog agent otlp endpoint)
- `OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE` - `delta` (default) or `cumulative`
- `OTEL_METRIC_EXPORT_INTERVAL` - Export interval in milliseconds (default: 10000)

[General OTLP settings](https://opentelemetry.io/docs/languages/sdk-configuration/otlp-exporter/) (`OTEL_EXPORTER_OTLP_*`) serve as defaults if metrics-specific settings are not provided.

**Note:** Minimum `opentelemetry-metrics-sdk` is v0.8.0 (contains critical bug fixes). Minimum `opentelemetry-exporter-otlp-metrics` is v0.4.0. Use the latest versions for best support. If an OpenTelemetry API breaking changes affect the `datadog` gem, [open a GitHub issue](https://github.com/DataDog/dd-trace-rb/issues).

## Limitations

There are a few limitations to OpenTelemetry Tracing when the APM integration is activated:
Expand Down
2 changes: 2 additions & 0 deletions gemfiles/ruby_3.1_opentelemetry.gemfile

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

25 changes: 22 additions & 3 deletions gemfiles/ruby_3.1_opentelemetry.gemfile.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions gemfiles/ruby_3.1_opentelemetry_otlp.gemfile

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 17 additions & 0 deletions gemfiles/ruby_3.1_opentelemetry_otlp.gemfile.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions gemfiles/ruby_3.1_opentelemetry_otlp_1_5.gemfile

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 17 additions & 0 deletions gemfiles/ruby_3.1_opentelemetry_otlp_1_5.gemfile.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 3 additions & 1 deletion gemfiles/ruby_3.2_opentelemetry.gemfile

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading