Browse Source

Included feedback

pull/1663/head
Sumit Ghosh 3 years ago
parent
commit
6946735458
5 changed files with 63 additions and 254 deletions
  1. +45
    -42
      src/OpenTelemetry/Extensions/OpenTelemetryExtensions.cs
  2. +18
    -11
      src/Services/Basket/Basket.API/Startup.cs
  3. +0
    -67
      src/Services/Payment/Payment.API/Extensions/OpenTelemetryExtensions.cs
  4. +0
    -65
      src/Web/WebMVC/Extensions/OpenTelemetryExtensions.cs
  5. +0
    -69
      src/Web/WebSPA/Extensions/OpenTelemetryExtensions.cs

+ 45
- 42
src/OpenTelemetry/Extensions/OpenTelemetryExtensions.cs View File

@ -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();
// Configure resource
tracerProviderBuilder
.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService(openTelemetryConfig.ServiceName));
return services.AddOpenTelemetryTracing((serviceProvider, tracerProviderBuilder) =>
{
// Configure instrumentation
tracerProviderBuilder
.AddAspNetCoreInstrumentation()
.AddHttpClientInstrumentation()
.AddRedisInstrumentation(connectionMultiplexer);
// Configure resource
tracerProviderBuilder
.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService(openTelemetryConfig.ServiceName));
// 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 instrumentation
tracerProviderBuilder
.AddAspNetCoreInstrumentation()
.AddHttpClientInstrumentation()
.AddGrpcClientInstrumentation()
.AddRedisInstrumentation(connectionMultiplexer);
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;
}
// 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);
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;
}
});
}
}
}

+ 18
- 11
src/Services/Basket/Basket.API/Startup.cs View File

@ -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<string>("OTEL_USE_EXPORTER"),
ExportToolEndpoint = Configuration.GetValue<string>("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<ConnectionMultiplexer>(sp =>
{
var settings = sp.GetRequiredService<IOptions<BasketSettings>>().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<string>("OTEL_USE_EXPORTER"),
ExportToolEndpoint = Configuration.GetValue<string>("OTEL_EXPORTER_TOOL_ENDPOINT")
});


+ 0
- 67
src/Services/Payment/Payment.API/Extensions/OpenTelemetryExtensions.cs View File

@ -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;
}
});
}
}
}

+ 0
- 65
src/Web/WebMVC/Extensions/OpenTelemetryExtensions.cs View File

@ -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;
}
});
}
}
}

+ 0
- 69
src/Web/WebSPA/Extensions/OpenTelemetryExtensions.cs View File

@ -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;
}
});
}
}
}

Loading…
Cancel
Save