From 516de21a7edab118290d53ecc5b45b5acf005f13 Mon Sep 17 00:00:00 2001 From: Sumit Ghosh <13281246+sughosneo@users.noreply.github.com> Date: Fri, 9 Apr 2021 16:01:38 +0530 Subject: [PATCH] Refactored opentelemetry module to a common project --- .../Mobile.Bff.Shopping/aggregator/Dockerfile | 1 + .../Web.Bff.Shopping/aggregator/Dockerfile | 1 + .../Extensions/OpenTelemetryExtensions.cs | 117 ++++++++++++++++++ .../OpenTelemetry.Customization.csproj | 22 ++++ src/OpenTelemetry/OpenTelemetryConfig.cs | 18 +++ .../Basket/Basket.API/Basket.API.csproj | 8 ++ src/Services/Basket/Basket.API/Dockerfile | 2 + .../Extensions/OpenTelemetryExtensions.cs | 69 ----------- src/Services/Basket/Basket.API/Startup.cs | 13 +- .../Catalog/Catalog.API/Catalog.API.csproj | 17 +-- src/Services/Catalog/Catalog.API/Dockerfile | 1 + .../Extensions/OpenTelemetryExtensions.cs | 68 ---------- src/Services/Catalog/Catalog.API/Startup.cs | 8 +- src/Services/Identity/Identity.API/Dockerfile | 1 + .../Extensions/OpenTelemetryExtensions.cs | 70 ----------- .../Identity/Identity.API/Identity.API.csproj | 18 ++- src/Services/Identity/Identity.API/Startup.cs | 10 +- src/Services/Ordering/Ordering.API/Dockerfile | 1 + .../Extensions/OpenTelemetryExtensions.cs | 70 ----------- .../Ordering/Ordering.API/Ordering.API.csproj | 5 + src/Services/Ordering/Ordering.API/Startup.cs | 14 ++- .../Ordering.BackgroundTasks/Dockerfile | 1 + .../Ordering/Ordering.SignalrHub/Dockerfile | 1 + src/Services/Payment/Payment.API/Dockerfile | 1 + .../Extensions/OpenTelemetryExtensions.cs | 14 +-- .../Payment/Payment.API/Payment.API.csproj | 8 ++ src/Services/Payment/Payment.API/Startup.cs | 12 +- src/Services/Webhooks/Webhooks.API/Dockerfile | 1 + src/Services/Webhooks/Webhooks.API/Startup.cs | 9 ++ .../Webhooks/Webhooks.API/Webhooks.API.csproj | 1 + src/Web/WebMVC/Dockerfile | 1 + src/Web/WebMVC/Startup.cs | 12 +- src/Web/WebMVC/WebMVC.csproj | 5 + src/Web/WebSPA/Dockerfile | 1 + src/Web/WebSPA/Startup.cs | 11 +- src/Web/WebSPA/WebSPA.csproj | 7 ++ src/Web/WebStatus/Dockerfile | 1 + src/Web/WebhookClient/Dockerfile | 1 + src/docker-compose.opentelemetry.jaeger.yml | 14 +-- src/docker-compose.opentelemetry.otlp.yml | 6 +- src/docker-compose.opentelemetry.zipkin.yml | 21 ++-- src/eShopOnContainers-ServicesAndWebApps.sln | 54 ++++++++ 42 files changed, 372 insertions(+), 344 deletions(-) create mode 100644 src/OpenTelemetry/Extensions/OpenTelemetryExtensions.cs create mode 100644 src/OpenTelemetry/OpenTelemetry.Customization.csproj create mode 100644 src/OpenTelemetry/OpenTelemetryConfig.cs delete mode 100644 src/Services/Basket/Basket.API/Extensions/OpenTelemetryExtensions.cs delete mode 100644 src/Services/Catalog/Catalog.API/Extensions/OpenTelemetryExtensions.cs delete mode 100644 src/Services/Identity/Identity.API/Extensions/OpenTelemetryExtensions.cs delete mode 100644 src/Services/Ordering/Ordering.API/Extensions/OpenTelemetryExtensions.cs diff --git a/src/ApiGateways/Mobile.Bff.Shopping/aggregator/Dockerfile b/src/ApiGateways/Mobile.Bff.Shopping/aggregator/Dockerfile index ee0370910..509a10fee 100644 --- a/src/ApiGateways/Mobile.Bff.Shopping/aggregator/Dockerfile +++ b/src/ApiGateways/Mobile.Bff.Shopping/aggregator/Dockerfile @@ -38,6 +38,7 @@ COPY "Web/WebhookClient/WebhookClient.csproj" "Web/WebhookClient/WebhookClient.c COPY "Web/WebMVC/WebMVC.csproj" "Web/WebMVC/WebMVC.csproj" COPY "Web/WebSPA/WebSPA.csproj" "Web/WebSPA/WebSPA.csproj" COPY "Web/WebStatus/WebStatus.csproj" "Web/WebStatus/WebStatus.csproj" +COPY "OpenTelemetry/OpenTelemetry.Customization.csproj" "OpenTelemetry/OpenTelemetry.Customization.csproj" COPY "docker-compose.dcproj" "docker-compose.dcproj" diff --git a/src/ApiGateways/Web.Bff.Shopping/aggregator/Dockerfile b/src/ApiGateways/Web.Bff.Shopping/aggregator/Dockerfile index 5736c19f7..b343b978f 100644 --- a/src/ApiGateways/Web.Bff.Shopping/aggregator/Dockerfile +++ b/src/ApiGateways/Web.Bff.Shopping/aggregator/Dockerfile @@ -38,6 +38,7 @@ COPY "Web/WebhookClient/WebhookClient.csproj" "Web/WebhookClient/WebhookClient.c COPY "Web/WebMVC/WebMVC.csproj" "Web/WebMVC/WebMVC.csproj" COPY "Web/WebSPA/WebSPA.csproj" "Web/WebSPA/WebSPA.csproj" COPY "Web/WebStatus/WebStatus.csproj" "Web/WebStatus/WebStatus.csproj" +COPY "OpenTelemetry/OpenTelemetry.Customization.csproj" "OpenTelemetry/OpenTelemetry.Customization.csproj" COPY "docker-compose.dcproj" "docker-compose.dcproj" diff --git a/src/OpenTelemetry/Extensions/OpenTelemetryExtensions.cs b/src/OpenTelemetry/Extensions/OpenTelemetryExtensions.cs new file mode 100644 index 000000000..d12a564ad --- /dev/null +++ b/src/OpenTelemetry/Extensions/OpenTelemetryExtensions.cs @@ -0,0 +1,117 @@ +using Microsoft.Extensions.DependencyInjection; +using OpenTelemetry; +using OpenTelemetry.Resources; +using OpenTelemetry.Trace; +using StackExchange.Redis; +using System; + +namespace OpenTelemetry.Customization.Extensions +{ + public static class OpenTelemetryExtensions + { + public static IServiceCollection AddOpenTelemetry(this IServiceCollection services, OpenTelemetryConfig openTelemetryConfig) + { + if (openTelemetryConfig == null || openTelemetryConfig.ExportType == null) + { + return services; + } + + return services.AddOpenTelemetryTracing((serviceProvider, tracerProviderBuilder) => + { + // Configure resource + tracerProviderBuilder + .SetResourceBuilder(ResourceBuilder.CreateDefault().AddService(openTelemetryConfig.ServiceName)); + + // Configure instrumentation + tracerProviderBuilder + .AddAspNetCoreInstrumentation() + .AddHttpClientInstrumentation() + .AddGrpcClientInstrumentation() + .AddSqlClientInstrumentation(); + + // Configure exporter + switch (openTelemetryConfig.ExportType) + { + case "jaeger": + tracerProviderBuilder.AddJaegerExporter(options => + { + options.AgentHost = openTelemetryConfig.ExportToolEndpoint; + }); + break; + case "otlp": + tracerProviderBuilder.AddOtlpExporter(options => + { + options.Endpoint = new Uri(openTelemetryConfig.ExportToolEndpoint); + + var headers = Environment.GetEnvironmentVariable("OTEL_EXPORTER_OTLP_TRACES_HEADERS") + ?? Environment.GetEnvironmentVariable("OTEL_EXPORTER_OTLP_HEADERS"); + options.Headers = headers; + }); + break; + case "zipkin": + tracerProviderBuilder.AddZipkinExporter(options => + { + options.Endpoint = new Uri(openTelemetryConfig.ExportToolEndpoint); + }); + break; + default: + tracerProviderBuilder.AddConsoleExporter(); + break; + } + }); + } + + public static void AddOpenTelemetry(ConnectionMultiplexer connectionMultiplexer, OpenTelemetryConfig openTelemetryConfig) + { + + if (openTelemetryConfig == null || openTelemetryConfig.ExportType == null) + { + return; + } + + var tracerProviderBuilder = Sdk.CreateTracerProviderBuilder(); + + // Configure resource + tracerProviderBuilder + .SetResourceBuilder(ResourceBuilder.CreateDefault().AddService(openTelemetryConfig.ServiceName)); + + // Configure instrumentation + tracerProviderBuilder + .AddAspNetCoreInstrumentation() + .AddHttpClientInstrumentation() + .AddRedisInstrumentation(connectionMultiplexer); + + // Configure exporter + switch (openTelemetryConfig.ExportType) + { + case "jaeger": + tracerProviderBuilder.AddJaegerExporter(options => + { + options.AgentHost = openTelemetryConfig.ExportToolEndpoint; + }); + break; + case "otlp": + tracerProviderBuilder.AddOtlpExporter(options => + { + options.Endpoint = new Uri(openTelemetryConfig.ExportToolEndpoint); + + var headers = Environment.GetEnvironmentVariable("OTEL_EXPORTER_OTLP_TRACES_HEADERS") + ?? Environment.GetEnvironmentVariable("OTEL_EXPORTER_OTLP_HEADERS"); + options.Headers = headers; + }); + break; + case "zipkin": + tracerProviderBuilder.AddZipkinExporter(options => + { + options.Endpoint = new Uri(openTelemetryConfig.ExportToolEndpoint); + }); + break; + default: + tracerProviderBuilder.AddConsoleExporter(); + break; + } + + tracerProviderBuilder.Build(); + } + } +} diff --git a/src/OpenTelemetry/OpenTelemetry.Customization.csproj b/src/OpenTelemetry/OpenTelemetry.Customization.csproj new file mode 100644 index 000000000..fe6d15797 --- /dev/null +++ b/src/OpenTelemetry/OpenTelemetry.Customization.csproj @@ -0,0 +1,22 @@ + + + + net5.0 + + + + + + + + + + + + + + + + + + diff --git a/src/OpenTelemetry/OpenTelemetryConfig.cs b/src/OpenTelemetry/OpenTelemetryConfig.cs new file mode 100644 index 000000000..c2a566a12 --- /dev/null +++ b/src/OpenTelemetry/OpenTelemetryConfig.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OpenTelemetry.Customization +{ + public class OpenTelemetryConfig + { + public string ServiceName { get; set; } + + public string ExportType { get; set; } + + public string ExportToolEndpoint { get; set; } + + } +} diff --git a/src/Services/Basket/Basket.API/Basket.API.csproj b/src/Services/Basket/Basket.API/Basket.API.csproj index b7a4b3743..2459f2dc6 100644 --- a/src/Services/Basket/Basket.API/Basket.API.csproj +++ b/src/Services/Basket/Basket.API/Basket.API.csproj @@ -9,6 +9,13 @@ preview + + + + + + + PreserveNewest @@ -64,6 +71,7 @@ + diff --git a/src/Services/Basket/Basket.API/Dockerfile b/src/Services/Basket/Basket.API/Dockerfile index de2718ad4..e4740ebde 100644 --- a/src/Services/Basket/Basket.API/Dockerfile +++ b/src/Services/Basket/Basket.API/Dockerfile @@ -38,6 +38,8 @@ COPY "Web/WebhookClient/WebhookClient.csproj" "Web/WebhookClient/WebhookClient.c COPY "Web/WebMVC/WebMVC.csproj" "Web/WebMVC/WebMVC.csproj" COPY "Web/WebSPA/WebSPA.csproj" "Web/WebSPA/WebSPA.csproj" COPY "Web/WebStatus/WebStatus.csproj" "Web/WebStatus/WebStatus.csproj" +COPY "OpenTelemetry/OpenTelemetry.Customization.csproj" "OpenTelemetry/OpenTelemetry.Customization.csproj" + COPY "docker-compose.dcproj" "docker-compose.dcproj" diff --git a/src/Services/Basket/Basket.API/Extensions/OpenTelemetryExtensions.cs b/src/Services/Basket/Basket.API/Extensions/OpenTelemetryExtensions.cs deleted file mode 100644 index de44df207..000000000 --- a/src/Services/Basket/Basket.API/Extensions/OpenTelemetryExtensions.cs +++ /dev/null @@ -1,69 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; -using OpenTelemetry; -using OpenTelemetry.Resources; -using OpenTelemetry.Trace; -using StackExchange.Redis; -using System; - -namespace Basket.API.Extensions -{ - static class OpenTelemetryExtensions - { - public static void AddOpenTelemetry(ConnectionMultiplexer connectionMultiplexer) - { - var exportType = Environment.GetEnvironmentVariable("OTEL_USE_EXPORTER")?.ToLower(); - if (exportType == null) - { - return; - } - - var tracerProviderBuilder = Sdk.CreateTracerProviderBuilder(); - - // Configure resource - tracerProviderBuilder - .SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("Basket.API")); - - // Configure instrumentation - tracerProviderBuilder - .AddAspNetCoreInstrumentation() - .AddHttpClientInstrumentation() - .AddRedisInstrumentation(connectionMultiplexer); - - // Configure exporter - switch (exportType) - { - case "jaeger": - tracerProviderBuilder.AddJaegerExporter(options => - { - var agentHost = Environment.GetEnvironmentVariable("OTEL_EXPORTER_JAEGER_AGENTHOST"); - options.AgentHost = agentHost; - }); - break; - case "otlp": - tracerProviderBuilder.AddOtlpExporter(options => - { - var endpoint = Environment.GetEnvironmentVariable("OTEL_EXPORTER_OTLP_TRACES_ENDPOINT") - ?? Environment.GetEnvironmentVariable("OTEL_EXPORTER_OTLP_ENDPOINT"); - options.Endpoint = new Uri(endpoint); - - var headers = Environment.GetEnvironmentVariable("OTEL_EXPORTER_OTLP_TRACES_HEADERS") - ?? Environment.GetEnvironmentVariable("OTEL_EXPORTER_OTLP_HEADERS"); - options.Headers = headers; - }); - break; - case "zipkin": - tracerProviderBuilder.AddZipkinExporter(options => - { - var endpoint = Environment.GetEnvironmentVariable("OTEL_EXPORTER_ZIPKIN_ENDPOINT"); - options.Endpoint = new Uri(endpoint); - }); - break; - default: - tracerProviderBuilder.AddConsoleExporter(); - break; - } - - tracerProviderBuilder.Build(); - } - } -} \ No newline at end of file diff --git a/src/Services/Basket/Basket.API/Startup.cs b/src/Services/Basket/Basket.API/Startup.cs index 4faf3c80b..33cb43116 100644 --- a/src/Services/Basket/Basket.API/Startup.cs +++ b/src/Services/Basket/Basket.API/Startup.cs @@ -1,6 +1,5 @@ using Autofac; using Autofac.Extensions.DependencyInjection; -using Basket.API.Extensions; using Basket.API.Infrastructure.Filters; using Basket.API.IntegrationEvents.EventHandling; using Basket.API.IntegrationEvents.Events; @@ -28,6 +27,8 @@ using Microsoft.Extensions.Diagnostics.HealthChecks; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Microsoft.OpenApi.Models; +using OpenTelemetry.Customization; +using OpenTelemetry.Customization.Extensions; using RabbitMQ.Client; using StackExchange.Redis; using System; @@ -187,8 +188,14 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory, ConnectionMultiplexer connectionMultiplexer) - { - OpenTelemetryExtensions.AddOpenTelemetry(connectionMultiplexer); + { + + OpenTelemetryExtensions.AddOpenTelemetry(connectionMultiplexer,new OpenTelemetryConfig() + { + ServiceName = "Basket.API", + ExportType = Configuration.GetValue("OTEL_USE_EXPORTER"), + ExportToolEndpoint = Configuration.GetValue("OTEL_EXPORTER_TOOL_ENDPOINT") + }); //loggerFactory.AddAzureWebAppDiagnostics(); //loggerFactory.AddApplicationInsights(app.ApplicationServices, LogLevel.Trace); diff --git a/src/Services/Catalog/Catalog.API/Catalog.API.csproj b/src/Services/Catalog/Catalog.API/Catalog.API.csproj index c439342d3..72ccfc448 100644 --- a/src/Services/Catalog/Catalog.API/Catalog.API.csproj +++ b/src/Services/Catalog/Catalog.API/Catalog.API.csproj @@ -27,6 +27,7 @@ PreserveNewest + @@ -66,26 +67,14 @@ - - - - - - - - - - - - - - + + diff --git a/src/Services/Catalog/Catalog.API/Dockerfile b/src/Services/Catalog/Catalog.API/Dockerfile index ec10cac79..7e3d647fa 100644 --- a/src/Services/Catalog/Catalog.API/Dockerfile +++ b/src/Services/Catalog/Catalog.API/Dockerfile @@ -39,6 +39,7 @@ COPY "Web/WebhookClient/WebhookClient.csproj" "Web/WebhookClient/WebhookClient.c COPY "Web/WebMVC/WebMVC.csproj" "Web/WebMVC/WebMVC.csproj" COPY "Web/WebSPA/WebSPA.csproj" "Web/WebSPA/WebSPA.csproj" COPY "Web/WebStatus/WebStatus.csproj" "Web/WebStatus/WebStatus.csproj" +COPY "OpenTelemetry/OpenTelemetry.Customization.csproj" "OpenTelemetry/OpenTelemetry.Customization.csproj" COPY "docker-compose.dcproj" "docker-compose.dcproj" diff --git a/src/Services/Catalog/Catalog.API/Extensions/OpenTelemetryExtensions.cs b/src/Services/Catalog/Catalog.API/Extensions/OpenTelemetryExtensions.cs deleted file mode 100644 index 1e55c043c..000000000 --- a/src/Services/Catalog/Catalog.API/Extensions/OpenTelemetryExtensions.cs +++ /dev/null @@ -1,68 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; -using OpenTelemetry; -using OpenTelemetry.Resources; -using OpenTelemetry.Trace; -using System; - -namespace Catalog.API.Extensions -{ - static class OpenTelemetryExtensions - { - public static IServiceCollection AddOpenTelemetry(this IServiceCollection services) - { - var exportType = Environment.GetEnvironmentVariable("OTEL_USE_EXPORTER")?.ToLower(); - if (exportType == null) - { - return services; - } - - return services.AddOpenTelemetryTracing((serviceProvider, tracerProviderBuilder) => - { - // Configure resource - tracerProviderBuilder - .SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("Catalog.API")); - - // Configure instrumentation - tracerProviderBuilder - .AddAspNetCoreInstrumentation() - .AddHttpClientInstrumentation() - .AddGrpcClientInstrumentation() - .AddSqlClientInstrumentation(); - - // Configure exporter - switch (exportType) - { - case "jaeger": - tracerProviderBuilder.AddJaegerExporter(options => - { - var agentHost = Environment.GetEnvironmentVariable("OTEL_EXPORTER_JAEGER_AGENTHOST"); - options.AgentHost = agentHost; - }); - break; - case "otlp": - tracerProviderBuilder.AddOtlpExporter(options => - { - var endpoint = Environment.GetEnvironmentVariable("OTEL_EXPORTER_OTLP_TRACES_ENDPOINT") - ?? Environment.GetEnvironmentVariable("OTEL_EXPORTER_OTLP_ENDPOINT"); - options.Endpoint = new Uri(endpoint); - - var headers = Environment.GetEnvironmentVariable("OTEL_EXPORTER_OTLP_TRACES_HEADERS") - ?? Environment.GetEnvironmentVariable("OTEL_EXPORTER_OTLP_HEADERS"); - options.Headers = headers; - }); - break; - case "zipkin": - tracerProviderBuilder.AddZipkinExporter(options => - { - var endpoint = Environment.GetEnvironmentVariable("OTEL_EXPORTER_ZIPKIN_ENDPOINT"); - options.Endpoint = new Uri(endpoint); - }); - break; - default: - tracerProviderBuilder.AddConsoleExporter(); - break; - } - }); - } - } -} diff --git a/src/Services/Catalog/Catalog.API/Startup.cs b/src/Services/Catalog/Catalog.API/Startup.cs index ed807decb..2ed438854 100644 --- a/src/Services/Catalog/Catalog.API/Startup.cs +++ b/src/Services/Catalog/Catalog.API/Startup.cs @@ -26,12 +26,13 @@ using Microsoft.Extensions.Diagnostics.HealthChecks; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Microsoft.OpenApi.Models; +using OpenTelemetry.Customization; +using OpenTelemetry.Customization.Extensions; using RabbitMQ.Client; using System; using System.Data.Common; using System.IO; using System.Reflection; -using Catalog.API.Extensions; namespace Microsoft.eShopOnContainers.Services.Catalog.API { @@ -55,7 +56,10 @@ namespace Microsoft.eShopOnContainers.Services.Catalog.API .AddEventBus(Configuration) .AddSwagger(Configuration) .AddCustomHealthCheck(Configuration) - .AddOpenTelemetry(); + .AddOpenTelemetry(new OpenTelemetryConfig() { ServiceName= "Catalog.API", + ExportType= Configuration.GetValue("OTEL_USE_EXPORTER"), + ExportToolEndpoint = Configuration.GetValue("OTEL_EXPORTER_TOOL_ENDPOINT") + }); var container = new ContainerBuilder(); container.Populate(services); diff --git a/src/Services/Identity/Identity.API/Dockerfile b/src/Services/Identity/Identity.API/Dockerfile index 3608476bc..2e3836cdd 100644 --- a/src/Services/Identity/Identity.API/Dockerfile +++ b/src/Services/Identity/Identity.API/Dockerfile @@ -38,6 +38,7 @@ COPY "Web/WebhookClient/WebhookClient.csproj" "Web/WebhookClient/WebhookClient.c COPY "Web/WebMVC/WebMVC.csproj" "Web/WebMVC/WebMVC.csproj" COPY "Web/WebSPA/WebSPA.csproj" "Web/WebSPA/WebSPA.csproj" COPY "Web/WebStatus/WebStatus.csproj" "Web/WebStatus/WebStatus.csproj" +COPY "OpenTelemetry/OpenTelemetry.Customization.csproj" "OpenTelemetry/OpenTelemetry.Customization.csproj" COPY "docker-compose.dcproj" "docker-compose.dcproj" diff --git a/src/Services/Identity/Identity.API/Extensions/OpenTelemetryExtensions.cs b/src/Services/Identity/Identity.API/Extensions/OpenTelemetryExtensions.cs deleted file mode 100644 index 391fb2954..000000000 --- a/src/Services/Identity/Identity.API/Extensions/OpenTelemetryExtensions.cs +++ /dev/null @@ -1,70 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; -using OpenTelemetry; -using OpenTelemetry.Resources; -using OpenTelemetry.Trace; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace Identity.API.Extensions -{ - static class OpenTelemetryExtensions - { - public static IServiceCollection AddOpenTelemetry(this IServiceCollection services) - { - var exportType = Environment.GetEnvironmentVariable("OTEL_USE_EXPORTER")?.ToLower(); - if (exportType == null) - { - return services; - } - - return services.AddOpenTelemetryTracing((serviceProvider, tracerProviderBuilder) => - { - // Configure resource - tracerProviderBuilder - .SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("Identity.API")); - - // Configure instrumentation - tracerProviderBuilder - .AddAspNetCoreInstrumentation() - .AddHttpClientInstrumentation() - .AddSqlClientInstrumentation(); - - // Configure exporter - switch (exportType) - { - case "jaeger": - tracerProviderBuilder.AddJaegerExporter(options => - { - var agentHost = Environment.GetEnvironmentVariable("OTEL_EXPORTER_JAEGER_AGENTHOST"); - options.AgentHost = agentHost; - }); - break; - case "otlp": - tracerProviderBuilder.AddOtlpExporter(options => - { - var endpoint = Environment.GetEnvironmentVariable("OTEL_EXPORTER_OTLP_TRACES_ENDPOINT") - ?? Environment.GetEnvironmentVariable("OTEL_EXPORTER_OTLP_ENDPOINT"); - options.Endpoint = new Uri(endpoint); - - var headers = Environment.GetEnvironmentVariable("OTEL_EXPORTER_OTLP_TRACES_HEADERS") - ?? Environment.GetEnvironmentVariable("OTEL_EXPORTER_OTLP_HEADERS"); - options.Headers = headers; - }); - break; - case "zipkin": - tracerProviderBuilder.AddZipkinExporter(options => - { - var endpoint = Environment.GetEnvironmentVariable("OTEL_EXPORTER_ZIPKIN_ENDPOINT"); - options.Endpoint = new Uri(endpoint); - }); - break; - default: - tracerProviderBuilder.AddConsoleExporter(); - break; - } - }); - } - } -} diff --git a/src/Services/Identity/Identity.API/Identity.API.csproj b/src/Services/Identity/Identity.API/Identity.API.csproj index 89e0b1819..44713e319 100644 --- a/src/Services/Identity/Identity.API/Identity.API.csproj +++ b/src/Services/Identity/Identity.API/Identity.API.csproj @@ -15,6 +15,10 @@ + + + + @@ -51,21 +55,13 @@ - + - - - - - - - - - + - + diff --git a/src/Services/Identity/Identity.API/Startup.cs b/src/Services/Identity/Identity.API/Startup.cs index c5ba05d61..7525d6696 100644 --- a/src/Services/Identity/Identity.API/Startup.cs +++ b/src/Services/Identity/Identity.API/Startup.cs @@ -1,7 +1,6 @@ using Autofac; using Autofac.Extensions.DependencyInjection; using HealthChecks.UI.Client; -using Identity.API.Extensions; using IdentityServer4.Services; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.DataProtection; @@ -22,6 +21,8 @@ using Microsoft.Extensions.Logging; using StackExchange.Redis; using System; using System.Reflection; +using OpenTelemetry.Customization; +using OpenTelemetry.Customization.Extensions; namespace Microsoft.eShopOnContainers.Services.Identity.API { @@ -39,7 +40,12 @@ namespace Microsoft.eShopOnContainers.Services.Identity.API { RegisterAppInsights(services); - services.AddOpenTelemetry(); + services.AddOpenTelemetry(new OpenTelemetryConfig() + { + ServiceName = "Identity.API", + ExportType = Configuration.GetValue("OTEL_USE_EXPORTER"), + ExportToolEndpoint = Configuration.GetValue("OTEL_EXPORTER_TOOL_ENDPOINT") + }); // Add framework services. services.AddDbContext(options => diff --git a/src/Services/Ordering/Ordering.API/Dockerfile b/src/Services/Ordering/Ordering.API/Dockerfile index 7659da4de..c02827b0e 100644 --- a/src/Services/Ordering/Ordering.API/Dockerfile +++ b/src/Services/Ordering/Ordering.API/Dockerfile @@ -38,6 +38,7 @@ COPY "Web/WebhookClient/WebhookClient.csproj" "Web/WebhookClient/WebhookClient.c COPY "Web/WebMVC/WebMVC.csproj" "Web/WebMVC/WebMVC.csproj" COPY "Web/WebSPA/WebSPA.csproj" "Web/WebSPA/WebSPA.csproj" COPY "Web/WebStatus/WebStatus.csproj" "Web/WebStatus/WebStatus.csproj" +COPY "OpenTelemetry/OpenTelemetry.Customization.csproj" "OpenTelemetry/OpenTelemetry.Customization.csproj" COPY "docker-compose.dcproj" "docker-compose.dcproj" diff --git a/src/Services/Ordering/Ordering.API/Extensions/OpenTelemetryExtensions.cs b/src/Services/Ordering/Ordering.API/Extensions/OpenTelemetryExtensions.cs deleted file mode 100644 index e67beecf9..000000000 --- a/src/Services/Ordering/Ordering.API/Extensions/OpenTelemetryExtensions.cs +++ /dev/null @@ -1,70 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; -using OpenTelemetry; -using OpenTelemetry.Resources; -using OpenTelemetry.Trace; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace Ordering.API.Extensions -{ - static class OpenTelemetryExtensions - { - public static IServiceCollection AddOpenTelemetry(this IServiceCollection services) - { - var exportType = Environment.GetEnvironmentVariable("OTEL_USE_EXPORTER")?.ToLower(); - if (exportType == null) - { - return services; - } - - return services.AddOpenTelemetryTracing((serviceProvider, tracerProviderBuilder) => - { - // Configure resource - tracerProviderBuilder - .SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("Order.API")); - - // Configure instrumentation - tracerProviderBuilder - .AddAspNetCoreInstrumentation() - .AddHttpClientInstrumentation() - .AddSqlClientInstrumentation(); - - // Configure exporter - switch (exportType) - { - case "jaeger": - tracerProviderBuilder.AddJaegerExporter(options => - { - var agentHost = Environment.GetEnvironmentVariable("OTEL_EXPORTER_JAEGER_AGENTHOST"); - options.AgentHost = agentHost; - }); - break; - case "otlp": - tracerProviderBuilder.AddOtlpExporter(options => - { - var endpoint = Environment.GetEnvironmentVariable("OTEL_EXPORTER_OTLP_TRACES_ENDPOINT") - ?? Environment.GetEnvironmentVariable("OTEL_EXPORTER_OTLP_ENDPOINT"); - options.Endpoint = new Uri(endpoint); - - var headers = Environment.GetEnvironmentVariable("OTEL_EXPORTER_OTLP_TRACES_HEADERS") - ?? Environment.GetEnvironmentVariable("OTEL_EXPORTER_OTLP_HEADERS"); - options.Headers = headers; - }); - break; - case "zipkin": - tracerProviderBuilder.AddZipkinExporter(options => - { - var endpoint = Environment.GetEnvironmentVariable("OTEL_EXPORTER_ZIPKIN_ENDPOINT"); - options.Endpoint = new Uri(endpoint); - }); - break; - default: - tracerProviderBuilder.AddConsoleExporter(); - break; - } - }); - } - } -} diff --git a/src/Services/Ordering/Ordering.API/Ordering.API.csproj b/src/Services/Ordering/Ordering.API/Ordering.API.csproj index 39c26f96e..cbaaf3761 100644 --- a/src/Services/Ordering/Ordering.API/Ordering.API.csproj +++ b/src/Services/Ordering/Ordering.API/Ordering.API.csproj @@ -19,6 +19,10 @@ + + + + @@ -32,6 +36,7 @@ + diff --git a/src/Services/Ordering/Ordering.API/Startup.cs b/src/Services/Ordering/Ordering.API/Startup.cs index af9ef791e..3da6fd825 100644 --- a/src/Services/Ordering/Ordering.API/Startup.cs +++ b/src/Services/Ordering/Ordering.API/Startup.cs @@ -38,6 +38,8 @@ using System.IO; using System.Reflection; using global::Ordering.API.Extensions; + using OpenTelemetry.Customization; + using OpenTelemetry.Customization.Extensions; public class Startup { @@ -56,8 +58,7 @@ { options.EnableDetailedErrors = true; }) - .Services - .AddOpenTelemetry() + .Services .AddApplicationInsights(Configuration) .AddCustomMvc() .AddHealthChecks(Configuration) @@ -67,7 +68,14 @@ .AddCustomConfiguration(Configuration) .AddEventBus(Configuration) .AddCustomAuthentication(Configuration); - + + services.AddOpenTelemetry(new OpenTelemetryConfig() + { + ServiceName = "Ordering.API", + ExportType = Configuration.GetValue("OTEL_USE_EXPORTER"), + ExportToolEndpoint = Configuration.GetValue("OTEL_EXPORTER_TOOL_ENDPOINT") + }); + //configure autofac var container = new ContainerBuilder(); container.Populate(services); diff --git a/src/Services/Ordering/Ordering.BackgroundTasks/Dockerfile b/src/Services/Ordering/Ordering.BackgroundTasks/Dockerfile index ea95935ab..4346d88e2 100644 --- a/src/Services/Ordering/Ordering.BackgroundTasks/Dockerfile +++ b/src/Services/Ordering/Ordering.BackgroundTasks/Dockerfile @@ -38,6 +38,7 @@ COPY "Web/WebhookClient/WebhookClient.csproj" "Web/WebhookClient/WebhookClient.c COPY "Web/WebMVC/WebMVC.csproj" "Web/WebMVC/WebMVC.csproj" COPY "Web/WebSPA/WebSPA.csproj" "Web/WebSPA/WebSPA.csproj" COPY "Web/WebStatus/WebStatus.csproj" "Web/WebStatus/WebStatus.csproj" +COPY "OpenTelemetry/OpenTelemetry.Customization.csproj" "OpenTelemetry/OpenTelemetry.Customization.csproj" COPY "docker-compose.dcproj" "docker-compose.dcproj" diff --git a/src/Services/Ordering/Ordering.SignalrHub/Dockerfile b/src/Services/Ordering/Ordering.SignalrHub/Dockerfile index bb80617ff..8be56df5f 100644 --- a/src/Services/Ordering/Ordering.SignalrHub/Dockerfile +++ b/src/Services/Ordering/Ordering.SignalrHub/Dockerfile @@ -38,6 +38,7 @@ COPY "Web/WebhookClient/WebhookClient.csproj" "Web/WebhookClient/WebhookClient.c COPY "Web/WebMVC/WebMVC.csproj" "Web/WebMVC/WebMVC.csproj" COPY "Web/WebSPA/WebSPA.csproj" "Web/WebSPA/WebSPA.csproj" COPY "Web/WebStatus/WebStatus.csproj" "Web/WebStatus/WebStatus.csproj" +COPY "OpenTelemetry/OpenTelemetry.Customization.csproj" "OpenTelemetry/OpenTelemetry.Customization.csproj" COPY "docker-compose.dcproj" "docker-compose.dcproj" diff --git a/src/Services/Payment/Payment.API/Dockerfile b/src/Services/Payment/Payment.API/Dockerfile index d56f3d7c3..2926b7c6a 100644 --- a/src/Services/Payment/Payment.API/Dockerfile +++ b/src/Services/Payment/Payment.API/Dockerfile @@ -38,6 +38,7 @@ COPY "Web/WebhookClient/WebhookClient.csproj" "Web/WebhookClient/WebhookClient.c COPY "Web/WebMVC/WebMVC.csproj" "Web/WebMVC/WebMVC.csproj" COPY "Web/WebSPA/WebSPA.csproj" "Web/WebSPA/WebSPA.csproj" COPY "Web/WebStatus/WebStatus.csproj" "Web/WebStatus/WebStatus.csproj" +COPY "OpenTelemetry/OpenTelemetry.Customization.csproj" "OpenTelemetry/OpenTelemetry.Customization.csproj" COPY "docker-compose.dcproj" "docker-compose.dcproj" diff --git a/src/Services/Payment/Payment.API/Extensions/OpenTelemetryExtensions.cs b/src/Services/Payment/Payment.API/Extensions/OpenTelemetryExtensions.cs index 4f4176012..ebe81260d 100644 --- a/src/Services/Payment/Payment.API/Extensions/OpenTelemetryExtensions.cs +++ b/src/Services/Payment/Payment.API/Extensions/OpenTelemetryExtensions.cs @@ -14,6 +14,8 @@ namespace Payment.API.Extensions public static IServiceCollection AddOpenTelemetry(this IServiceCollection services) { var exportType = Environment.GetEnvironmentVariable("OTEL_USE_EXPORTER")?.ToLower(); + var endpoint = Environment.GetEnvironmentVariable("OTEL_EXPORTER_TOOL_ENDPOINT")?.ToLower(); + if (exportType == null) { return services; @@ -35,16 +37,13 @@ namespace Payment.API.Extensions { case "jaeger": tracerProviderBuilder.AddJaegerExporter(options => - { - var agentHost = Environment.GetEnvironmentVariable("OTEL_EXPORTER_JAEGER_AGENTHOST"); - options.AgentHost = agentHost; + { + options.AgentHost = endpoint; }); break; case "otlp": tracerProviderBuilder.AddOtlpExporter(options => - { - var endpoint = Environment.GetEnvironmentVariable("OTEL_EXPORTER_OTLP_TRACES_ENDPOINT") - ?? Environment.GetEnvironmentVariable("OTEL_EXPORTER_OTLP_ENDPOINT"); + { options.Endpoint = new Uri(endpoint); var headers = Environment.GetEnvironmentVariable("OTEL_EXPORTER_OTLP_TRACES_HEADERS") @@ -54,8 +53,7 @@ namespace Payment.API.Extensions break; case "zipkin": tracerProviderBuilder.AddZipkinExporter(options => - { - var endpoint = Environment.GetEnvironmentVariable("OTEL_EXPORTER_ZIPKIN_ENDPOINT"); + { options.Endpoint = new Uri(endpoint); }); break; diff --git a/src/Services/Payment/Payment.API/Payment.API.csproj b/src/Services/Payment/Payment.API/Payment.API.csproj index 1c9699838..49972454c 100644 --- a/src/Services/Payment/Payment.API/Payment.API.csproj +++ b/src/Services/Payment/Payment.API/Payment.API.csproj @@ -9,6 +9,13 @@ preview + + + + + + + @@ -44,6 +51,7 @@ + diff --git a/src/Services/Payment/Payment.API/Startup.cs b/src/Services/Payment/Payment.API/Startup.cs index f63cd0ada..3470eee6b 100644 --- a/src/Services/Payment/Payment.API/Startup.cs +++ b/src/Services/Payment/Payment.API/Startup.cs @@ -12,7 +12,8 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Diagnostics.HealthChecks; using Microsoft.Extensions.Logging; -using Payment.API.Extensions; +using OpenTelemetry.Customization; +using OpenTelemetry.Customization.Extensions; using Payment.API.IntegrationEvents.EventHandling; using Payment.API.IntegrationEvents.Events; using RabbitMQ.Client; @@ -32,7 +33,14 @@ namespace Payment.API // This method gets called by the runtime. Use this method to add services to the container. public IServiceProvider ConfigureServices(IServiceCollection services) { - services.AddOpenTelemetry(); + + services.AddOpenTelemetry(new OpenTelemetryConfig() + { + ServiceName = "Payment.API", + ExportType = Configuration.GetValue("OTEL_USE_EXPORTER"), + ExportToolEndpoint = Configuration.GetValue("OTEL_EXPORTER_TOOL_ENDPOINT") + }); + services.AddCustomHealthCheck(Configuration); services.Configure(Configuration); diff --git a/src/Services/Webhooks/Webhooks.API/Dockerfile b/src/Services/Webhooks/Webhooks.API/Dockerfile index 263de13d6..cb54cb6a3 100644 --- a/src/Services/Webhooks/Webhooks.API/Dockerfile +++ b/src/Services/Webhooks/Webhooks.API/Dockerfile @@ -38,6 +38,7 @@ COPY "Web/WebhookClient/WebhookClient.csproj" "Web/WebhookClient/WebhookClient.c COPY "Web/WebMVC/WebMVC.csproj" "Web/WebMVC/WebMVC.csproj" COPY "Web/WebSPA/WebSPA.csproj" "Web/WebSPA/WebSPA.csproj" COPY "Web/WebStatus/WebStatus.csproj" "Web/WebStatus/WebStatus.csproj" +COPY "OpenTelemetry/OpenTelemetry.Customization.csproj" "OpenTelemetry/OpenTelemetry.Customization.csproj" COPY "docker-compose.dcproj" "docker-compose.dcproj" diff --git a/src/Services/Webhooks/Webhooks.API/Startup.cs b/src/Services/Webhooks/Webhooks.API/Startup.cs index 4744e9d24..04ed1687f 100644 --- a/src/Services/Webhooks/Webhooks.API/Startup.cs +++ b/src/Services/Webhooks/Webhooks.API/Startup.cs @@ -18,6 +18,8 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Diagnostics.HealthChecks; using Microsoft.Extensions.Logging; using Microsoft.OpenApi.Models; +using OpenTelemetry.Customization; +using OpenTelemetry.Customization.Extensions; using RabbitMQ.Client; using System; using System.Collections.Generic; @@ -43,6 +45,13 @@ namespace Webhooks.API public IServiceProvider ConfigureServices(IServiceCollection services) { + services.AddOpenTelemetry(new OpenTelemetryConfig() + { + ServiceName = "Webhooks.API", + ExportType = Configuration.GetValue("OTEL_USE_EXPORTER"), + ExportToolEndpoint = Configuration.GetValue("OTEL_EXPORTER_TOOL_ENDPOINT") + }); + services .AddAppInsight(Configuration) .AddCustomRouting(Configuration) diff --git a/src/Services/Webhooks/Webhooks.API/Webhooks.API.csproj b/src/Services/Webhooks/Webhooks.API/Webhooks.API.csproj index b26e28b6a..3b7e67f50 100644 --- a/src/Services/Webhooks/Webhooks.API/Webhooks.API.csproj +++ b/src/Services/Webhooks/Webhooks.API/Webhooks.API.csproj @@ -31,6 +31,7 @@ + diff --git a/src/Web/WebMVC/Dockerfile b/src/Web/WebMVC/Dockerfile index bab4109b5..794292f3a 100644 --- a/src/Web/WebMVC/Dockerfile +++ b/src/Web/WebMVC/Dockerfile @@ -38,6 +38,7 @@ COPY "Web/WebhookClient/WebhookClient.csproj" "Web/WebhookClient/WebhookClient.c COPY "Web/WebMVC/WebMVC.csproj" "Web/WebMVC/WebMVC.csproj" COPY "Web/WebSPA/WebSPA.csproj" "Web/WebSPA/WebSPA.csproj" COPY "Web/WebStatus/WebStatus.csproj" "Web/WebStatus/WebStatus.csproj" +COPY "OpenTelemetry/OpenTelemetry.Customization.csproj" "OpenTelemetry/OpenTelemetry.Customization.csproj" COPY "docker-compose.dcproj" "docker-compose.dcproj" diff --git a/src/Web/WebMVC/Startup.cs b/src/Web/WebMVC/Startup.cs index c9803930c..209f03393 100644 --- a/src/Web/WebMVC/Startup.cs +++ b/src/Web/WebMVC/Startup.cs @@ -15,6 +15,8 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Diagnostics.HealthChecks; using Microsoft.Extensions.Hosting; using Microsoft.IdentityModel.Logging; +using OpenTelemetry.Customization; +using OpenTelemetry.Customization.Extensions; using StackExchange.Redis; using System; using System.IdentityModel.Tokens.Jwt; @@ -36,13 +38,19 @@ namespace Microsoft.eShopOnContainers.WebMVC { services.AddControllersWithViews() .Services - .AddAppInsight(Configuration) - .AddOpenTelemetry() + .AddAppInsight(Configuration) .AddHealthChecks(Configuration) .AddCustomMvc(Configuration) .AddDevspaces() .AddHttpClientServices(Configuration); + services.AddOpenTelemetry(new OpenTelemetryConfig() + { + ServiceName = "WebMVC", + ExportType = Configuration.GetValue("OTEL_USE_EXPORTER"), + ExportToolEndpoint = Configuration.GetValue("OTEL_EXPORTER_TOOL_ENDPOINT") + }); + IdentityModelEventSource.ShowPII = true; // Caution! Do NOT use in production: https://aka.ms/IdentityModel/PII services.AddControllers(); diff --git a/src/Web/WebMVC/WebMVC.csproj b/src/Web/WebMVC/WebMVC.csproj index 13ef68d79..135915011 100644 --- a/src/Web/WebMVC/WebMVC.csproj +++ b/src/Web/WebMVC/WebMVC.csproj @@ -10,6 +10,10 @@ preview + + + + PreserveNewest @@ -61,6 +65,7 @@ + diff --git a/src/Web/WebSPA/Dockerfile b/src/Web/WebSPA/Dockerfile index 0dcac8433..724ccfa51 100644 --- a/src/Web/WebSPA/Dockerfile +++ b/src/Web/WebSPA/Dockerfile @@ -46,6 +46,7 @@ COPY "Web/WebhookClient/WebhookClient.csproj" "Web/WebhookClient/WebhookClient.c COPY "Web/WebMVC/WebMVC.csproj" "Web/WebMVC/WebMVC.csproj" COPY "Web/WebSPA/WebSPA.csproj" "Web/WebSPA/WebSPA.csproj" COPY "Web/WebStatus/WebStatus.csproj" "Web/WebStatus/WebStatus.csproj" +COPY "OpenTelemetry/OpenTelemetry.Customization.csproj" "OpenTelemetry/OpenTelemetry.Customization.csproj" COPY "docker-compose.dcproj" "docker-compose.dcproj" diff --git a/src/Web/WebSPA/Startup.cs b/src/Web/WebSPA/Startup.cs index 18fe5f13b..e060f1f2a 100644 --- a/src/Web/WebSPA/Startup.cs +++ b/src/Web/WebSPA/Startup.cs @@ -10,10 +10,11 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Diagnostics.HealthChecks; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; +using OpenTelemetry.Customization; +using OpenTelemetry.Customization.Extensions; using StackExchange.Redis; using System; using System.IO; -using WebSPA.Extensions; using WebSPA.Infrastructure; namespace eShopConContainers.WebSPA @@ -39,7 +40,13 @@ namespace eShopConContainers.WebSPA { RegisterAppInsights(services); - services.AddOpenTelemetry(); + services.AddOpenTelemetry(new OpenTelemetryConfig() + { + ServiceName = "WebSPA", + ExportType = Configuration.GetValue("OTEL_USE_EXPORTER"), + ExportToolEndpoint = Configuration.GetValue("OTEL_EXPORTER_TOOL_ENDPOINT") + }); + services.AddHealthChecks() .AddCheck("self", () => HealthCheckResult.Healthy()) .AddUrlGroup(new Uri(Configuration["IdentityUrlHC"]), name: "identityapi-check", tags: new string[] { "identityapi" }); diff --git a/src/Web/WebSPA/WebSPA.csproj b/src/Web/WebSPA/WebSPA.csproj index 60782f2fa..a69b3e712 100644 --- a/src/Web/WebSPA/WebSPA.csproj +++ b/src/Web/WebSPA/WebSPA.csproj @@ -14,7 +14,11 @@ + + + + @@ -114,6 +118,9 @@ + + + diff --git a/src/Web/WebStatus/Dockerfile b/src/Web/WebStatus/Dockerfile index 7c1f74e7e..78d6c0565 100644 --- a/src/Web/WebStatus/Dockerfile +++ b/src/Web/WebStatus/Dockerfile @@ -38,6 +38,7 @@ COPY "Web/WebhookClient/WebhookClient.csproj" "Web/WebhookClient/WebhookClient.c COPY "Web/WebMVC/WebMVC.csproj" "Web/WebMVC/WebMVC.csproj" COPY "Web/WebSPA/WebSPA.csproj" "Web/WebSPA/WebSPA.csproj" COPY "Web/WebStatus/WebStatus.csproj" "Web/WebStatus/WebStatus.csproj" +COPY "OpenTelemetry/OpenTelemetry.Customization.csproj" "OpenTelemetry/OpenTelemetry.Customization.csproj" COPY "docker-compose.dcproj" "docker-compose.dcproj" diff --git a/src/Web/WebhookClient/Dockerfile b/src/Web/WebhookClient/Dockerfile index 31c4c76eb..e3a2def24 100644 --- a/src/Web/WebhookClient/Dockerfile +++ b/src/Web/WebhookClient/Dockerfile @@ -39,6 +39,7 @@ COPY "Web/WebhookClient/WebhookClient.csproj" "Web/WebhookClient/WebhookClient.c COPY "Web/WebMVC/WebMVC.csproj" "Web/WebMVC/WebMVC.csproj" COPY "Web/WebSPA/WebSPA.csproj" "Web/WebSPA/WebSPA.csproj" COPY "Web/WebStatus/WebStatus.csproj" "Web/WebStatus/WebStatus.csproj" +COPY "OpenTelemetry/OpenTelemetry.Customization.csproj" "OpenTelemetry/OpenTelemetry.Customization.csproj" COPY "docker-compose.dcproj" "docker-compose.dcproj" diff --git a/src/docker-compose.opentelemetry.jaeger.yml b/src/docker-compose.opentelemetry.jaeger.yml index 87c6ed78a..96e3c3d80 100644 --- a/src/docker-compose.opentelemetry.jaeger.yml +++ b/src/docker-compose.opentelemetry.jaeger.yml @@ -21,34 +21,34 @@ services: identity-api: environment: - OTEL_USE_EXPORTER=jaeger - - OTEL_EXPORTER_JAEGER_AGENTHOST=${OTEL_EXPORTER_JAEGER_AGENTHOST:-jaeger-all-in-one} + - OTEL_EXPORTER_TOOL_ENDPOINT=${OTEL_EXPORTER_TOOL_ENDPOINT:-jaeger-all-in-one} basket-api: environment: - OTEL_USE_EXPORTER=jaeger - - OTEL_EXPORTER_JAEGER_AGENTHOST=${OTEL_EXPORTER_JAEGER_AGENTHOST:-jaeger-all-in-one} + - OTEL_EXPORTER_TOOL_ENDPOINT=${OTEL_EXPORTER_TOOL_ENDPOINT:-jaeger-all-in-one} catalog-api: environment: - OTEL_USE_EXPORTER=jaeger - - OTEL_EXPORTER_JAEGER_AGENTHOST=${OTEL_EXPORTER_JAEGER_AGENTHOST:-jaeger-all-in-one} + - OTEL_EXPORTER_TOOL_ENDPOINT=${OTEL_EXPORTER_TOOL_ENDPOINT:-jaeger-all-in-one} ordering-api: environment: - OTEL_USE_EXPORTER=jaeger - - OTEL_EXPORTER_JAEGER_AGENTHOST=${OTEL_EXPORTER_JAEGER_AGENTHOST:-jaeger-all-in-one} + - OTEL_EXPORTER_TOOL_ENDPOINT=${OTEL_EXPORTER_TOOL_ENDPOINT:-jaeger-all-in-one} payment-api: environment: - OTEL_USE_EXPORTER=jaeger - - OTEL_EXPORTER_JAEGER_AGENTHOST=${OTEL_EXPORTER_JAEGER_AGENTHOST:-jaeger-all-in-one} + - OTEL_EXPORTER_TOOL_ENDPOINT=${OTEL_EXPORTER_TOOL_ENDPOINT:-jaeger-all-in-one} webmvc: environment: - OTEL_USE_EXPORTER=jaeger - - OTEL_EXPORTER_JAEGER_AGENTHOST=${OTEL_EXPORTER_JAEGER_AGENTHOST:-jaeger-all-in-one} + - OTEL_EXPORTER_TOOL_ENDPOINT=${OTEL_EXPORTER_TOOL_ENDPOINT:-jaeger-all-in-one} webspa: environment: - OTEL_USE_EXPORTER=jaeger - - OTEL_EXPORTER_JAEGER_AGENTHOST=${OTEL_EXPORTER_JAEGER_AGENTHOST:-jaeger-all-in-one} \ No newline at end of file + - OTEL_EXPORTER_TOOL_ENDPOINT=${OTEL_EXPORTER_TOOL_ENDPOINT:-jaeger-all-in-one} \ No newline at end of file diff --git a/src/docker-compose.opentelemetry.otlp.yml b/src/docker-compose.opentelemetry.otlp.yml index 9d5f6b713..c62c44419 100644 --- a/src/docker-compose.opentelemetry.otlp.yml +++ b/src/docker-compose.opentelemetry.otlp.yml @@ -17,17 +17,17 @@ services: basket-api: environment: - OTEL_USE_EXPORTER=otlp - - OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=${OTEL_EXPORTER_OTLP_TRACES_ENDPOINT:-http://otel-collector:4317} + - OTEL_EXPORTER_TOOL_ENDPOINT=${OTEL_EXPORTER_TOOL_ENDPOINT:-http://otel-collector:4317} - OTEL_EXPORTER_OTLP_HEADERS=${OTEL_EXPORTER_OTLP_HEADERS} catalog-api: environment: - OTEL_USE_EXPORTER=otlp - - OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=${OTEL_EXPORTER_OTLP_TRACES_ENDPOINT:-http://otel-collector:4317} + - OTEL_EXPORTER_TOOL_ENDPOINT=${OTEL_EXPORTER_TOOL_ENDPOINT:-http://otel-collector:4317} - OTEL_EXPORTER_OTLP_HEADERS=${OTEL_EXPORTER_OTLP_HEADERS} webmvc: environment: - OTEL_USE_EXPORTER=otlp - - OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=${OTEL_EXPORTER_OTLP_TRACES_ENDPOINT:-http://otel-collector:4317} + - OTEL_EXPORTER_TOOL_ENDPOINT=${OTEL_EXPORTER_TOOL_ENDPOINT:-http://otel-collector:4317} - OTEL_EXPORTER_OTLP_HEADERS=${OTEL_EXPORTER_OTLP_HEADERS} diff --git a/src/docker-compose.opentelemetry.zipkin.yml b/src/docker-compose.opentelemetry.zipkin.yml index a11b38098..96908ec57 100644 --- a/src/docker-compose.opentelemetry.zipkin.yml +++ b/src/docker-compose.opentelemetry.zipkin.yml @@ -14,34 +14,39 @@ services: identity-api: environment: - OTEL_USE_EXPORTER=zipkin - - OTEL_EXPORTER_ZIPKIN_ENDPOINT=${OTEL_EXPORTER_ZIPKIN_ENDPOINT:-http://zipkin:9411/api/v2/spans} + - OTEL_EXPORTER_TOOL_ENDPOINT=${OTEL_EXPORTER_TOOL_ENDPOINT:-http://zipkin:9411/api/v2/spans} basket-api: environment: - OTEL_USE_EXPORTER=zipkin - - OTEL_EXPORTER_ZIPKIN_ENDPOINT=${OTEL_EXPORTER_ZIPKIN_ENDPOINT:-http://zipkin:9411/api/v2/spans} + - OTEL_EXPORTER_TOOL_ENDPOINT=${OTEL_EXPORTER_TOOL_ENDPOINT:-http://zipkin:9411/api/v2/spans} catalog-api: environment: - OTEL_USE_EXPORTER=zipkin - - OTEL_EXPORTER_ZIPKIN_ENDPOINT=${OTEL_EXPORTER_ZIPKIN_ENDPOINT:-http://zipkin:9411/api/v2/spans} + - OTEL_EXPORTER_TOOL_ENDPOINT=${OTEL_EXPORTER_TOOL_ENDPOINT:-http://zipkin:9411/api/v2/spans} ordering-api: environment: - OTEL_USE_EXPORTER=zipkin - - OTEL_EXPORTER_ZIPKIN_ENDPOINT=${OTEL_EXPORTER_ZIPKIN_ENDPOINT:-http://zipkin:9411/api/v2/spans} + - OTEL_EXPORTER_TOOL_ENDPOINT=${OTEL_EXPORTER_TOOL_ENDPOINT:-http://zipkin:9411/api/v2/spans} payment-api: environment: - OTEL_USE_EXPORTER=zipkin - - OTEL_EXPORTER_ZIPKIN_ENDPOINT=${OTEL_EXPORTER_ZIPKIN_ENDPOINT:-http://zipkin:9411/api/v2/spans} - + - OTEL_EXPORTER_TOOL_ENDPOINT=${OTEL_EXPORTER_TOOL_ENDPOINT:-http://zipkin:9411/api/v2/spans} + + webhooks-api: + environment: + - OTEL_USE_EXPORTER=zipkin + - OTEL_EXPORTER_TOOL_ENDPOINT=${OTEL_EXPORTER_TOOL_ENDPOINT:-http://zipkin:9411/api/v2/spans} + webmvc: environment: - OTEL_USE_EXPORTER=zipkin - - OTEL_EXPORTER_ZIPKIN_ENDPOINT=${OTEL_EXPORTER_ZIPKIN_ENDPOINT:-http://zipkin:9411/api/v2/spans} + - OTEL_EXPORTER_TOOL_ENDPOINT=${OTEL_EXPORTER_TOOL_ENDPOINT:-http://zipkin:9411/api/v2/spans} webspa: environment: - OTEL_USE_EXPORTER=zipkin - - OTEL_EXPORTER_ZIPKIN_ENDPOINT=${OTEL_EXPORTER_ZIPKIN_ENDPOINT:-http://zipkin:9411/api/v2/spans} + - OTEL_EXPORTER_TOOL_ENDPOINT=${OTEL_EXPORTER_TOOL_ENDPOINT:-http://zipkin:9411/api/v2/spans} diff --git a/src/eShopOnContainers-ServicesAndWebApps.sln b/src/eShopOnContainers-ServicesAndWebApps.sln index f0d907d8b..dcc582b96 100644 --- a/src/eShopOnContainers-ServicesAndWebApps.sln +++ b/src/eShopOnContainers-ServicesAndWebApps.sln @@ -120,6 +120,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mobile.Bff.Shopping", "Mobi EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mobile.Shopping.HttpAggregator", "ApiGateways\Mobile.Bff.Shopping\aggregator\Mobile.Shopping.HttpAggregator.csproj", "{B62E859F-825E-4C8B-93EC-5966EACFD026}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "OpenTelemetry", "OpenTelemetry", "{D366A1A3-E0BC-4469-95B0-316AE3EF61D5}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OpenTelemetry.Customization", "OpenTelemetry\OpenTelemetry.Customization.csproj", "{AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Ad-Hoc|Any CPU = Ad-Hoc|Any CPU @@ -1478,6 +1482,54 @@ Global {B62E859F-825E-4C8B-93EC-5966EACFD026}.Release|x64.Build.0 = Release|Any CPU {B62E859F-825E-4C8B-93EC-5966EACFD026}.Release|x86.ActiveCfg = Release|Any CPU {B62E859F-825E-4C8B-93EC-5966EACFD026}.Release|x86.Build.0 = Release|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.Ad-Hoc|x64.Build.0 = Debug|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.Ad-Hoc|x86.Build.0 = Debug|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.AppStore|Any CPU.Build.0 = Debug|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.AppStore|ARM.ActiveCfg = Debug|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.AppStore|ARM.Build.0 = Debug|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.AppStore|iPhone.ActiveCfg = Debug|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.AppStore|iPhone.Build.0 = Debug|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.AppStore|x64.ActiveCfg = Debug|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.AppStore|x64.Build.0 = Debug|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.AppStore|x86.ActiveCfg = Debug|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.AppStore|x86.Build.0 = Debug|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.Debug|ARM.ActiveCfg = Debug|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.Debug|ARM.Build.0 = Debug|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.Debug|iPhone.Build.0 = Debug|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.Debug|x64.ActiveCfg = Debug|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.Debug|x64.Build.0 = Debug|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.Debug|x86.ActiveCfg = Debug|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.Debug|x86.Build.0 = Debug|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.Release|Any CPU.Build.0 = Release|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.Release|ARM.ActiveCfg = Release|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.Release|ARM.Build.0 = Release|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.Release|iPhone.ActiveCfg = Release|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.Release|iPhone.Build.0 = Release|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.Release|x64.ActiveCfg = Release|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.Release|x64.Build.0 = Release|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.Release|x86.ActiveCfg = Release|Any CPU + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1534,6 +1586,8 @@ Global {966B1B0B-2AE0-4438-8741-1C5A05556095} = {3ABEEE8C-35E0-4185-9825-C44326151F5B} {798BFC44-2CCD-45FA-B37A-5173B03C2B30} = {77849D35-37D4-4802-81DC-9477B2775A40} {B62E859F-825E-4C8B-93EC-5966EACFD026} = {798BFC44-2CCD-45FA-B37A-5173B03C2B30} + {D366A1A3-E0BC-4469-95B0-316AE3EF61D5} = {932D8224-11F6-4D07-B109-DA28AD288A63} + {AF60A41F-478A-4DAB-9B7F-8D1BBFCD32BC} = {D366A1A3-E0BC-4469-95B0-316AE3EF61D5} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {25728519-5F0F-4973-8A64-0A81EB4EA8D9}