From f25b01f31acdfe8d66bce7d68af6b32c4f192b7a Mon Sep 17 00:00:00 2001 From: Matt Hensley <130569+matt-hensley@users.noreply.github.com> Date: Mon, 12 Aug 2024 12:11:39 -0400 Subject: [PATCH] Remove workaround for stable service.instance.id across signals (#108) --- CHANGELOG.md | 5 ++ .../GrafanaOpenTelemetrySettings.cs | 10 +--- .../ResourceBuilderExtension.cs | 5 +- .../GrafanaOpenTelemetrySettingsTest.cs | 9 ---- .../ResourceBuilderExtensionTest.cs | 53 +++++++++++++++++++ 5 files changed, 63 insertions(+), 19 deletions(-) create mode 100644 tests/Grafana.OpenTelemetry.Tests/ResourceBuilderExtensionTest.cs diff --git a/CHANGELOG.md b/CHANGELOG.md index 43cd743..9b7e0df 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## Unreleased + +* Remove workaround for stable `service.instance.id` across signals + ([#108](https://github.com/grafana/grafana-opentelemetry-dotnet/pull/108)) + ## 0.9.0-beta.1 ### BREAKING CHANGES diff --git a/src/Grafana.OpenTelemetry.Base/GrafanaOpenTelemetrySettings.cs b/src/Grafana.OpenTelemetry.Base/GrafanaOpenTelemetrySettings.cs index 363595b..e6f76bc 100644 --- a/src/Grafana.OpenTelemetry.Base/GrafanaOpenTelemetrySettings.cs +++ b/src/Grafana.OpenTelemetry.Base/GrafanaOpenTelemetrySettings.cs @@ -19,14 +19,6 @@ public class GrafanaOpenTelemetrySettings internal const string DisableInstrumentationsEnvVarName = "GRAFANA_DOTNET_DISABLE_INSTRUMENTATIONS"; internal const string ServiceNameEnvVarName = "OTEL_SERVICE_NAME"; - // As a workaround, a static random service instance id is initialized and used as default. - // This is to avoid different instance ids to be created by provider builders for different - // signals. - // - // This can be removed once the related issue is resolved: - // https://github.com/open-telemetry/opentelemetry-dotnet/issues/4871 - internal static string DefaultServiceInstanceId = Guid.NewGuid().ToString(); - /// /// Gets or sets the exporter settings for sending telemetry data to Grafana. /// @@ -66,7 +58,7 @@ public class GrafanaOpenTelemetrySettings /// /// This corresponds to the `service.instance.id` resource attribute. /// - public string ServiceInstanceId { get; set; } = DefaultServiceInstanceId; + public string ServiceInstanceId { get; set; } /// /// Gets or sets the name of the deployment environment ("staging" or "production"). diff --git a/src/Grafana.OpenTelemetry.Base/ResourceBuilderExtension.cs b/src/Grafana.OpenTelemetry.Base/ResourceBuilderExtension.cs index f3b58b9..72c9f1e 100644 --- a/src/Grafana.OpenTelemetry.Base/ResourceBuilderExtension.cs +++ b/src/Grafana.OpenTelemetry.Base/ResourceBuilderExtension.cs @@ -11,12 +11,15 @@ internal static class ResourceBuilderExtension { public static ResourceBuilder AddGrafanaResource(this ResourceBuilder resourceBuilder, GrafanaOpenTelemetrySettings settings) { + var serviceInstanceIdProvided = !string.IsNullOrEmpty(settings.ServiceInstanceId); + return resourceBuilder .AddDetector(new GrafanaOpenTelemetryResourceDetector(settings)) .AddService( serviceName: settings.ServiceName, serviceVersion: settings.ServiceVersion, - serviceInstanceId: settings.ServiceInstanceId); + serviceInstanceId: serviceInstanceIdProvided ? settings.ServiceInstanceId : null, + autoGenerateServiceInstanceId: serviceInstanceIdProvided == false); } } diff --git a/tests/Grafana.OpenTelemetry.Tests/GrafanaOpenTelemetrySettingsTest.cs b/tests/Grafana.OpenTelemetry.Tests/GrafanaOpenTelemetrySettingsTest.cs index 2d4f3bd..4f501c8 100644 --- a/tests/Grafana.OpenTelemetry.Tests/GrafanaOpenTelemetrySettingsTest.cs +++ b/tests/Grafana.OpenTelemetry.Tests/GrafanaOpenTelemetrySettingsTest.cs @@ -65,15 +65,6 @@ public void DisableInstrumentationsColon() Assert.DoesNotContain(Instrumentation.NetRuntime, settings.Instrumentations); } - [Fact] - public void StableServiceInstanceId() - { - var settings1 = new GrafanaOpenTelemetrySettings(); - var settings2 = new GrafanaOpenTelemetrySettings(); - - Assert.Equal(settings1.ServiceInstanceId, settings2.ServiceInstanceId); - } - [Fact] public void DefaultServiceName() { diff --git a/tests/Grafana.OpenTelemetry.Tests/ResourceBuilderExtensionTest.cs b/tests/Grafana.OpenTelemetry.Tests/ResourceBuilderExtensionTest.cs new file mode 100644 index 0000000..379e73c --- /dev/null +++ b/tests/Grafana.OpenTelemetry.Tests/ResourceBuilderExtensionTest.cs @@ -0,0 +1,53 @@ +// +// Copyright Grafana Labs +// SPDX-License-Identifier: Apache-2.0 +// + +using System.Linq; +using OpenTelemetry.Resources; +using Xunit; + +namespace Grafana.OpenTelemetry.Tests +{ + public class ResourceBuilderExtensionTest + { + [Fact] + public void StableServiceInstanceId() + { + var resource1 = ResourceBuilder + .CreateEmpty() + .AddGrafanaResource(new GrafanaOpenTelemetrySettings()) + .Build() + .Attributes + .ToDictionary(x => x.Key, x => x.Value); + var resource2 = ResourceBuilder + .CreateEmpty() + .AddGrafanaResource(new GrafanaOpenTelemetrySettings()) + .Build() + .Attributes + .ToDictionary(x => x.Key, x => x.Value); + + Assert.NotNull(resource1["service.instance.id"]); + Assert.NotNull(resource2["service.instance.id"]); + Assert.Equal(resource1["service.instance.id"], resource2["service.instance.id"]); + } + + [Fact] + public void OverrideServiceInstanceId() + { + var settings = new GrafanaOpenTelemetrySettings + { + ServiceInstanceId = "test-id" + }; + var resource1 = ResourceBuilder + .CreateEmpty() + .AddGrafanaResource(settings) + .Build() + .Attributes + .ToDictionary(x => x.Key, x => x.Value); + + Assert.NotNull(resource1["service.instance.id"]); + Assert.Equal(resource1["service.instance.id"], "test-id"); + } + } +}