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}