@ -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(); | |||
} | |||
} | |||
} |
@ -0,0 +1,22 @@ | |||
<Project Sdk="Microsoft.NET.Sdk"> | |||
<PropertyGroup> | |||
<TargetFramework>net5.0</TargetFramework> | |||
</PropertyGroup> | |||
<ItemGroup> | |||
<PackageReference Include="StackExchange.Redis" Version="2.2.4" /> | |||
<PackageReference Include="OpenTelemetry" Version="1.0.1" /> | |||
<PackageReference Include="OpenTelemetry.Exporter.Console" Version="1.0.1" /> | |||
<PackageReference Include="OpenTelemetry.Exporter.Jaeger" Version="1.0.1" /> | |||
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.0.1" /> | |||
<PackageReference Include="OpenTelemetry.Exporter.Zipkin" Version="1.0.1" /> | |||
<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.0.0-rc2" /> | |||
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.0.0-rc2" /> | |||
<PackageReference Include="OpenTelemetry.Instrumentation.Http" Version="1.0.0-rc2" /> | |||
<PackageReference Include="OpenTelemetry.Instrumentation.GrpcNetClient" Version="1.0.0-rc2" /> | |||
<PackageReference Include="OpenTelemetry.Instrumentation.SqlClient" Version="1.0.0-rc2" /> | |||
<PackageReference Include="OpenTelemetry.Instrumentation.StackExchangeRedis" Version="1.0.0-rc2" /> | |||
</ItemGroup> | |||
</Project> |
@ -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; } | |||
} | |||
} |
@ -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(); | |||
} | |||
} | |||
} |
@ -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; | |||
} | |||
}); | |||
} | |||
} | |||
} |
@ -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; | |||
} | |||
}); | |||
} | |||
} | |||
} |
@ -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; | |||
} | |||
}); | |||
} | |||
} | |||
} |