opentelemetry-resource-detector-aws 0.2.0 → 0.3.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/README.md +15 -2
- data/lib/opentelemetry/resource/detector/aws/ec2.rb +3 -2
- data/lib/opentelemetry/resource/detector/aws/ecs.rb +4 -3
- data/lib/opentelemetry/resource/detector/aws/lambda.rb +66 -0
- data/lib/opentelemetry/resource/detector/aws/version.rb +1 -1
- data/lib/opentelemetry/resource/detector/aws.rb +3 -0
- data/lib/opentelemetry-resource-detector-aws.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5a8ec0b68eb13782494f65cdafeed9f75447bb1762202bbbcde32cf795f4f3bb
|
4
|
+
data.tar.gz: 5039cfbeb483722204a6e7410881a675cbe7f8326c603a543e7ec233244616af
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0b0171c2e36d1c4c7ff95259b49699e5af069dd0fc34b8ec079682fb75b989190af36c5792e25e2f875499f50f4107c5461c45532a057cffadc283ce1c47dec3
|
7
|
+
data.tar.gz: 99ba3b6378c03a344f119329821c576cb78408bfa0e937dccb01f89e9503a79c02cd723e97e371789135f02529dd201720406f3c7f5697d119f904bdad6cc2c2
|
data/README.md
CHANGED
@@ -31,11 +31,12 @@ require 'opentelemetry/resource/detector'
|
|
31
31
|
|
32
32
|
OpenTelemetry::SDK.configure do |c|
|
33
33
|
# Specify which AWS resource detectors to use
|
34
|
-
c.resource = OpenTelemetry::Resource::Detector::AWS.detect([:ec2, :ecs])
|
34
|
+
c.resource = OpenTelemetry::Resource::Detector::AWS.detect([:ec2, :ecs, :lambda])
|
35
35
|
|
36
36
|
# Or use just one detector
|
37
37
|
c.resource = OpenTelemetry::Resource::Detector::AWS.detect([:ec2])
|
38
38
|
c.resource = OpenTelemetry::Resource::Detector::AWS.detect([:ecs])
|
39
|
+
c.resource = OpenTelemetry::Resource::Detector::AWS.detect([:lambda])
|
39
40
|
end
|
40
41
|
```
|
41
42
|
|
@@ -75,7 +76,19 @@ Populates `cloud`, `container`, and AWS ECS-specific attributes for processes ru
|
|
75
76
|
| `aws.log.stream.names` | The CloudWatch log stream names (if awslogs driver is used) |
|
76
77
|
| `aws.log.stream.arns` | The CloudWatch log stream ARNs (if awslogs driver is used) |
|
77
78
|
|
78
|
-
|
79
|
+
### AWS Lambda Detector
|
80
|
+
Populates `cloud` and `faas` (Function as a Service) attributes for processes running on AWS Lambda.
|
81
|
+
| Resource Attribute | Description |
|
82
|
+
|--------------------|-------------|
|
83
|
+
| `cloud.platform` | The cloud platform. In this context, it's always "aws_lambda" |
|
84
|
+
| `cloud.provider` | The cloud provider. In this context, it's always "aws" |
|
85
|
+
| `cloud.region` | The AWS region from the `AWS_REGION` environment variable |
|
86
|
+
| `faas.name` | The Lambda function name from the `AWS_LAMBDA_FUNCTION_NAME` environment variable |
|
87
|
+
| `faas.version` | The Lambda function version from the `AWS_LAMBDA_FUNCTION_VERSION` environment variable |
|
88
|
+
| `faas.instance` | The Lambda function instance ID from the `AWS_LAMBDA_LOG_STREAM_NAME` environment variable |
|
89
|
+
| `faas.max_memory` | The Lambda function memory size in MB from the `AWS_LAMBDA_FUNCTION_MEMORY_SIZE` environment variable |
|
90
|
+
|
91
|
+
Additional AWS platforms (EKS) will be supported in future versions.
|
79
92
|
|
80
93
|
## License
|
81
94
|
|
@@ -7,6 +7,7 @@
|
|
7
7
|
require 'net/http'
|
8
8
|
require 'json'
|
9
9
|
require 'opentelemetry/common'
|
10
|
+
require 'opentelemetry/semantic_conventions/resource'
|
10
11
|
|
11
12
|
module OpenTelemetry
|
12
13
|
module Resource
|
@@ -59,7 +60,7 @@ module OpenTelemetry
|
|
59
60
|
resource_attributes[RESOURCE::HOST_TYPE] = identity['instanceType']
|
60
61
|
resource_attributes[RESOURCE::HOST_NAME] = hostname
|
61
62
|
rescue StandardError => e
|
62
|
-
OpenTelemetry.
|
63
|
+
OpenTelemetry.handle_error(exception: e, message: 'EC2 resource detection failed')
|
63
64
|
return OpenTelemetry::SDK::Resources::Resource.create({})
|
64
65
|
end
|
65
66
|
|
@@ -133,7 +134,7 @@ module OpenTelemetry
|
|
133
134
|
http.request(request)
|
134
135
|
end
|
135
136
|
rescue StandardError => e
|
136
|
-
OpenTelemetry.
|
137
|
+
OpenTelemetry.handle_error(exception: e, message: 'EC2 metadata service request failed')
|
137
138
|
nil
|
138
139
|
end
|
139
140
|
end
|
@@ -8,6 +8,7 @@ require 'net/http'
|
|
8
8
|
require 'json'
|
9
9
|
require 'socket'
|
10
10
|
require 'opentelemetry/common'
|
11
|
+
require 'opentelemetry/semantic_conventions/resource'
|
11
12
|
|
12
13
|
module OpenTelemetry
|
13
14
|
module Resource
|
@@ -68,7 +69,7 @@ module OpenTelemetry
|
|
68
69
|
logs_attributes = get_logs_resource(container_metadata)
|
69
70
|
resource_attributes.merge!(logs_attributes)
|
70
71
|
rescue StandardError => e
|
71
|
-
OpenTelemetry.
|
72
|
+
OpenTelemetry.handle_error(exception: e, message: 'ECS resource detection failed')
|
72
73
|
return OpenTelemetry::SDK::Resources::Resource.create({})
|
73
74
|
end
|
74
75
|
|
@@ -92,7 +93,7 @@ module OpenTelemetry
|
|
92
93
|
end
|
93
94
|
end
|
94
95
|
rescue Errno::ENOENT => e
|
95
|
-
OpenTelemetry.
|
96
|
+
OpenTelemetry.handle_error(exception: e, message: 'Failed to get container ID on ECS')
|
96
97
|
end
|
97
98
|
|
98
99
|
''
|
@@ -139,7 +140,7 @@ module OpenTelemetry
|
|
139
140
|
log_attributes[RESOURCE::AWS_LOG_STREAM_NAMES] = [logs_stream_name].compact
|
140
141
|
log_attributes[RESOURCE::AWS_LOG_STREAM_ARNS] = [logs_stream_arn].compact
|
141
142
|
else
|
142
|
-
OpenTelemetry.
|
143
|
+
OpenTelemetry.handle_error(message: 'The metadata endpoint v4 has returned \'awslogs\' as \'LogDriver\', but there is no \'LogOptions\' data')
|
143
144
|
end
|
144
145
|
end
|
145
146
|
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright The OpenTelemetry Authors
|
4
|
+
#
|
5
|
+
# SPDX-License-Identifier: Apache-2.0
|
6
|
+
|
7
|
+
require 'opentelemetry/semantic_conventions/resource'
|
8
|
+
|
9
|
+
module OpenTelemetry
|
10
|
+
module Resource
|
11
|
+
module Detector
|
12
|
+
module AWS
|
13
|
+
# Lambda contains detect class method for determining Lambda resource attributes
|
14
|
+
module Lambda
|
15
|
+
extend self
|
16
|
+
|
17
|
+
# Create a constant for resource semantic conventions
|
18
|
+
RESOURCE = OpenTelemetry::SemanticConventions::Resource
|
19
|
+
|
20
|
+
def detect
|
21
|
+
# Return empty resource if not running on Lambda
|
22
|
+
return OpenTelemetry::SDK::Resources::Resource.create({}) unless lambda_environment?
|
23
|
+
|
24
|
+
resource_attributes = {}
|
25
|
+
|
26
|
+
begin
|
27
|
+
# Set Lambda-specific attributes from environment variables
|
28
|
+
resource_attributes[RESOURCE::CLOUD_PROVIDER] = 'aws'
|
29
|
+
resource_attributes[RESOURCE::CLOUD_PLATFORM] = 'aws_lambda'
|
30
|
+
resource_attributes[RESOURCE::CLOUD_REGION] = ENV.fetch('AWS_REGION', nil)
|
31
|
+
resource_attributes[RESOURCE::FAAS_NAME] = ENV.fetch('AWS_LAMBDA_FUNCTION_NAME', nil)
|
32
|
+
resource_attributes[RESOURCE::FAAS_VERSION] = ENV.fetch('AWS_LAMBDA_FUNCTION_VERSION', nil)
|
33
|
+
resource_attributes[RESOURCE::FAAS_INSTANCE] = ENV.fetch('AWS_LAMBDA_LOG_STREAM_NAME', nil)
|
34
|
+
|
35
|
+
# Convert memory size to integer
|
36
|
+
resource_attributes[RESOURCE::FAAS_MAX_MEMORY] = ENV['AWS_LAMBDA_FUNCTION_MEMORY_SIZE'].to_i if ENV['AWS_LAMBDA_FUNCTION_MEMORY_SIZE']
|
37
|
+
rescue StandardError => e
|
38
|
+
OpenTelemetry.handle_error(exception: e, message: 'Lambda resource detection failed')
|
39
|
+
return OpenTelemetry::SDK::Resources::Resource.create({})
|
40
|
+
end
|
41
|
+
|
42
|
+
# Filter out nil or empty values
|
43
|
+
# Note: we need to handle integers differently since they don't respond to empty?
|
44
|
+
resource_attributes.delete_if do |_key, value|
|
45
|
+
value.nil? || (value.respond_to?(:empty?) && value.empty?)
|
46
|
+
end
|
47
|
+
|
48
|
+
OpenTelemetry::SDK::Resources::Resource.create(resource_attributes)
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
# Determines if the current environment is AWS Lambda
|
54
|
+
#
|
55
|
+
# @return [Boolean] true if running on AWS Lambda
|
56
|
+
def lambda_environment?
|
57
|
+
# Check for Lambda-specific environment variables
|
58
|
+
!ENV['AWS_LAMBDA_FUNCTION_NAME'].nil? &&
|
59
|
+
!ENV['AWS_LAMBDA_FUNCTION_VERSION'].nil? &&
|
60
|
+
!ENV['AWS_LAMBDA_LOG_STREAM_NAME'].nil?
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -6,6 +6,7 @@
|
|
6
6
|
|
7
7
|
require 'opentelemetry/resource/detector/aws/ec2'
|
8
8
|
require 'opentelemetry/resource/detector/aws/ecs'
|
9
|
+
require 'opentelemetry/resource/detector/aws/lambda'
|
9
10
|
|
10
11
|
module OpenTelemetry
|
11
12
|
module Resource
|
@@ -29,6 +30,8 @@ module OpenTelemetry
|
|
29
30
|
EC2.detect
|
30
31
|
when :ecs
|
31
32
|
ECS.detect
|
33
|
+
when :lambda
|
34
|
+
Lambda.detect
|
32
35
|
else
|
33
36
|
OpenTelemetry.logger.warn("Unknown AWS resource detector: #{detector}")
|
34
37
|
OpenTelemetry::SDK::Resources::Resource.create({})
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opentelemetry-resource-detector-aws
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- OpenTelemetry Authors
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-
|
11
|
+
date: 2025-05-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: opentelemetry-sdk
|
@@ -38,6 +38,7 @@ files:
|
|
38
38
|
- lib/opentelemetry/resource/detector/aws.rb
|
39
39
|
- lib/opentelemetry/resource/detector/aws/ec2.rb
|
40
40
|
- lib/opentelemetry/resource/detector/aws/ecs.rb
|
41
|
+
- lib/opentelemetry/resource/detector/aws/lambda.rb
|
41
42
|
- lib/opentelemetry/resource/detector/aws/version.rb
|
42
43
|
homepage: https://github.com/open-telemetry/opentelemetry-ruby-contrib
|
43
44
|
licenses:
|