sentry-opentelemetry 6.3.1 → 6.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/sentry/opentelemetry/configuration.rb +33 -0
- data/lib/sentry/opentelemetry/otlp_propagator.rb +31 -0
- data/lib/sentry/opentelemetry/otlp_setup.rb +75 -0
- data/lib/sentry/opentelemetry/version.rb +1 -1
- data/lib/sentry-opentelemetry.rb +1 -0
- data/sentry-opentelemetry.gemspec +1 -1
- metadata +11 -8
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: daa7a9bda91b8495497e7f2d8df45011f9a69b436156ec15e1d03bc6631b8b06
|
|
4
|
+
data.tar.gz: c3d64746ab277a28c149e9aaeb1a4c6e80aa9379f13cdc3a004845cac7dd8edd
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: cf620bf63c5f2164bac179a53890d59b08f702d8c648337794a693d9da4f8c8f2bd2d7e88a2e19ddc7ca7adc229327ad25ba892719988350a2a0e5bd5909bb38
|
|
7
|
+
data.tar.gz: f542e467b5245b2d30198baeddcd001a716170e79aa91d68cd136787717a2e65c751b6fcbc805464318b76a9309528806388d166e1fd46e699c96245865dfe95
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "sentry/opentelemetry/otlp_setup"
|
|
4
|
+
|
|
5
|
+
module Sentry
|
|
6
|
+
class Configuration
|
|
7
|
+
# OTLP related configuration.
|
|
8
|
+
# @return [OTLP::Configuration]
|
|
9
|
+
attr_reader :otlp
|
|
10
|
+
|
|
11
|
+
after(:initialize) do
|
|
12
|
+
@otlp = OTLP::Configuration.new
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
after(:configured) do
|
|
16
|
+
Sentry::OpenTelemetry::OTLPSetup.setup(self) if otlp.enabled
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
module OTLP
|
|
21
|
+
class Configuration
|
|
22
|
+
attr_accessor :enabled
|
|
23
|
+
attr_accessor :setup_otlp_traces_exporter
|
|
24
|
+
attr_accessor :setup_propagator
|
|
25
|
+
|
|
26
|
+
def initialize
|
|
27
|
+
@enabled = false
|
|
28
|
+
@setup_otlp_traces_exporter = true
|
|
29
|
+
@setup_propagator = true
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Sentry
|
|
4
|
+
module OpenTelemetry
|
|
5
|
+
class OTLPPropagator < Propagator
|
|
6
|
+
def inject(
|
|
7
|
+
carrier,
|
|
8
|
+
context: ::OpenTelemetry::Context.current,
|
|
9
|
+
setter: ::OpenTelemetry::Context::Propagation.text_map_setter
|
|
10
|
+
)
|
|
11
|
+
span_context = ::OpenTelemetry::Trace.current_span(context).context
|
|
12
|
+
return unless span_context.valid?
|
|
13
|
+
|
|
14
|
+
setter.set(carrier, SENTRY_TRACE_HEADER_NAME, to_sentry_trace(span_context))
|
|
15
|
+
|
|
16
|
+
baggage = context[SENTRY_BAGGAGE_KEY]
|
|
17
|
+
if baggage.is_a?(Sentry::Baggage)
|
|
18
|
+
baggage_string = baggage.serialize
|
|
19
|
+
setter.set(carrier, BAGGAGE_HEADER_NAME, baggage_string) unless baggage_string&.empty?
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
private
|
|
24
|
+
|
|
25
|
+
def to_sentry_trace(span_context)
|
|
26
|
+
sampled = span_context.trace_flags.sampled? ? "1" : "0"
|
|
27
|
+
"#{span_context.hex_trace_id}-#{span_context.hex_span_id}-#{sampled}"
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
#
|
|
4
|
+
require "sentry/opentelemetry/otlp_propagator"
|
|
5
|
+
|
|
6
|
+
module Sentry
|
|
7
|
+
module OpenTelemetry
|
|
8
|
+
module OTLPSetup
|
|
9
|
+
USER_AGENT = "sentry-ruby.otlp/#{Sentry::VERSION}"
|
|
10
|
+
|
|
11
|
+
class << self
|
|
12
|
+
def setup(config)
|
|
13
|
+
@dsn = config.dsn
|
|
14
|
+
@sdk_logger = config.sdk_logger
|
|
15
|
+
log_debug("[OTLP] Setting up OTLP integration")
|
|
16
|
+
|
|
17
|
+
setup_external_propagation_context
|
|
18
|
+
setup_otlp_exporter if config.otlp.setup_otlp_traces_exporter
|
|
19
|
+
setup_sentry_propagator if config.otlp.setup_propagator
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
private
|
|
23
|
+
|
|
24
|
+
def log_debug(message)
|
|
25
|
+
@sdk_logger&.debug(message)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def log_warn(message)
|
|
29
|
+
@sdk_logger&.warn(message)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def setup_external_propagation_context
|
|
33
|
+
log_debug("[OTLP] Setting up trace linking for all events")
|
|
34
|
+
|
|
35
|
+
Sentry.register_external_propagation_context do
|
|
36
|
+
span_context = ::OpenTelemetry::Trace.current_span.context
|
|
37
|
+
span_context.valid? ? [span_context.hex_trace_id, span_context.hex_span_id] : nil
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def setup_otlp_exporter
|
|
42
|
+
return unless @dsn
|
|
43
|
+
|
|
44
|
+
log_debug("[OTLP] Setting up OTLP exporter")
|
|
45
|
+
|
|
46
|
+
begin
|
|
47
|
+
require "opentelemetry/exporter/otlp"
|
|
48
|
+
rescue LoadError
|
|
49
|
+
log_warn("[OTLP] opentelemetry-exporter-otlp gem is not installed. " \
|
|
50
|
+
"Please add it to your Gemfile to use the OTLP exporter.")
|
|
51
|
+
return
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
endpoint = "#{@dsn.server}#{@dsn.otlp_traces_endpoint}"
|
|
55
|
+
auth_header = @dsn.generate_auth_header(client: USER_AGENT)
|
|
56
|
+
|
|
57
|
+
log_debug("[OTLP] Sending traces to #{endpoint}")
|
|
58
|
+
|
|
59
|
+
exporter = ::OpenTelemetry::Exporter::OTLP::Exporter.new(
|
|
60
|
+
endpoint: endpoint,
|
|
61
|
+
headers: { "X-Sentry-Auth" => auth_header }
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
span_processor = ::OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(exporter)
|
|
65
|
+
::OpenTelemetry.tracer_provider.add_span_processor(span_processor)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def setup_sentry_propagator
|
|
69
|
+
log_debug("[OTLP] Setting up propagator for distributed tracing")
|
|
70
|
+
::OpenTelemetry.propagation = OTLPPropagator.new
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
data/lib/sentry-opentelemetry.rb
CHANGED
|
@@ -30,6 +30,6 @@ Gem::Specification.new do |spec|
|
|
|
30
30
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
31
31
|
spec.require_paths = ["lib"]
|
|
32
32
|
|
|
33
|
-
spec.add_dependency "sentry-ruby", "~> 6.
|
|
33
|
+
spec.add_dependency "sentry-ruby", "~> 6.4.0"
|
|
34
34
|
spec.add_dependency "opentelemetry-sdk", "~> 1.0"
|
|
35
35
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: sentry-opentelemetry
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 6.
|
|
4
|
+
version: 6.4.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Sentry Team
|
|
@@ -15,14 +15,14 @@ dependencies:
|
|
|
15
15
|
requirements:
|
|
16
16
|
- - "~>"
|
|
17
17
|
- !ruby/object:Gem::Version
|
|
18
|
-
version: 6.
|
|
18
|
+
version: 6.4.0
|
|
19
19
|
type: :runtime
|
|
20
20
|
prerelease: false
|
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
22
22
|
requirements:
|
|
23
23
|
- - "~>"
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
|
-
version: 6.
|
|
25
|
+
version: 6.4.0
|
|
26
26
|
- !ruby/object:Gem::Dependency
|
|
27
27
|
name: opentelemetry-sdk
|
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -55,19 +55,22 @@ files:
|
|
|
55
55
|
- bin/console
|
|
56
56
|
- bin/setup
|
|
57
57
|
- lib/sentry-opentelemetry.rb
|
|
58
|
+
- lib/sentry/opentelemetry/configuration.rb
|
|
59
|
+
- lib/sentry/opentelemetry/otlp_propagator.rb
|
|
60
|
+
- lib/sentry/opentelemetry/otlp_setup.rb
|
|
58
61
|
- lib/sentry/opentelemetry/propagator.rb
|
|
59
62
|
- lib/sentry/opentelemetry/span_processor.rb
|
|
60
63
|
- lib/sentry/opentelemetry/version.rb
|
|
61
64
|
- sentry-opentelemetry.gemspec
|
|
62
|
-
homepage: https://github.com/getsentry/sentry-ruby/tree/6.
|
|
65
|
+
homepage: https://github.com/getsentry/sentry-ruby/tree/6.4.0/sentry-opentelemetry
|
|
63
66
|
licenses:
|
|
64
67
|
- MIT
|
|
65
68
|
metadata:
|
|
66
|
-
homepage_uri: https://github.com/getsentry/sentry-ruby/tree/6.
|
|
67
|
-
source_code_uri: https://github.com/getsentry/sentry-ruby/tree/6.
|
|
68
|
-
changelog_uri: https://github.com/getsentry/sentry-ruby/blob/6.
|
|
69
|
+
homepage_uri: https://github.com/getsentry/sentry-ruby/tree/6.4.0/sentry-opentelemetry
|
|
70
|
+
source_code_uri: https://github.com/getsentry/sentry-ruby/tree/6.4.0/sentry-opentelemetry
|
|
71
|
+
changelog_uri: https://github.com/getsentry/sentry-ruby/blob/6.4.0/CHANGELOG.md
|
|
69
72
|
bug_tracker_uri: https://github.com/getsentry/sentry-ruby/issues
|
|
70
|
-
documentation_uri: http://www.rubydoc.info/gems/sentry-opentelemetry/6.
|
|
73
|
+
documentation_uri: http://www.rubydoc.info/gems/sentry-opentelemetry/6.4.0
|
|
71
74
|
rdoc_options: []
|
|
72
75
|
require_paths:
|
|
73
76
|
- lib
|