Included feedback

This commit is contained in:
Sumit Ghosh 2021-06-29 19:35:01 +05:30
parent 911a5c52be
commit 6946735458
5 changed files with 63 additions and 254 deletions

View File

@ -17,7 +17,8 @@ namespace OpenTelemetry.Customization.Extensions
} }
return services.AddOpenTelemetryTracing((serviceProvider, tracerProviderBuilder) => return services.AddOpenTelemetryTracing((serviceProvider, tracerProviderBuilder) =>
{ {
// Configure resource // Configure resource
tracerProviderBuilder tracerProviderBuilder
.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService(openTelemetryConfig.ServiceName)); .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) if (openTelemetryConfig == null || openTelemetryConfig.ExportType == null)
{ {
return; return services;
} }
var tracerProviderBuilder = Sdk.CreateTracerProviderBuilder(); return services.AddOpenTelemetryTracing((serviceProvider, tracerProviderBuilder) =>
{
// Configure resource // Configure resource
tracerProviderBuilder tracerProviderBuilder
.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService(openTelemetryConfig.ServiceName)); .SetResourceBuilder(ResourceBuilder.CreateDefault().AddService(openTelemetryConfig.ServiceName));
// Configure instrumentation // Configure instrumentation
tracerProviderBuilder tracerProviderBuilder
.AddAspNetCoreInstrumentation() .AddAspNetCoreInstrumentation()
.AddHttpClientInstrumentation() .AddHttpClientInstrumentation()
.AddRedisInstrumentation(connectionMultiplexer); .AddGrpcClientInstrumentation()
.AddRedisInstrumentation(connectionMultiplexer);
// Configure exporter // Configure exporter
switch (openTelemetryConfig.ExportType) switch (openTelemetryConfig.ExportType)
{ {
case "jaeger": case "jaeger":
tracerProviderBuilder.AddJaegerExporter(options => tracerProviderBuilder.AddJaegerExporter(options =>
{ {
options.AgentHost = openTelemetryConfig.ExportToolEndpoint; options.AgentHost = openTelemetryConfig.ExportToolEndpoint;
}); });
break; break;
case "otlp": case "otlp":
tracerProviderBuilder.AddOtlpExporter(options => tracerProviderBuilder.AddOtlpExporter(options =>
{ {
options.Endpoint = new Uri(openTelemetryConfig.ExportToolEndpoint); options.Endpoint = new Uri(openTelemetryConfig.ExportToolEndpoint);
var headers = Environment.GetEnvironmentVariable("OTEL_EXPORTER_OTLP_TRACES_HEADERS") var headers = Environment.GetEnvironmentVariable("OTEL_EXPORTER_OTLP_TRACES_HEADERS")
?? Environment.GetEnvironmentVariable("OTEL_EXPORTER_OTLP_HEADERS"); ?? Environment.GetEnvironmentVariable("OTEL_EXPORTER_OTLP_HEADERS");
options.Headers = headers; options.Headers = headers;
}); });
break; break;
case "zipkin": case "zipkin":
tracerProviderBuilder.AddZipkinExporter(options => tracerProviderBuilder.AddZipkinExporter(options =>
{ {
options.Endpoint = new Uri(openTelemetryConfig.ExportToolEndpoint); options.Endpoint = new Uri(openTelemetryConfig.ExportToolEndpoint);
}); });
break; break;
default: default:
tracerProviderBuilder.AddConsoleExporter(); tracerProviderBuilder.AddConsoleExporter();
break; break;
} }
});
tracerProviderBuilder.Build();
} }
} }
} }

View File

@ -38,11 +38,16 @@ using System.IO;
namespace Microsoft.eShopOnContainers.Services.Basket.API namespace Microsoft.eShopOnContainers.Services.Basket.API
{ {
public class Startup public class Startup
{ {
private ConnectionMultiplexer _connectionMultiplexer;
public Startup(IConfiguration configuration) public Startup(IConfiguration configuration)
{ {
Configuration = configuration; Configuration = configuration;
} }
public IConfiguration Configuration { get; } public IConfiguration Configuration { get; }
@ -53,15 +58,7 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API
services.AddGrpc(options => services.AddGrpc(options =>
{ {
options.EnableDetailedErrors = true; 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); RegisterAppInsights(services);
@ -115,7 +112,7 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API
//but given that there is a delay on resolving the ip address //but given that there is a delay on resolving the ip address
//and then creating the connection it seems reasonable to move //and then creating the connection it seems reasonable to move
//that cost to startup instead of having the first request pay the //that cost to startup instead of having the first request pay the
//penalty. //penalty.
services.AddSingleton<ConnectionMultiplexer>(sp => services.AddSingleton<ConnectionMultiplexer>(sp =>
{ {
var settings = sp.GetRequiredService<IOptions<BasketSettings>>().Value; var settings = sp.GetRequiredService<IOptions<BasketSettings>>().Value;
@ -123,7 +120,17 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API
configuration.ResolveDns = true; 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")
}); });

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

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

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