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");
+ }
+ }
+}