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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c33d7a76ab1f55c8ae05709a72136b9063ef1bd20e6baf2ef1b9ca393d3a9760
4
- data.tar.gz: f6ace2338eaa9089aa950351b6b44864e88d459113f441d977e41a4e8261a0d8
3
+ metadata.gz: 5a8ec0b68eb13782494f65cdafeed9f75447bb1762202bbbcde32cf795f4f3bb
4
+ data.tar.gz: 5039cfbeb483722204a6e7410881a675cbe7f8326c603a543e7ec233244616af
5
5
  SHA512:
6
- metadata.gz: 441a273890e25c9b61ff3187d98e86b10da94a5e57497e88c7b310de86ccc2255659522b7dfcaee70718569882504cc46667fdf82fb9da44bf62b70fbd0d3f06
7
- data.tar.gz: 000b2b695a571b483fc840003b7e84fb49d6791d1ee0df4fbae7db9d05f7ee4b620174c286f3e4dbf17fc489ce23954be4569c10a69d42983de1d79847c0ad8f
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
- Additional AWS platforms (EKS, Lambda) will be supported in future versions.
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.logger.debug("EC2 resource detection failed: #{e.message}")
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.logger.debug("EC2 metadata service request failed: #{e.message}")
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.logger.debug("ECS resource detection failed: #{e.message}")
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.logger.debug("Failed to get container ID on ECS: #{e.message}")
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.logger.debug("The metadata endpoint v4 has returned 'awslogs' as 'LogDriver', but there is no 'LogOptions' data")
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
@@ -8,7 +8,7 @@ module OpenTelemetry
8
8
  module Resource
9
9
  module Detector
10
10
  module AWS
11
- VERSION = '0.2.0'
11
+ VERSION = '0.3.0'
12
12
  end
13
13
  end
14
14
  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({})
@@ -4,4 +4,5 @@
4
4
  #
5
5
  # SPDX-License-Identifier: Apache-2.0
6
6
 
7
+ require 'opentelemetry/semantic_conventions/resource'
7
8
  require_relative 'opentelemetry/resource/detector'
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.2.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-04-29 00:00:00.000000000 Z
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: