From 2cb69a12274af1bef57bd9220426ed4fed23e8e1 Mon Sep 17 00:00:00 2001 From: Are Almaas Date: Thu, 24 Oct 2024 12:29:51 +0200 Subject: [PATCH 1/4] chore(web-api): separate the telemetry-configuration into aspnet package --- .../WebApplicationBuilderExtensions.cs | 49 ------------------- .../Digdir.Domain.Dialogporten.WebApi.csproj | 5 -- .../AspNetUtilitiesExtensions.cs | 49 ++++++++++++++++++- .../Digdir.Library.Utils.AspNet.csproj | 5 ++ 4 files changed, 52 insertions(+), 56 deletions(-) delete mode 100644 src/Digdir.Domain.Dialogporten.WebApi/Common/Extensions/WebApplicationBuilderExtensions.cs diff --git a/src/Digdir.Domain.Dialogporten.WebApi/Common/Extensions/WebApplicationBuilderExtensions.cs b/src/Digdir.Domain.Dialogporten.WebApi/Common/Extensions/WebApplicationBuilderExtensions.cs deleted file mode 100644 index 88b734912..000000000 --- a/src/Digdir.Domain.Dialogporten.WebApi/Common/Extensions/WebApplicationBuilderExtensions.cs +++ /dev/null @@ -1,49 +0,0 @@ -using Azure.Monitor.OpenTelemetry.AspNetCore; -using OpenTelemetry.Trace; -using Npgsql; -using OpenTelemetry.Metrics; -using OpenTelemetry.Resources; - -namespace Digdir.Domain.Dialogporten.WebApi.Common.Extensions; - -internal static class WebApplicationBuilderExtensions -{ - public static WebApplicationBuilder ConfigureTelemetry(this WebApplicationBuilder builder) - { - builder.Services.AddOpenTelemetry() - .ConfigureResource(resource => resource - .AddService(serviceName: builder.Environment.ApplicationName)) - .WithTracing(tracing => - { - if (builder.Environment.IsDevelopment()) - { - tracing.SetSampler(new AlwaysOnSampler()); - } - - tracing.AddAspNetCoreInstrumentation(options => - { - options.Filter = (httpContext) => - !httpContext.Request.Path.StartsWithSegments("/health"); - }); - - tracing.AddHttpClientInstrumentation(); - tracing.AddNpgsql(); - }) - .WithMetrics(metrics => - { - metrics.AddRuntimeInstrumentation(); - }); - - if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("APPLICATIONINSIGHTS_CONNECTION_STRING"))) - { - builder.Services.AddOpenTelemetry().UseAzureMonitor(); - } - else - { - // Use Application Insights SDK for local development - builder.Services.AddApplicationInsightsTelemetry(); - } - - return builder; - } -} diff --git a/src/Digdir.Domain.Dialogporten.WebApi/Digdir.Domain.Dialogporten.WebApi.csproj b/src/Digdir.Domain.Dialogporten.WebApi/Digdir.Domain.Dialogporten.WebApi.csproj index 31715419d..e84cc903e 100644 --- a/src/Digdir.Domain.Dialogporten.WebApi/Digdir.Domain.Dialogporten.WebApi.csproj +++ b/src/Digdir.Domain.Dialogporten.WebApi/Digdir.Domain.Dialogporten.WebApi.csproj @@ -8,17 +8,12 @@ - - - - - diff --git a/src/Digdir.Library.Utils.AspNet/AspNetUtilitiesExtensions.cs b/src/Digdir.Library.Utils.AspNet/AspNetUtilitiesExtensions.cs index e5e4d0b4c..dd108c44b 100644 --- a/src/Digdir.Library.Utils.AspNet/AspNetUtilitiesExtensions.cs +++ b/src/Digdir.Library.Utils.AspNet/AspNetUtilitiesExtensions.cs @@ -1,9 +1,15 @@ +using Azure.Monitor.OpenTelemetry.AspNetCore; using Digdir.Library.Utils.AspNet.HealthChecks; using HealthChecks.UI.Client; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Diagnostics.HealthChecks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Diagnostics.HealthChecks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Diagnostics.HealthChecks; +using Microsoft.Extensions.Hosting; +using Npgsql; +using OpenTelemetry.Trace; +using OpenTelemetry.Metrics; +using OpenTelemetry.Resources; namespace Digdir.Library.Utils.AspNet; @@ -40,4 +46,43 @@ private static WebApplication MapHealthCheckEndpoint(this WebApplication app, st app.MapHealthChecks(path, new HealthCheckOptions { Predicate = predicate, ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse }); return app; } + + public static WebApplicationBuilder ConfigureTelemetry(this WebApplicationBuilder builder) + { + builder.Services.AddOpenTelemetry() + .ConfigureResource(resource => resource + .AddService(serviceName: builder.Environment.ApplicationName)) + .WithTracing(tracing => + { + if (builder.Environment.IsDevelopment()) + { + tracing.SetSampler(new AlwaysOnSampler()); + } + + tracing.AddAspNetCoreInstrumentation(options => + { + options.Filter = (httpContext) => + !httpContext.Request.Path.StartsWithSegments("/health"); + }); + + tracing.AddHttpClientInstrumentation(); + tracing.AddNpgsql(); + }) + .WithMetrics(metrics => + { + metrics.AddRuntimeInstrumentation(); + }); + + if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("APPLICATIONINSIGHTS_CONNECTION_STRING"))) + { + builder.Services.AddOpenTelemetry().UseAzureMonitor(); + } + else + { + // Use Application Insights SDK for local development + builder.Services.AddApplicationInsightsTelemetry(); + } + + return builder; + } } diff --git a/src/Digdir.Library.Utils.AspNet/Digdir.Library.Utils.AspNet.csproj b/src/Digdir.Library.Utils.AspNet/Digdir.Library.Utils.AspNet.csproj index 3695da595..97901c576 100644 --- a/src/Digdir.Library.Utils.AspNet/Digdir.Library.Utils.AspNet.csproj +++ b/src/Digdir.Library.Utils.AspNet/Digdir.Library.Utils.AspNet.csproj @@ -7,9 +7,14 @@ + + + + + From 83daf418cd040b591d748f5f546cde45600383c3 Mon Sep 17 00:00:00 2001 From: Are Almaas Date: Thu, 24 Oct 2024 13:21:11 +0200 Subject: [PATCH 2/4] bb --- src/Digdir.Library.Utils.AspNet/AspNetUtilitiesExtensions.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Digdir.Library.Utils.AspNet/AspNetUtilitiesExtensions.cs b/src/Digdir.Library.Utils.AspNet/AspNetUtilitiesExtensions.cs index dd108c44b..6871f9659 100644 --- a/src/Digdir.Library.Utils.AspNet/AspNetUtilitiesExtensions.cs +++ b/src/Digdir.Library.Utils.AspNet/AspNetUtilitiesExtensions.cs @@ -67,6 +67,7 @@ public static WebApplicationBuilder ConfigureTelemetry(this WebApplicationBuilde tracing.AddHttpClientInstrumentation(); tracing.AddNpgsql(); + tracing.AddSource(DiagnosticHeaders.DefaultListenerName); // MassTransit ActivitySource }) .WithMetrics(metrics => { From 3347cefe3587bd137db5cfc9fdacc6ff530df501 Mon Sep 17 00:00:00 2001 From: Are Almaas Date: Thu, 24 Oct 2024 13:31:42 +0200 Subject: [PATCH 3/4] feat(utils): configure open telemetry tracing for masstransit in aspnet package --- src/Digdir.Library.Utils.AspNet/AspNetUtilitiesExtensions.cs | 1 + .../Digdir.Library.Utils.AspNet.csproj | 1 + 2 files changed, 2 insertions(+) diff --git a/src/Digdir.Library.Utils.AspNet/AspNetUtilitiesExtensions.cs b/src/Digdir.Library.Utils.AspNet/AspNetUtilitiesExtensions.cs index 6871f9659..b17974140 100644 --- a/src/Digdir.Library.Utils.AspNet/AspNetUtilitiesExtensions.cs +++ b/src/Digdir.Library.Utils.AspNet/AspNetUtilitiesExtensions.cs @@ -10,6 +10,7 @@ using OpenTelemetry.Trace; using OpenTelemetry.Metrics; using OpenTelemetry.Resources; +using MassTransit.Logging; namespace Digdir.Library.Utils.AspNet; diff --git a/src/Digdir.Library.Utils.AspNet/Digdir.Library.Utils.AspNet.csproj b/src/Digdir.Library.Utils.AspNet/Digdir.Library.Utils.AspNet.csproj index 97901c576..7a8115c8d 100644 --- a/src/Digdir.Library.Utils.AspNet/Digdir.Library.Utils.AspNet.csproj +++ b/src/Digdir.Library.Utils.AspNet/Digdir.Library.Utils.AspNet.csproj @@ -8,6 +8,7 @@ + From 747a459ec931fbcb64dbb7b72316b284888e3adc Mon Sep 17 00:00:00 2001 From: Magnus Sandgren <5285192+MagnusSandgren@users.noreply.github.com> Date: Thu, 24 Oct 2024 15:42:29 +0200 Subject: [PATCH 4/4] Remove MassTransit dependency, use our own const. --- src/Digdir.Library.Utils.AspNet/AspNetUtilitiesExtensions.cs | 5 +++-- .../Digdir.Library.Utils.AspNet.csproj | 1 - 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Digdir.Library.Utils.AspNet/AspNetUtilitiesExtensions.cs b/src/Digdir.Library.Utils.AspNet/AspNetUtilitiesExtensions.cs index b17974140..0728a0bee 100644 --- a/src/Digdir.Library.Utils.AspNet/AspNetUtilitiesExtensions.cs +++ b/src/Digdir.Library.Utils.AspNet/AspNetUtilitiesExtensions.cs @@ -10,12 +10,13 @@ using OpenTelemetry.Trace; using OpenTelemetry.Metrics; using OpenTelemetry.Resources; -using MassTransit.Logging; namespace Digdir.Library.Utils.AspNet; public static class AspNetUtilitiesExtensions { + private const string MassTransitSource = "MassTransit"; + public static IServiceCollection AddAspNetHealthChecks(this IServiceCollection services, Action? configure = null) { var optionsBuilder = services.AddOptions(); @@ -68,7 +69,7 @@ public static WebApplicationBuilder ConfigureTelemetry(this WebApplicationBuilde tracing.AddHttpClientInstrumentation(); tracing.AddNpgsql(); - tracing.AddSource(DiagnosticHeaders.DefaultListenerName); // MassTransit ActivitySource + tracing.AddSource(MassTransitSource); // MassTransit ActivitySource }) .WithMetrics(metrics => { diff --git a/src/Digdir.Library.Utils.AspNet/Digdir.Library.Utils.AspNet.csproj b/src/Digdir.Library.Utils.AspNet/Digdir.Library.Utils.AspNet.csproj index 7a8115c8d..97901c576 100644 --- a/src/Digdir.Library.Utils.AspNet/Digdir.Library.Utils.AspNet.csproj +++ b/src/Digdir.Library.Utils.AspNet/Digdir.Library.Utils.AspNet.csproj @@ -8,7 +8,6 @@ -