From 6c8bf07e5888411080e15a9924d65d8fb69a362e Mon Sep 17 00:00:00 2001 From: AzharH Date: Fri, 7 Nov 2025 02:03:01 +0000 Subject: [PATCH 1/8] implement AWS Lambda detector Signed-off-by: AzharH --- .../AWSLambdaResourceBuilderExtensions.cs | 33 ++++++++++++ ...AWSLambdaResourceBuilderExtensionsTests.cs | 52 +++++++++++++++++++ 2 files changed, 85 insertions(+) create mode 100644 src/OpenTelemetry.Instrumentation.AWSLambda/AWSLambdaResourceBuilderExtensions.cs create mode 100644 test/OpenTelemetry.Instrumentation.AWSLambda.Tests/AWSLambdaResourceBuilderExtensionsTests.cs diff --git a/src/OpenTelemetry.Instrumentation.AWSLambda/AWSLambdaResourceBuilderExtensions.cs b/src/OpenTelemetry.Instrumentation.AWSLambda/AWSLambdaResourceBuilderExtensions.cs new file mode 100644 index 0000000000..5ee32ec79b --- /dev/null +++ b/src/OpenTelemetry.Instrumentation.AWSLambda/AWSLambdaResourceBuilderExtensions.cs @@ -0,0 +1,33 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +using OpenTelemetry.AWS; +using OpenTelemetry.Instrumentation.AWSLambda.Implementation; +using OpenTelemetry.Internal; +using OpenTelemetry.Resources; + +namespace OpenTelemetry.Instrumentation.AWSLambda; + +/// +/// Extension methods to simplify registering of AWS Lambda resource detectors. +/// +public static class AWSLambdaResourceBuilderExtensions +{ + /// + /// Enables AWS Lambda resource detector. + /// + /// The being configured. + /// Optional callback action for configuring . + /// The instance of being configured. + public static ResourceBuilder AddAWSLambdaDetector(this ResourceBuilder builder, Action? configure = null) + { + Guard.ThrowIfNull(builder); + + var options = new AWSLambdaInstrumentationOptions(); + configure?.Invoke(options); + + var semanticConventionBuilder = new AWSSemanticConventions(options.SemanticConventionVersion); + + return builder.AddDetector(new AWSLambdaResourceDetector(semanticConventionBuilder)); + } +} diff --git a/test/OpenTelemetry.Instrumentation.AWSLambda.Tests/AWSLambdaResourceBuilderExtensionsTests.cs b/test/OpenTelemetry.Instrumentation.AWSLambda.Tests/AWSLambdaResourceBuilderExtensionsTests.cs new file mode 100644 index 0000000000..e9530cd996 --- /dev/null +++ b/test/OpenTelemetry.Instrumentation.AWSLambda.Tests/AWSLambdaResourceBuilderExtensionsTests.cs @@ -0,0 +1,52 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +using OpenTelemetry.Resources; +using Xunit; + +namespace OpenTelemetry.Instrumentation.AWSLambda.Tests; + +public class AWSLambdaResourceBuilderExtensionsTests +{ + // Expected Semantic Conventions + private const string AttributeCloudProvider = "cloud.provider"; + private const string AttributeCloudRegion = "cloud.region"; + private const string AttributeFaasName = "faas.name"; + private const string AttributeFaasVersion = "faas.version"; + private const string AttributeFaasInstance = "faas.instance"; + private const string AttributeFaasMaxMemory = "faas.max_memory"; + + public AWSLambdaResourceBuilderExtensionsTests() + { + Environment.SetEnvironmentVariable("AWS_REGION", "us-east-1"); + Environment.SetEnvironmentVariable("AWS_LAMBDA_FUNCTION_NAME", "testfunction"); + Environment.SetEnvironmentVariable("AWS_LAMBDA_FUNCTION_VERSION", "latest"); + Environment.SetEnvironmentVariable("AWS_LAMBDA_FUNCTION_MEMORY_SIZE", "128"); + Environment.SetEnvironmentVariable("AWS_LAMBDA_LOG_STREAM_NAME", + "2025/07/21/[$LATEST]7b176c212e954e62adfb9b5451cb5374"); + } + + [Fact] + public void AssertAttributes() + { + var resourceBuilder = ResourceBuilder.CreateDefault(); + resourceBuilder.AddAWSLambdaDetector(); + + var resource = resourceBuilder.Build(); + + var resourceAttributes = resource.Attributes + .ToDictionary(x => x.Key, x => x.Value); + + Assert.Equal("aws", resourceAttributes[AttributeCloudProvider]); + Assert.Equal("us-east-1", resourceAttributes[AttributeCloudRegion]); + Assert.Equal("testfunction", resourceAttributes[AttributeFaasName]); + Assert.Equal("latest", resourceAttributes[AttributeFaasVersion]); + Assert.Equal("2025/07/21/[$LATEST]7b176c212e954e62adfb9b5451cb5374", + resourceAttributes[AttributeFaasInstance]); + Assert.Equal(134217728L, resourceAttributes[AttributeFaasMaxMemory]); + } + + [Fact] + public void AssertArgumentNullException() => + Assert.Throws(() => AWSLambdaResourceBuilderExtensions.AddAWSLambdaDetector(null!)); +} From a00874cf29b65891d6379c049fa832e42b3c4c64 Mon Sep 17 00:00:00 2001 From: AzharH Date: Fri, 7 Nov 2025 01:23:51 +0000 Subject: [PATCH 2/8] update changelog --- src/OpenTelemetry.Instrumentation.AWSLambda/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/OpenTelemetry.Instrumentation.AWSLambda/CHANGELOG.md b/src/OpenTelemetry.Instrumentation.AWSLambda/CHANGELOG.md index 04f464586b..a0dcb142b0 100644 --- a/src/OpenTelemetry.Instrumentation.AWSLambda/CHANGELOG.md +++ b/src/OpenTelemetry.Instrumentation.AWSLambda/CHANGELOG.md @@ -4,6 +4,7 @@ * Add support for .NET 10.0. ([#2822](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/2822)) +* Implement AWS Lambda detector (https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/3410) ## 1.13.0 From 840ee3b9a13df816419a7fe5ab6ca4eb8e3eeff5 Mon Sep 17 00:00:00 2001 From: AzharH Date: Fri, 7 Nov 2025 02:11:13 +0000 Subject: [PATCH 3/8] Update CHANGELOG for AWS Lambda detector implementation --- src/OpenTelemetry.Instrumentation.AWSLambda/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/OpenTelemetry.Instrumentation.AWSLambda/CHANGELOG.md b/src/OpenTelemetry.Instrumentation.AWSLambda/CHANGELOG.md index a0dcb142b0..0871f0128a 100644 --- a/src/OpenTelemetry.Instrumentation.AWSLambda/CHANGELOG.md +++ b/src/OpenTelemetry.Instrumentation.AWSLambda/CHANGELOG.md @@ -4,7 +4,7 @@ * Add support for .NET 10.0. ([#2822](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/2822)) -* Implement AWS Lambda detector (https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/3410) +* Implement AWS Lambda detector ([#3411](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/3411)) ## 1.13.0 From 20d038533565c4aee90ed96794a458ca51ed3b21 Mon Sep 17 00:00:00 2001 From: AzharH Date: Wed, 12 Nov 2025 21:07:59 +0000 Subject: [PATCH 4/8] refactor test --- ...AWSLambdaResourceBuilderExtensionsTests.cs | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/test/OpenTelemetry.Instrumentation.AWSLambda.Tests/AWSLambdaResourceBuilderExtensionsTests.cs b/test/OpenTelemetry.Instrumentation.AWSLambda.Tests/AWSLambdaResourceBuilderExtensionsTests.cs index e9530cd996..3e671e5c40 100644 --- a/test/OpenTelemetry.Instrumentation.AWSLambda.Tests/AWSLambdaResourceBuilderExtensionsTests.cs +++ b/test/OpenTelemetry.Instrumentation.AWSLambda.Tests/AWSLambdaResourceBuilderExtensionsTests.cs @@ -6,7 +6,7 @@ namespace OpenTelemetry.Instrumentation.AWSLambda.Tests; -public class AWSLambdaResourceBuilderExtensionsTests +public class AWSLambdaResourceBuilderExtensionsTests : IDisposable { // Expected Semantic Conventions private const string AttributeCloudProvider = "cloud.provider"; @@ -16,15 +16,14 @@ public class AWSLambdaResourceBuilderExtensionsTests private const string AttributeFaasInstance = "faas.instance"; private const string AttributeFaasMaxMemory = "faas.max_memory"; - public AWSLambdaResourceBuilderExtensionsTests() - { - Environment.SetEnvironmentVariable("AWS_REGION", "us-east-1"); - Environment.SetEnvironmentVariable("AWS_LAMBDA_FUNCTION_NAME", "testfunction"); - Environment.SetEnvironmentVariable("AWS_LAMBDA_FUNCTION_VERSION", "latest"); - Environment.SetEnvironmentVariable("AWS_LAMBDA_FUNCTION_MEMORY_SIZE", "128"); - Environment.SetEnvironmentVariable("AWS_LAMBDA_LOG_STREAM_NAME", - "2025/07/21/[$LATEST]7b176c212e954e62adfb9b5451cb5374"); - } + private readonly IDisposable environmentScope = EnvironmentVariableScope.Create( + ("AWS_REGION", "us-east-1"), + ("AWS_LAMBDA_FUNCTION_NAME", "testfunction"), + ("AWS_LAMBDA_FUNCTION_VERSION", "latest"), + ("AWS_LAMBDA_FUNCTION_MEMORY_SIZE", "128"), + ("AWS_LAMBDA_LOG_STREAM_NAME", "2025/07/21/[$LATEST]7b176c212e954e62adfb9b5451cb5374")); + + public void Dispose() => this.environmentScope.Dispose(); [Fact] public void AssertAttributes() From b6b34430aa6ebacad73bde8945b411aa60afe18f Mon Sep 17 00:00:00 2001 From: AzharH Date: Mon, 24 Nov 2025 00:35:46 +0000 Subject: [PATCH 5/8] update XML documentation --- .../.publicApi/PublicAPI.Unshipped.txt | 2 ++ .../AWSLambdaResourceBuilderExtensions.cs | 3 ++- .../TracerProviderBuilderExtensions.cs | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/OpenTelemetry.Instrumentation.AWSLambda/.publicApi/PublicAPI.Unshipped.txt b/src/OpenTelemetry.Instrumentation.AWSLambda/.publicApi/PublicAPI.Unshipped.txt index e69de29bb2..4d410544a4 100644 --- a/src/OpenTelemetry.Instrumentation.AWSLambda/.publicApi/PublicAPI.Unshipped.txt +++ b/src/OpenTelemetry.Instrumentation.AWSLambda/.publicApi/PublicAPI.Unshipped.txt @@ -0,0 +1,2 @@ +OpenTelemetry.Instrumentation.AWSLambda.AWSLambdaResourceBuilderExtensions +static OpenTelemetry.Instrumentation.AWSLambda.AWSLambdaResourceBuilderExtensions.AddAWSLambdaDetector(this OpenTelemetry.Resources.ResourceBuilder! builder, System.Action? configure = null) -> OpenTelemetry.Resources.ResourceBuilder! \ No newline at end of file diff --git a/src/OpenTelemetry.Instrumentation.AWSLambda/AWSLambdaResourceBuilderExtensions.cs b/src/OpenTelemetry.Instrumentation.AWSLambda/AWSLambdaResourceBuilderExtensions.cs index 5ee32ec79b..7f9fca0485 100644 --- a/src/OpenTelemetry.Instrumentation.AWSLambda/AWSLambdaResourceBuilderExtensions.cs +++ b/src/OpenTelemetry.Instrumentation.AWSLambda/AWSLambdaResourceBuilderExtensions.cs @@ -5,6 +5,7 @@ using OpenTelemetry.Instrumentation.AWSLambda.Implementation; using OpenTelemetry.Internal; using OpenTelemetry.Resources; +using OpenTelemetry.Trace; namespace OpenTelemetry.Instrumentation.AWSLambda; @@ -14,7 +15,7 @@ namespace OpenTelemetry.Instrumentation.AWSLambda; public static class AWSLambdaResourceBuilderExtensions { /// - /// Enables AWS Lambda resource detector. + /// Enables AWS Lambda resource detector. Do not call this method while also calling or . /// /// The being configured. /// Optional callback action for configuring . diff --git a/src/OpenTelemetry.Instrumentation.AWSLambda/TracerProviderBuilderExtensions.cs b/src/OpenTelemetry.Instrumentation.AWSLambda/TracerProviderBuilderExtensions.cs index d65977dae2..c489e01bad 100644 --- a/src/OpenTelemetry.Instrumentation.AWSLambda/TracerProviderBuilderExtensions.cs +++ b/src/OpenTelemetry.Instrumentation.AWSLambda/TracerProviderBuilderExtensions.cs @@ -22,7 +22,7 @@ public static TracerProviderBuilder AddAWSLambdaConfigurations(this TracerProvid AddAWSLambdaConfigurations(builder, configure: null); /// - /// Add AWS Lambda configurations. + /// Add AWS Lambda configurations. Do not call this method while also calling . /// /// being configured. /// AWS lambda instrumentation options. From c80f9406b067339a0165f9af56ce01412b4e0030 Mon Sep 17 00:00:00 2001 From: AzharH Date: Mon, 1 Dec 2025 15:03:04 +0000 Subject: [PATCH 6/8] Update src/OpenTelemetry.Instrumentation.AWSLambda/TracerProviderBuilderExtensions.cs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Christian Neumüller --- .../TracerProviderBuilderExtensions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/OpenTelemetry.Instrumentation.AWSLambda/TracerProviderBuilderExtensions.cs b/src/OpenTelemetry.Instrumentation.AWSLambda/TracerProviderBuilderExtensions.cs index c489e01bad..e328b5f68d 100644 --- a/src/OpenTelemetry.Instrumentation.AWSLambda/TracerProviderBuilderExtensions.cs +++ b/src/OpenTelemetry.Instrumentation.AWSLambda/TracerProviderBuilderExtensions.cs @@ -22,7 +22,7 @@ public static TracerProviderBuilder AddAWSLambdaConfigurations(this TracerProvid AddAWSLambdaConfigurations(builder, configure: null); /// - /// Add AWS Lambda configurations. Do not call this method while also calling . + /// Add AWS Lambda configurations. Do not call this method if also calling as it already adds the detector. /// /// being configured. /// AWS lambda instrumentation options. From 1e0764ff92f48ed379eeb3bf56b8c37146f7d1a7 Mon Sep 17 00:00:00 2001 From: AzharH Date: Mon, 1 Dec 2025 15:21:45 +0000 Subject: [PATCH 7/8] remove `AWSLambdaInstrumentationOptions` as parameter --- .../AWSLambdaResourceBuilderExtensions.cs | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/OpenTelemetry.Instrumentation.AWSLambda/AWSLambdaResourceBuilderExtensions.cs b/src/OpenTelemetry.Instrumentation.AWSLambda/AWSLambdaResourceBuilderExtensions.cs index 7f9fca0485..5dab623bc2 100644 --- a/src/OpenTelemetry.Instrumentation.AWSLambda/AWSLambdaResourceBuilderExtensions.cs +++ b/src/OpenTelemetry.Instrumentation.AWSLambda/AWSLambdaResourceBuilderExtensions.cs @@ -18,17 +18,12 @@ public static class AWSLambdaResourceBuilderExtensions /// Enables AWS Lambda resource detector. Do not call this method while also calling or . /// /// The being configured. - /// Optional callback action for configuring . /// The instance of being configured. - public static ResourceBuilder AddAWSLambdaDetector(this ResourceBuilder builder, Action? configure = null) + public static ResourceBuilder AddAWSLambdaDetector(this ResourceBuilder builder) { Guard.ThrowIfNull(builder); - var options = new AWSLambdaInstrumentationOptions(); - configure?.Invoke(options); - - var semanticConventionBuilder = new AWSSemanticConventions(options.SemanticConventionVersion); - + var semanticConventionBuilder = new AWSSemanticConventions(); return builder.AddDetector(new AWSLambdaResourceDetector(semanticConventionBuilder)); } } From 1c6d70dc9c7c3b4bcbcb053a1c2ad7e80dd554c7 Mon Sep 17 00:00:00 2001 From: AzharH Date: Mon, 1 Dec 2025 15:34:45 +0000 Subject: [PATCH 8/8] update doc --- .../.publicApi/PublicAPI.Unshipped.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/OpenTelemetry.Instrumentation.AWSLambda/.publicApi/PublicAPI.Unshipped.txt b/src/OpenTelemetry.Instrumentation.AWSLambda/.publicApi/PublicAPI.Unshipped.txt index 4d410544a4..e961cf7780 100644 --- a/src/OpenTelemetry.Instrumentation.AWSLambda/.publicApi/PublicAPI.Unshipped.txt +++ b/src/OpenTelemetry.Instrumentation.AWSLambda/.publicApi/PublicAPI.Unshipped.txt @@ -1,2 +1,2 @@ OpenTelemetry.Instrumentation.AWSLambda.AWSLambdaResourceBuilderExtensions -static OpenTelemetry.Instrumentation.AWSLambda.AWSLambdaResourceBuilderExtensions.AddAWSLambdaDetector(this OpenTelemetry.Resources.ResourceBuilder! builder, System.Action? configure = null) -> OpenTelemetry.Resources.ResourceBuilder! \ No newline at end of file +static OpenTelemetry.Instrumentation.AWSLambda.AWSLambdaResourceBuilderExtensions.AddAWSLambdaDetector(this OpenTelemetry.Resources.ResourceBuilder! builder) -> OpenTelemetry.Resources.ResourceBuilder! \ No newline at end of file