Skip to content

Commit 58baa5c

Browse files
jlledomeguzki
andauthored
THREESCALE-9682: Add support for OpenTelemetry (#405)
* Install OpenTelemetry gems * Add support for OpenTelemetry * Add env var to enable otel `CONFIG_OPENTELEMETRY_ENABLED` --------- Co-authored-by: Eguzki Astiz Lezaun <[email protected]>
1 parent 385ea14 commit 58baa5c

File tree

7 files changed

+62
-0
lines changed

7 files changed

+62
-0
lines changed

Gemfile

+3
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,9 @@ gem 'redis-namespace', '~>1.8'
6161
gem 'rack', '~> 2.2.8'
6262
gem 'sinatra', '~> 2.2.4'
6363
gem 'sinatra-contrib', '~> 2.2.4'
64+
gem "opentelemetry-sdk", "~> 1.5"
65+
gem "opentelemetry-instrumentation-sinatra", "~> 0.24.1"
66+
gem "opentelemetry-exporter-otlp", "~> 0.29.0"
6467
# Optional external error logging services
6568
gem 'bugsnag', '~> 6', require: nil
6669
gem 'yabeda-prometheus', '~> 0.5.0'

Gemfile.lock

+38
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,11 @@ GEM
100100
fiber-annotation (0.2.0)
101101
fiber-local (1.0.0)
102102
gli (2.16.1)
103+
google-protobuf (4.28.0)
104+
bigdecimal
105+
rake (>= 13)
106+
googleapis-common-protos-types (1.15.0)
107+
google-protobuf (>= 3.18, < 5.a)
103108
hiredis-client (0.22.1)
104109
redis-client (= 0.22.1)
105110
i18n (1.14.5)
@@ -134,6 +139,36 @@ GEM
134139
mini_portile2 (~> 2.8.2)
135140
racc (~> 1.4)
136141
openssl (3.2.0)
142+
opentelemetry-api (1.4.0)
143+
opentelemetry-common (0.21.0)
144+
opentelemetry-api (~> 1.0)
145+
opentelemetry-exporter-otlp (0.29.0)
146+
google-protobuf (>= 3.18)
147+
googleapis-common-protos-types (~> 1.3)
148+
opentelemetry-api (~> 1.1)
149+
opentelemetry-common (~> 0.20)
150+
opentelemetry-sdk (~> 1.2)
151+
opentelemetry-semantic_conventions
152+
opentelemetry-instrumentation-base (0.22.6)
153+
opentelemetry-api (~> 1.0)
154+
opentelemetry-common (~> 0.21)
155+
opentelemetry-registry (~> 0.1)
156+
opentelemetry-instrumentation-rack (0.24.6)
157+
opentelemetry-api (~> 1.0)
158+
opentelemetry-instrumentation-base (~> 0.22.1)
159+
opentelemetry-instrumentation-sinatra (0.24.1)
160+
opentelemetry-api (~> 1.0)
161+
opentelemetry-instrumentation-base (~> 0.22.1)
162+
opentelemetry-instrumentation-rack (~> 0.21)
163+
opentelemetry-registry (0.3.1)
164+
opentelemetry-api (~> 1.1)
165+
opentelemetry-sdk (1.5.0)
166+
opentelemetry-api (~> 1.1)
167+
opentelemetry-common (~> 0.20)
168+
opentelemetry-registry (~> 0.2)
169+
opentelemetry-semantic_conventions
170+
opentelemetry-semantic_conventions (1.10.1)
171+
opentelemetry-api (~> 1.0)
137172
pkg-config (1.1.9)
138173
power_assert (2.0.3)
139174
process-metrics (0.2.1)
@@ -276,6 +311,9 @@ DEPENDENCIES
276311
license_finder (~> 7.0)
277312
mocha (~> 1.3)
278313
nokogiri (~> 1.16.5)
314+
opentelemetry-exporter-otlp (~> 0.29.0)
315+
opentelemetry-instrumentation-sinatra (~> 0.24.1)
316+
opentelemetry-sdk (~> 1.5)
279317
pkg-config (~> 1.1.7)
280318
pry (~> 0.14)
281319
pry-byebug (~> 3)

docs/configuration.md

+9
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ variables.
1010
- [Integration with Porta](#integration-with-porta)
1111
- [Logging](#logging)
1212
- [Prometheus metrics](#prometheus-metrics)
13+
- [OpenTelemetry](#opentelemetry)
1314
- [Feature flags](#feature-flags)
1415
- [Async](#async)
1516
- [Performance](#performance)
@@ -356,6 +357,14 @@ print the logs in both formats.
356357
- Applies to: worker.
357358
- Format: integer.
358359

360+
## OpenTelemetry
361+
362+
### CONFIG_OPENTELEMETRY_ENABLED
363+
364+
- Enables OpenTelemetry instrumentation
365+
- Optional. Defaults to `false`.
366+
- Applies to: listener.
367+
- Format: `true` or `false`.
359368

360369
## Feature flags
361370

lib/3scale/backend/configuration.rb

+1
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ def parse_int(value, default)
4949
config.add_section(:internal_api, :user, :password)
5050
config.add_section(:master, :metrics)
5151
config.add_section(:worker_prometheus_metrics, :enabled, :port)
52+
config.add_section(:opentelemetry, :enabled)
5253

5354
config.add_section(
5455
:async_worker,

lib/3scale/backend/opentelemetry.rb

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
require 'opentelemetry/sdk'
2+
require 'opentelemetry/instrumentation/sinatra'
3+
require 'opentelemetry-exporter-otlp'
4+
require '3scale/backend/configuration'
5+
6+
OpenTelemetry::SDK.configure do |c|
7+
c.service_name = '3scale-backend'
8+
c.use 'OpenTelemetry::Instrumentation::Sinatra'
9+
end if ThreeScale::Backend.configuration.opentelemetry.enabled

lib/3scale/backend/server.rb

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
require '3scale/backend/util'
2+
require '3scale/backend/opentelemetry'
23

34
module ThreeScale
45
module Backend

openshift/3scale_backend.conf

+1
Original file line numberDiff line numberDiff line change
@@ -74,4 +74,5 @@ ThreeScale::Backend.configure do |config|
7474
config.async_worker.max_pending_jobs = parse_int_env('CONFIG_ASYNC_WORKER_MAX_PENDING_JOBS')
7575
config.async_worker.seconds_before_fetching_more = parse_int_env('CONFIG_ASYNC_WORKER_WAIT_SECONDS_FETCHING')
7676
config.legacy_referrer_filters = parse_boolean_env('CONFIG_LEGACY_REFERRER_FILTERS')
77+
config.opentelemetry.enabled = parse_boolean_env('CONFIG_OPENTELEMETRY_ENABLED')
7778
end

0 commit comments

Comments
 (0)