diff --git a/src/OpenTelemetry/CHANGELOG.md b/src/OpenTelemetry/CHANGELOG.md index 93cc1b8d320..30856d74dfc 100644 --- a/src/OpenTelemetry/CHANGELOG.md +++ b/src/OpenTelemetry/CHANGELOG.md @@ -6,6 +6,11 @@ `8.0.0-rc.2.23479.6`. ([#4959](https://github.com/open-telemetry/opentelemetry-dotnet/pull/4959)) +* The `AddService` `ResourceBuilder` extension method will now generate the same + `service.instance.id` for the lifetime of a process when + `autoGenerateServiceInstanceId` is `true`. + ([#4988](https://github.com/open-telemetry/opentelemetry-dotnet/pull/4988)) + ## 1.7.0-alpha.1 Released 2023-Oct-16 diff --git a/src/OpenTelemetry/Resources/ResourceBuilderExtensions.cs b/src/OpenTelemetry/Resources/ResourceBuilderExtensions.cs index a5f079e13f7..86f2548593c 100644 --- a/src/OpenTelemetry/Resources/ResourceBuilderExtensions.cs +++ b/src/OpenTelemetry/Resources/ResourceBuilderExtensions.cs @@ -25,6 +25,8 @@ namespace OpenTelemetry.Resources; /// public static class ResourceBuilderExtensions { + private static readonly string InstanceId = Guid.NewGuid().ToString(); + private static Resource TelemetryResource { get; } = new Resource(new Dictionary { [ResourceSemanticConventions.AttributeTelemetrySdkName] = "opentelemetry", @@ -71,7 +73,7 @@ public static ResourceBuilder AddService( if (serviceInstanceId == null && autoGenerateServiceInstanceId) { - serviceInstanceId = Guid.NewGuid().ToString(); + serviceInstanceId = InstanceId; } if (serviceInstanceId != null) diff --git a/test/OpenTelemetry.Tests/Resources/ResourceBuilderTests.cs b/test/OpenTelemetry.Tests/Resources/ResourceBuilderTests.cs index fc9c5e3e9f1..2549fbe5044 100644 --- a/test/OpenTelemetry.Tests/Resources/ResourceBuilderTests.cs +++ b/test/OpenTelemetry.Tests/Resources/ResourceBuilderTests.cs @@ -68,6 +68,24 @@ public void ServiceResource_AutoGenerateServiceInstanceIdOff() Assert.Contains(new KeyValuePair(ResourceSemanticConventions.AttributeServiceName, "my-service"), resource.Attributes); } + [Fact] + public void ServiceResourceGeneratesConsistentInstanceId() + { + var firstResource = ResourceBuilder.CreateEmpty().AddService("my-service").Build(); + + var firstInstanceIdAttribute = firstResource.Attributes.FirstOrDefault(kvp => kvp.Key == ResourceSemanticConventions.AttributeServiceInstance); + + Assert.NotNull(firstInstanceIdAttribute.Value); + + var secondResource = ResourceBuilder.CreateEmpty().AddService("other-service").Build(); + + var secondInstanceIdAttribute = secondResource.Attributes.FirstOrDefault(kvp => kvp.Key == ResourceSemanticConventions.AttributeServiceInstance); + + Assert.NotNull(secondInstanceIdAttribute.Value); + + Assert.Equal(firstInstanceIdAttribute.Value, secondInstanceIdAttribute.Value); + } + [Fact] public void ClearTest() {