From 694673545873573d5f024226108554169ff1c9cd Mon Sep 17 00:00:00 2001 From: Sumit Ghosh <13281246+sughosneo@users.noreply.github.com> Date: Tue, 29 Jun 2021 19:35:01 +0530 Subject: [PATCH] Included feedback --- .../Extensions/OpenTelemetryExtensions.cs | 87 ++++++++++--------- src/Services/Basket/Basket.API/Startup.cs | 29 ++++--- .../Extensions/OpenTelemetryExtensions.cs | 67 -------------- .../Extensions/OpenTelemetryExtensions.cs | 65 -------------- .../Extensions/OpenTelemetryExtensions.cs | 69 --------------- 5 files changed, 63 insertions(+), 254 deletions(-) delete mode 100644 src/Services/Payment/Payment.API/Extensions/OpenTelemetryExtensions.cs delete mode 100644 src/Web/WebMVC/Extensions/OpenTelemetryExtensions.cs delete mode 100644 src/Web/WebSPA/Extensions/OpenTelemetryExtensions.cs diff --git a/src/OpenTelemetry/Extensions/OpenTelemetryExtensions.cs b/src/OpenTelemetry/Extensions/OpenTelemetryExtensions.cs index d12a564ad..c31e91514 100644 --- a/src/OpenTelemetry/Extensions/OpenTelemetryExtensions.cs +++ b/src/OpenTelemetry/Extensions/OpenTelemetryExtensions.cs @@ -17,7 +17,8 @@ namespace OpenTelemetry.Customization.Extensions } return services.AddOpenTelemetryTracing((serviceProvider, tracerProviderBuilder) => - { + { + // Configure resource tracerProviderBuilder .SetResourceBuilder(ResourceBuilder.CreateDefault().AddService(openTelemetryConfig.ServiceName)); @@ -61,57 +62,59 @@ namespace OpenTelemetry.Customization.Extensions }); } - public static void AddOpenTelemetry(ConnectionMultiplexer connectionMultiplexer, OpenTelemetryConfig openTelemetryConfig) + public static IServiceCollection AddOpenTelemetry(this IServiceCollection services, ConnectionMultiplexer connectionMultiplexer, OpenTelemetryConfig openTelemetryConfig) { if (openTelemetryConfig == null || openTelemetryConfig.ExportType == null) { - return; + return services; } - var tracerProviderBuilder = Sdk.CreateTracerProviderBuilder(); + return services.AddOpenTelemetryTracing((serviceProvider, tracerProviderBuilder) => + { - // Configure resource - tracerProviderBuilder - .SetResourceBuilder(ResourceBuilder.CreateDefault().AddService(openTelemetryConfig.ServiceName)); + // Configure resource + tracerProviderBuilder + .SetResourceBuilder(ResourceBuilder.CreateDefault().AddService(openTelemetryConfig.ServiceName)); - // Configure instrumentation - tracerProviderBuilder - .AddAspNetCoreInstrumentation() - .AddHttpClientInstrumentation() - .AddRedisInstrumentation(connectionMultiplexer); + // Configure instrumentation + tracerProviderBuilder + .AddAspNetCoreInstrumentation() + .AddHttpClientInstrumentation() + .AddGrpcClientInstrumentation() + .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); + // 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(); + 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; + } + }); + } } } diff --git a/src/Services/Basket/Basket.API/Startup.cs b/src/Services/Basket/Basket.API/Startup.cs index 8b397c9ff..4d0409cc6 100644 --- a/src/Services/Basket/Basket.API/Startup.cs +++ b/src/Services/Basket/Basket.API/Startup.cs @@ -38,11 +38,16 @@ using System.IO; namespace Microsoft.eShopOnContainers.Services.Basket.API { + public class Startup { + + private ConnectionMultiplexer _connectionMultiplexer; + public Startup(IConfiguration configuration) { Configuration = configuration; + } public IConfiguration Configuration { get; } @@ -53,15 +58,7 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API services.AddGrpc(options => { options.EnableDetailedErrors = true; - }); - - // Add Telemetry - services.AddOpenTelemetry(new OpenTelemetryConfig() - { - ServiceName = "Basket.API", - ExportType = Configuration.GetValue("OTEL_USE_EXPORTER"), - ExportToolEndpoint = Configuration.GetValue("OTEL_EXPORTER_TOOL_ENDPOINT") - }); + }); RegisterAppInsights(services); @@ -115,7 +112,7 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API //but given that there is a delay on resolving the ip address //and then creating the connection it seems reasonable to move //that cost to startup instead of having the first request pay the - //penalty. + //penalty. services.AddSingleton(sp => { var settings = sp.GetRequiredService>().Value; @@ -123,7 +120,17 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API configuration.ResolveDns = true; - return ConnectionMultiplexer.Connect(configuration); + _connectionMultiplexer = ConnectionMultiplexer.Connect(configuration); + + return _connectionMultiplexer; + }); + + // Add Telemetry + services.AddOpenTelemetry(this._connectionMultiplexer,new OpenTelemetryConfig() + { + ServiceName = "Basket.API", + ExportType = Configuration.GetValue("OTEL_USE_EXPORTER"), + ExportToolEndpoint = Configuration.GetValue("OTEL_EXPORTER_TOOL_ENDPOINT") }); diff --git a/src/Services/Payment/Payment.API/Extensions/OpenTelemetryExtensions.cs b/src/Services/Payment/Payment.API/Extensions/OpenTelemetryExtensions.cs deleted file mode 100644 index ebe81260d..000000000 --- a/src/Services/Payment/Payment.API/Extensions/OpenTelemetryExtensions.cs +++ /dev/null @@ -1,67 +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 Payment.API.Extensions -{ - static class OpenTelemetryExtensions - { - 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; - } - - return services.AddOpenTelemetryTracing((serviceProvider, tracerProviderBuilder) => - { - // Configure resource - tracerProviderBuilder - .SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("Payment.API")); - - // Configure instrumentation - tracerProviderBuilder - .AddAspNetCoreInstrumentation() - .AddHttpClientInstrumentation(); - - // Configure exporter - switch (exportType) - { - case "jaeger": - tracerProviderBuilder.AddJaegerExporter(options => - { - options.AgentHost = endpoint; - }); - break; - case "otlp": - tracerProviderBuilder.AddOtlpExporter(options => - { - 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 => - { - options.Endpoint = new Uri(endpoint); - }); - break; - default: - tracerProviderBuilder.AddConsoleExporter(); - break; - } - }); - } - } -} diff --git a/src/Web/WebMVC/Extensions/OpenTelemetryExtensions.cs b/src/Web/WebMVC/Extensions/OpenTelemetryExtensions.cs deleted file mode 100644 index 2e431659c..000000000 --- a/src/Web/WebMVC/Extensions/OpenTelemetryExtensions.cs +++ /dev/null @@ -1,65 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; -using OpenTelemetry.Resources; -using OpenTelemetry.Trace; -using System; - -namespace Microsoft.eShopOnContainers.WebMVC.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("WebMVC")); - - // Configure instrumentation - tracerProviderBuilder - .AddAspNetCoreInstrumentation() - .AddHttpClientInstrumentation(); - - // 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; - } - }); - } - } -} \ No newline at end of file diff --git a/src/Web/WebSPA/Extensions/OpenTelemetryExtensions.cs b/src/Web/WebSPA/Extensions/OpenTelemetryExtensions.cs deleted file mode 100644 index f07738c66..000000000 --- a/src/Web/WebSPA/Extensions/OpenTelemetryExtensions.cs +++ /dev/null @@ -1,69 +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 WebSPA.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("WebSPA")); - - // Configure instrumentation - tracerProviderBuilder - .AddAspNetCoreInstrumentation() - .AddHttpClientInstrumentation(); - - // 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; - } - }); - } - } -}