Add telemetry.sdk.* attributes to default resource (#4369)

This commit is contained in:
Alan West 2023-04-05 17:29:59 -07:00 committed by GitHub
parent 00048957b0
commit b449fa1d15
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 46 additions and 28 deletions

View File

@ -2,6 +2,10 @@
## Unreleased
* The default resource provided by `ResourceBuilder.CreateDefault()` now
adds the `telemetry.sdk.*` attributes defined in the
[specification](https://github.com/open-telemetry/opentelemetry-specification/tree/12fcec1ff255b1535db75708e52a3a21f86f0fae/specification/resource/semantic_conventions#semantic-attributes-with-sdk-provided-default-value).
([#4369](https://github.com/open-telemetry/opentelemetry-dotnet/pull/4369))
* Fixed an issue with `HashCode` computations throwing exceptions on .NET
Standard 2.1 targets.
([#4362](https://github.com/open-telemetry/opentelemetry-dotnet/pull/4362))

View File

@ -59,8 +59,8 @@ namespace OpenTelemetry.Resources
internal IServiceProvider? ServiceProvider { get; set; }
/// <summary>
/// Creates a <see cref="ResourceBuilder"/> instance with Default
/// service.name added. See <a
/// Creates a <see cref="ResourceBuilder"/> instance with default attributes
/// added. See <a
/// href="https://github.com/open-telemetry/opentelemetry-specification/tree/main/specification/resource/semantic_conventions#semantic-attributes-with-sdk-provided-default-value">resource
/// semantic conventions</a> for details.
/// Additionally it adds resource attributes parsed from OTEL_RESOURCE_ATTRIBUTES, OTEL_SERVICE_NAME environment variables
@ -70,7 +70,10 @@ namespace OpenTelemetry.Resources
/// </summary>
/// <returns>Created <see cref="ResourceBuilder"/>.</returns>
public static ResourceBuilder CreateDefault()
=> new ResourceBuilder().AddResource(DefaultResource).AddEnvironmentVariableDetector();
=> new ResourceBuilder()
.AddResource(DefaultResource)
.AddTelemetrySdk()
.AddEnvironmentVariableDetector();
/// <summary>
/// Creates an empty <see cref="ResourceBuilder"/> instance.

View File

@ -395,6 +395,7 @@ namespace OpenTelemetry.Resources.Tests
// Assert
var attributes = resource.Attributes;
Assert.Equal(4, attributes.Count());
ValidateDefaultAttributes(attributes);
ValidateTelemetrySdkAttributes(attributes);
}
@ -406,8 +407,9 @@ namespace OpenTelemetry.Resources.Tests
// Assert
var attributes = resource.Attributes;
Assert.Single(attributes);
Assert.Equal(4, attributes.Count());
ValidateDefaultAttributes(attributes);
ValidateTelemetrySdkAttributes(attributes);
}
[Fact]
@ -418,9 +420,10 @@ namespace OpenTelemetry.Resources.Tests
// Assert
var attributes = resource.Attributes;
Assert.Equal(3, attributes.Count());
Assert.Equal(6, attributes.Count());
ValidateAttributes(attributes, 0, 1);
ValidateDefaultAttributes(attributes);
ValidateTelemetrySdkAttributes(attributes);
}
[Fact]
@ -432,11 +435,12 @@ namespace OpenTelemetry.Resources.Tests
// Assert
var attributes = resource.Attributes;
Assert.Equal(5, attributes.Count());
Assert.Equal(8, attributes.Count());
ValidateAttributes(attributes, 0, 1);
ValidateDefaultAttributes(attributes);
Assert.Contains(new KeyValuePair<string, object>("EVKey1", "EVVal1"), attributes);
Assert.Contains(new KeyValuePair<string, object>("EVKey2", "EVVal2"), attributes);
ValidateTelemetrySdkAttributes(attributes);
}
[Fact]
@ -448,9 +452,10 @@ namespace OpenTelemetry.Resources.Tests
// Assert
var attributes = resource.Attributes;
Assert.Equal(3, attributes.Count());
Assert.Equal(6, attributes.Count());
Assert.Contains(new KeyValuePair<string, object>("EVKey1", "EVVal1"), attributes);
Assert.Contains(new KeyValuePair<string, object>("EVKey2", "EVVal2"), attributes);
ValidateTelemetrySdkAttributes(attributes);
}
[Fact]
@ -462,9 +467,10 @@ namespace OpenTelemetry.Resources.Tests
// Assert
var attributes = resource.Attributes;
Assert.Equal(3, attributes.Count());
Assert.Equal(6, attributes.Count());
ValidateAttributes(attributes, 0, 1);
Assert.Contains(new KeyValuePair<string, object>("service.name", "some-service"), attributes);
ValidateTelemetrySdkAttributes(attributes);
}
[Fact]
@ -477,9 +483,10 @@ namespace OpenTelemetry.Resources.Tests
// Assert
var attributes = resource.Attributes;
Assert.Equal(3, attributes.Count());
Assert.Equal(6, attributes.Count());
ValidateAttributes(attributes, 0, 1);
Assert.Contains(new KeyValuePair<string, object>("service.name", "from-service-name"), attributes);
ValidateTelemetrySdkAttributes(attributes);
}
[Fact]
@ -492,9 +499,10 @@ namespace OpenTelemetry.Resources.Tests
// Assert
var attributes = resource.Attributes;
Assert.Equal(4, attributes.Count());
Assert.Equal(7, attributes.Count());
ValidateAttributes(attributes, 0, 1);
Assert.Contains(new KeyValuePair<string, object>("service.name", "from-code"), attributes);
ValidateTelemetrySdkAttributes(attributes);
}
[Fact]
@ -562,6 +570,21 @@ namespace OpenTelemetry.Resources.Tests
Assert.True(validTestRun);
}
internal static void ValidateTelemetrySdkAttributes(IEnumerable<KeyValuePair<string, object>> attributes)
{
Assert.Contains(new KeyValuePair<string, object>("telemetry.sdk.name", "opentelemetry"), attributes);
Assert.Contains(new KeyValuePair<string, object>("telemetry.sdk.language", "dotnet"), attributes);
var versionAttribute = attributes.Where(pair => pair.Key.Equals("telemetry.sdk.version"));
Assert.Single(versionAttribute);
}
internal static void ValidateDefaultAttributes(IEnumerable<KeyValuePair<string, object>> attributes)
{
var serviceName = attributes.Where(pair => pair.Key.Equals("service.name"));
Assert.Single(serviceName);
Assert.Contains("unknown_service", serviceName.FirstOrDefault().Value as string);
}
private static void ClearEnvVars()
{
Environment.SetEnvironmentVariable(OtelEnvResourceDetector.EnvVarKey, null);
@ -594,21 +617,6 @@ namespace OpenTelemetry.Resources.Tests
ValidateAttributes(resource.Attributes);
}
private static void ValidateTelemetrySdkAttributes(IEnumerable<KeyValuePair<string, object>> attributes)
{
Assert.Contains(new KeyValuePair<string, object>("telemetry.sdk.name", "opentelemetry"), attributes);
Assert.Contains(new KeyValuePair<string, object>("telemetry.sdk.language", "dotnet"), attributes);
var versionAttribute = attributes.Where(pair => pair.Key.Equals("telemetry.sdk.version"));
Assert.Single(versionAttribute);
}
private static void ValidateDefaultAttributes(IEnumerable<KeyValuePair<string, object>> attributes)
{
var serviceName = attributes.Where(pair => pair.Key.Equals("service.name"));
Assert.Single(serviceName);
Assert.Contains("unknown_service", serviceName.FirstOrDefault().Value as string);
}
private static Dictionary<string, object> CreateAttributes(int attributeCount, int startIndex = 0)
{
var attributes = new Dictionary<string, object>();

View File

@ -17,6 +17,7 @@
using System.Diagnostics;
using OpenTelemetry.Instrumentation;
using OpenTelemetry.Resources;
using OpenTelemetry.Resources.Tests;
using OpenTelemetry.Tests;
using Xunit;
@ -1077,9 +1078,11 @@ namespace OpenTelemetry.Trace.Tests
Assert.NotNull(resource);
Assert.NotEqual(Resource.Empty, resource);
Assert.Single(resource.Attributes);
Assert.Equal(ResourceSemanticConventions.AttributeServiceName, resource.Attributes.FirstOrDefault().Key);
Assert.Contains("unknown_service", (string)resource.Attributes.FirstOrDefault().Value);
var attributes = resource.Attributes;
Assert.Equal(4, attributes.Count());
ResourceTest.ValidateDefaultAttributes(attributes);
ResourceTest.ValidateTelemetrySdkAttributes(attributes);
}
[Theory]