diff --git a/eng/Packages.Data.props b/eng/Packages.Data.props index 002f38fb427a..e1eb5bdc4242 100644 --- a/eng/Packages.Data.props +++ b/eng/Packages.Data.props @@ -168,9 +168,9 @@ - - - + + + @@ -334,7 +334,7 @@ - + diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.AspNetCore/CHANGELOG.md b/sdk/monitor/Azure.Monitor.OpenTelemetry.AspNetCore/CHANGELOG.md index 445e7fa8229d..a7480f5631e8 100644 --- a/sdk/monitor/Azure.Monitor.OpenTelemetry.AspNetCore/CHANGELOG.md +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.AspNetCore/CHANGELOG.md @@ -10,6 +10,17 @@ ### Other Changes +* Update OpenTelemetry dependencies + ([#43197](https://github.com/Azure/azure-sdk-for-net/pull/43197)) + - OpenTelemetry 1.8.0 + - OpenTelemetry.Extensions.Hosting 1.8.0 + +* Removed the necessity for custom resource attributes configuration in + OpenTelemetry logging setup, as the OpenTelemetry .NET SDK's enhancements to + the builder.ConfigureResource method now uniformly set resource attributes + across logs, metrics, and traces. + ([#43197](https://github.com/Azure/azure-sdk-for-net/pull/43197)) + ## 1.2.0-beta.2 (2024-03-12) ### Features Added @@ -25,7 +36,7 @@ documentation. ([#42307](https://github.com/Azure/azure-sdk-for-net/pull/42307)) -- Enabled support for log collection from Azure SDKs via `Microsoft.Extensions.Logging`. See [Logging with the Azure SDK for .NET](https://learn.microsoft.com/dotnet/azure/sdk/logging) +* Enabled support for log collection from Azure SDKs via `Microsoft.Extensions.Logging`. See [Logging with the Azure SDK for .NET](https://learn.microsoft.com/dotnet/azure/sdk/logging) for the details. ([#42374](https://github.com/Azure/azure-sdk-for-net/pull/42374)) @@ -64,7 +75,7 @@ property can be set to `false` to disable live metrics. ([#41872](https://github.com/Azure/azure-sdk-for-net/pull/41872)) -- Added an experimental feature for logs emitted within an active tracing +* Added an experimental feature for logs emitted within an active tracing context to follow the Activity's sampling decision. The feature can be enabled by setting `OTEL_DOTNET_AZURE_MONITOR_EXPERIMENTAL_ENABLE_LOG_SAMPLING` environment variable to `true`. diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.AspNetCore/src/OpenTelemetryBuilderExtensions.cs b/sdk/monitor/Azure.Monitor.OpenTelemetry.AspNetCore/src/OpenTelemetryBuilderExtensions.cs index e4e836eb367c..95f6a55bf877 100644 --- a/sdk/monitor/Azure.Monitor.OpenTelemetry.AspNetCore/src/OpenTelemetryBuilderExtensions.cs +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.AspNetCore/src/OpenTelemetryBuilderExtensions.cs @@ -49,7 +49,12 @@ public static class OpenTelemetryBuilderExtensions /// SQL Client. /// /// +#pragma warning disable CS0618 // Type or member is obsolete + // Note: OpenTelemetryBuilder is obsolete because users should target + // IOpenTelemetryBuilder for extensions but this method is valid and + // expected to be called to obtain a root builder. public static OpenTelemetryBuilder UseAzureMonitor(this OpenTelemetryBuilder builder) +#pragma warning restore CS0618 // Type or member is obsolete { builder.Services.TryAddSingleton, DefaultAzureMonitorOptions>(); @@ -76,7 +81,12 @@ public static OpenTelemetryBuilder UseAzureMonitor(this OpenTelemetryBuilder bui /// SQL Client. /// /// +#pragma warning disable CS0618 // Type or member is obsolete + // Note: OpenTelemetryBuilder is obsolete because users should target + // IOpenTelemetryBuilder for extensions but this method is valid and + // expected to be called to obtain a root builder. public static OpenTelemetryBuilder UseAzureMonitor(this OpenTelemetryBuilder builder, Action configureAzureMonitor) +#pragma warning restore CS0618 // Type or member is obsolete { if (builder.Services == null) { @@ -126,10 +136,6 @@ public static OpenTelemetryBuilder UseAzureMonitor(this OpenTelemetryBuilder bui { logging.AddOpenTelemetry(builderOptions => { - var resourceBuilder = ResourceBuilder.CreateDefault(); - configureResource(resourceBuilder); - builderOptions.SetResourceBuilder(resourceBuilder); - builderOptions.IncludeFormattedMessage = true; }); }); @@ -205,30 +211,16 @@ public static OpenTelemetryBuilder UseAzureMonitor(this OpenTelemetryBuilder bui private static TracerProviderBuilder AddVendorInstrumentationIfPackageNotReferenced(this TracerProviderBuilder tracerProviderBuilder) { - var vendorInstrumentationActions = new Dictionary + try { - { SqlClientInstrumentationPackageName, () => tracerProviderBuilder.AddSqlClientInstrumentation() }, - }; - - foreach (var packageActionPair in vendorInstrumentationActions) + var instrumentationAssembly = Assembly.Load(SqlClientInstrumentationPackageName); + AzureMonitorAspNetCoreEventSource.Log.FoundInstrumentationPackageReference(SqlClientInstrumentationPackageName); + } + catch { - Assembly? instrumentationAssembly = null; - - try - { - instrumentationAssembly = Assembly.Load(packageActionPair.Key); - AzureMonitorAspNetCoreEventSource.Log.FoundInstrumentationPackageReference(packageActionPair.Key); - } - catch - { - AzureMonitorAspNetCoreEventSource.Log.NoInstrumentationPackageReference(packageActionPair.Key); - } - - if (instrumentationAssembly == null) - { - packageActionPair.Value.Invoke(); - AzureMonitorAspNetCoreEventSource.Log.VendorInstrumentationAdded(packageActionPair.Key); - } + AzureMonitorAspNetCoreEventSource.Log.NoInstrumentationPackageReference(SqlClientInstrumentationPackageName); + tracerProviderBuilder.AddSqlClientInstrumentation(); + AzureMonitorAspNetCoreEventSource.Log.VendorInstrumentationAdded(SqlClientInstrumentationPackageName); } return tracerProviderBuilder; diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/CHANGELOG.md b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/CHANGELOG.md index 692572933b3d..7594de804869 100644 --- a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/CHANGELOG.md +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/CHANGELOG.md @@ -14,6 +14,10 @@ ### Other Changes +* Update OpenTelemetry dependencies + ([#43197](https://github.com/Azure/azure-sdk-for-net/pull/43197)) + - OpenTelemetry 1.8.0 + ## 1.3.0-beta.1 (2024-02-08) ### Bugs Fixed diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/src/LiveMetricsActivityProcessor.cs b/sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/src/LiveMetricsActivityProcessor.cs index b477347deb61..2f29298a79d9 100644 --- a/sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/src/LiveMetricsActivityProcessor.cs +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/src/LiveMetricsActivityProcessor.cs @@ -11,7 +11,6 @@ namespace Azure.Monitor.OpenTelemetry.LiveMetrics { internal sealed class LiveMetricsActivityProcessor : BaseProcessor { - private bool _disposed; private LiveMetricsResource? _resource; private readonly Manager _manager; @@ -75,27 +74,6 @@ public override void OnEnd(Activity activity) } } - protected override void Dispose(bool disposing) - { - if (!_disposed) - { - if (disposing) - { - try - { - _manager.Dispose(); - } - catch (System.Exception) - { - } - } - - _disposed = true; - } - - base.Dispose(disposing); - } - private void AddExceptionDocument(string exceptionType, string exceptionMessage) { var exceptionDocumentIngress = DocumentHelper.CreateException(exceptionType, exceptionMessage); diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/src/LiveMetricsExtensions.cs b/sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/src/LiveMetricsExtensions.cs index 22784012e929..3b7d8035becd 100644 --- a/sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/src/LiveMetricsExtensions.cs +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.LiveMetrics/src/LiveMetricsExtensions.cs @@ -45,29 +45,34 @@ public static TracerProviderBuilder AddLiveMetrics( // configuration delegate into options pipeline. services.Configure(finalOptionsName, configure); } - }); - - return builder.AddProcessor(sp => - { - // SETUP OPTIONS - LiveMetricsExporterOptions exporterOptions; - if (name == null) + // Register Manager as a singleton + services.AddSingleton(sp => { - exporterOptions = sp.GetRequiredService>().Create(finalOptionsName); + LiveMetricsExporterOptions exporterOptions; - // Configuration delegate is executed inline on the fresh instance. - configure?.Invoke(exporterOptions); - } - else - { - // When using named options we can properly utilize Options - // API to create or reuse an instance. - exporterOptions = sp.GetRequiredService>().Get(finalOptionsName); - } + if (name == null) + { + exporterOptions = sp.GetRequiredService>().Create(finalOptionsName); + + // Configuration delegate is executed inline on the fresh instance. + configure?.Invoke(exporterOptions); + } + else + { + // When using named options we can properly utilize Options + // API to create or reuse an instance. + exporterOptions = sp.GetRequiredService>().Get(finalOptionsName); + } + + // INITIALIZE INTERNALS + return new Manager(exporterOptions, new DefaultPlatform()); + }); + }); - // INITIALIZE INTERNALS - var manager = new Manager(exporterOptions, new DefaultPlatform()); + return builder.AddProcessor(sp => + { + var manager = sp.GetRequiredService(); return new LiveMetricsActivityProcessor(manager); }); }