aspecto-opentelemetry-instrumentation-aws_sdk 0.3.0 → 0.4.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +0 -5
- data/README.md +3 -1
- data/lib/opentelemetry/instrumentation/aws_sdk/handler.rb +13 -2
- data/lib/opentelemetry/instrumentation/aws_sdk/instrumentation.rb +1 -0
- data/lib/opentelemetry/instrumentation/aws_sdk/message_attributes.rb +2 -2
- data/lib/opentelemetry/instrumentation/aws_sdk/messaging_helper.rb +25 -3
- data/lib/opentelemetry/instrumentation/aws_sdk/version.rb +1 -1
- metadata +13 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 95d4d75e7aadcb23fd58ef5019af051a4fdba63841745df7ff5add0a85bd3890
|
4
|
+
data.tar.gz: 67aa5a0bdc91a9233d2479d3660adbf757044507d74399018d3bed626969d389
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3df69697176d3e77a6d46c31e0b90541962adad99750732df99a145656abea32c53432a027e9bda69d8c981f0525c6ce7f85a6158987d02ea064ab6134cc6318
|
7
|
+
data.tar.gz: 72925545d9cea814ba2f6270404f6aacfe1a9773521b4391bb0ac58a909f3e81ec7a589301b8dc23800065ff1ed4f135e8ac41d57bc3c8e2d4fa0dd2ddea171a
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -20,6 +20,7 @@ To install the instrumentation, call `use` with the name of the instrumentation.
|
|
20
20
|
OpenTelemetry::SDK.configure do |c|
|
21
21
|
c.use 'OpenTelemetry::Instrumentation::AwsSdk', {
|
22
22
|
inject_messaging_context: true,
|
23
|
+
extract_messaging_context: true,
|
23
24
|
suppress_internal_instrumentation: true
|
24
25
|
}
|
25
26
|
end
|
@@ -58,7 +59,8 @@ Apache 2.0 license. See [LICENSE][license-github] for more information.
|
|
58
59
|
[aws-sdk-home]: https://github.com/aws/aws-sdk-ruby
|
59
60
|
[bundler-home]: https://bundler.io
|
60
61
|
[repo-github]: https://github.com/open-telemetry/opentelemetry-ruby
|
61
|
-
[license-github]: https://github.com/open-telemetry/opentelemetry-ruby
|
62
|
+
[license-github]: https://github.com/open-telemetry/opentelemetry-ruby/blob/main/LICENSE
|
62
63
|
[ruby-sig]: https://github.com/open-telemetry/community#ruby-sig
|
63
64
|
[community-meetings]: https://github.com/open-telemetry/community#community-meetings
|
64
65
|
[discussions-url]: https://github.com/open-telemetry/opentelemetry-ruby/discussions
|
66
|
+
|
@@ -30,8 +30,10 @@ module OpenTelemetry
|
|
30
30
|
MessagingHelper.apply_sqs_attributes(attributes, context, client_method) if service_name == 'SQS'
|
31
31
|
MessagingHelper.apply_sns_attributes(attributes, context, client_method) if service_name == 'SNS'
|
32
32
|
|
33
|
+
prepare_extract_context(context, client_method)
|
33
34
|
tracer.in_span(span_name(context, client_method), attributes: attributes, kind: span_kind(client_method)) do |span|
|
34
35
|
inject_context(context, client_method)
|
36
|
+
|
35
37
|
if instrumentation_config[:suppress_internal_instrumentation]
|
36
38
|
OpenTelemetry::Common::Utilities.untraced { super }
|
37
39
|
else
|
@@ -44,6 +46,8 @@ module OpenTelemetry
|
|
44
46
|
span.record_exception(err)
|
45
47
|
span.status = Trace::Status.error(err.to_s)
|
46
48
|
end
|
49
|
+
|
50
|
+
MessagingHelper.create_sqs_processing_spans(context, tracer, response.messages) if instrumentation_config[:extract_messaging_context] && client_method == SQS_RECEIVE_MESSAGE && response.respond_to?(:messages)
|
47
51
|
end
|
48
52
|
end
|
49
53
|
end
|
@@ -81,6 +85,13 @@ module OpenTelemetry
|
|
81
85
|
end
|
82
86
|
end
|
83
87
|
|
88
|
+
def prepare_extract_context(context, client_method)
|
89
|
+
return unless client_method == SQS_RECEIVE_MESSAGE
|
90
|
+
return unless instrumentation_config[:extract_messaging_context]
|
91
|
+
|
92
|
+
context.params[:message_attribute_names] = ['All']
|
93
|
+
end
|
94
|
+
|
84
95
|
def span_kind(client_method)
|
85
96
|
case client_method
|
86
97
|
when SQS_SEND_MESSAGE, SQS_SEND_MESSAGE_BATCH, SNS_PUBLISH
|
@@ -95,9 +106,9 @@ module OpenTelemetry
|
|
95
106
|
def span_name(context, client_method)
|
96
107
|
case client_method
|
97
108
|
when SQS_SEND_MESSAGE, SQS_SEND_MESSAGE_BATCH, SNS_PUBLISH
|
98
|
-
"#{MessagingHelper.
|
109
|
+
"#{MessagingHelper.destination_name(context)} send"
|
99
110
|
when SQS_RECEIVE_MESSAGE
|
100
|
-
"#{MessagingHelper.
|
111
|
+
"#{MessagingHelper.destination_name(context)} receive"
|
101
112
|
else
|
102
113
|
client_method
|
103
114
|
end
|
@@ -24,6 +24,7 @@ module OpenTelemetry
|
|
24
24
|
!gem_version.nil? && gem_version >= MINIMUM_VERSION
|
25
25
|
end
|
26
26
|
|
27
|
+
option :extract_messaging_context, default: false, validate: :boolean
|
27
28
|
option :inject_messaging_context, default: false, validate: :boolean
|
28
29
|
option :suppress_internal_instrumentation, default: false, validate: :boolean
|
29
30
|
|
@@ -26,10 +26,10 @@ module OpenTelemetry
|
|
26
26
|
# The MessageAttributeGetter class provides methods for getting tracing information from SQS message.
|
27
27
|
#
|
28
28
|
# @example
|
29
|
-
# OpenTelemetry.propagation.extract(message, getter: MessageAttributeGetter)
|
29
|
+
# OpenTelemetry.propagation.extract(message.message_attributes, getter: MessageAttributeGetter)
|
30
30
|
class MessageAttributeGetter
|
31
31
|
def self.get(carrier, key)
|
32
|
-
return carrier[key]
|
32
|
+
return carrier&.[](key)&.[]('string_value') if carrier&.[](key)&.[]('data_type') == 'String'
|
33
33
|
end
|
34
34
|
end
|
35
35
|
end
|
@@ -10,7 +10,7 @@ module OpenTelemetry
|
|
10
10
|
# MessagingHelper class provides methods for calculating messaging span attributes
|
11
11
|
class MessagingHelper
|
12
12
|
class << self
|
13
|
-
def
|
13
|
+
def destination_name(context)
|
14
14
|
topic_arn = context.params[:topic_arn]
|
15
15
|
target_arn = context.params[:target_arn]
|
16
16
|
|
@@ -31,7 +31,7 @@ module OpenTelemetry
|
|
31
31
|
def apply_sqs_attributes(attributes, context, client_method)
|
32
32
|
attributes[SemanticConventions::Trace::MESSAGING_SYSTEM] = 'aws.sqs'
|
33
33
|
attributes[SemanticConventions::Trace::MESSAGING_DESTINATION_KIND] = 'queue'
|
34
|
-
attributes[SemanticConventions::Trace::MESSAGING_DESTINATION] =
|
34
|
+
attributes[SemanticConventions::Trace::MESSAGING_DESTINATION] = destination_name(context)
|
35
35
|
attributes[SemanticConventions::Trace::MESSAGING_URL] = context.params[:queue_url] if context.params[:queue_url]
|
36
36
|
|
37
37
|
attributes[SemanticConventions::Trace::MESSAGING_OPERATION] = 'receive' if client_method == 'SQS.ReceiveMessage'
|
@@ -43,7 +43,29 @@ module OpenTelemetry
|
|
43
43
|
return unless client_method == 'SNS.Publish'
|
44
44
|
|
45
45
|
attributes[SemanticConventions::Trace::MESSAGING_DESTINATION_KIND] = 'topic'
|
46
|
-
attributes[SemanticConventions::Trace::MESSAGING_DESTINATION] =
|
46
|
+
attributes[SemanticConventions::Trace::MESSAGING_DESTINATION] = destination_name(context)
|
47
|
+
end
|
48
|
+
|
49
|
+
def create_sqs_processing_spans(context, tracer, messages)
|
50
|
+
queue_name = destination_name(context)
|
51
|
+
messages.each do |message|
|
52
|
+
attributes = {
|
53
|
+
SemanticConventions::Trace::MESSAGING_SYSTEM => 'aws.sqs',
|
54
|
+
SemanticConventions::Trace::MESSAGING_DESTINATION => queue_name,
|
55
|
+
SemanticConventions::Trace::MESSAGING_DESTINATION_KIND => 'queue',
|
56
|
+
SemanticConventions::Trace::MESSAGING_MESSAGE_ID => message.message_id,
|
57
|
+
SemanticConventions::Trace::MESSAGING_URL => context.params[:queue_url],
|
58
|
+
SemanticConventions::Trace::MESSAGING_OPERATION => 'process'
|
59
|
+
}
|
60
|
+
tracer.in_span("#{queue_name} process", attributes: attributes, links: extract_links(message), kind: :consumer) {}
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def extract_links(sqs_message)
|
65
|
+
extracted_context = OpenTelemetry.propagation.extract(sqs_message.message_attributes, context: Context::ROOT, getter: MessageAttributeGetter)
|
66
|
+
span_context = OpenTelemetry::Trace.current_span(extracted_context).context
|
67
|
+
|
68
|
+
span_context.valid? ? [OpenTelemetry::Trace::Link.new(span_context)] : []
|
47
69
|
end
|
48
70
|
end
|
49
71
|
end
|
metadata
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aspecto-opentelemetry-instrumentation-aws_sdk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3
|
4
|
+
version: 0.4.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- OpenTelemetry Authors
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
date: 2022-07-17 00:00:00.000000000 Z
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.
|
33
|
+
version: 0.19.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.
|
40
|
+
version: 0.19.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: appraisal
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -254,15 +254,15 @@ files:
|
|
254
254
|
- lib/opentelemetry/instrumentation/aws_sdk/messaging_helper.rb
|
255
255
|
- lib/opentelemetry/instrumentation/aws_sdk/services.rb
|
256
256
|
- lib/opentelemetry/instrumentation/aws_sdk/version.rb
|
257
|
-
homepage: https://github.com/open-telemetry/opentelemetry-
|
257
|
+
homepage: https://github.com/open-telemetry/opentelemetry-ruby
|
258
258
|
licenses:
|
259
259
|
- Apache-2.0
|
260
260
|
metadata:
|
261
|
-
changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby
|
262
|
-
source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby
|
263
|
-
bug_tracker_uri: https://github.com/open-telemetry/opentelemetry-ruby
|
264
|
-
documentation_uri: https://open-telemetry.github.io/opentelemetry-ruby
|
265
|
-
post_install_message:
|
261
|
+
changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-instrumentation-aws_sdk/v0.4.3/file.CHANGELOG.html
|
262
|
+
source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby/tree/main/instrumentation/aws_sdk
|
263
|
+
bug_tracker_uri: https://github.com/open-telemetry/opentelemetry-ruby/issues
|
264
|
+
documentation_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-instrumentation-aws_sdk/v0.4.3
|
265
|
+
post_install_message:
|
266
266
|
rdoc_options: []
|
267
267
|
require_paths:
|
268
268
|
- lib
|
@@ -270,15 +270,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
270
270
|
requirements:
|
271
271
|
- - ">="
|
272
272
|
- !ruby/object:Gem::Version
|
273
|
-
version: 2.
|
273
|
+
version: 2.5.0
|
274
274
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
275
275
|
requirements:
|
276
276
|
- - ">="
|
277
277
|
- !ruby/object:Gem::Version
|
278
278
|
version: '0'
|
279
279
|
requirements: []
|
280
|
-
rubygems_version: 3.
|
281
|
-
signing_key:
|
280
|
+
rubygems_version: 3.1.4
|
281
|
+
signing_key:
|
282
282
|
specification_version: 4
|
283
283
|
summary: AWS SDK instrumentation for the OpenTelemetry framework
|
284
284
|
test_files: []
|