2021-04-07 18:05:46 +05:30
|
|
|
|
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();
|
2021-04-09 16:01:38 +05:30
|
|
|
|
var endpoint = Environment.GetEnvironmentVariable("OTEL_EXPORTER_TOOL_ENDPOINT")?.ToLower();
|
|
|
|
|
|
2021-04-07 18:05:46 +05:30
|
|
|
|
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 =>
|
2021-04-09 16:01:38 +05:30
|
|
|
|
{
|
|
|
|
|
options.AgentHost = endpoint;
|
2021-04-07 18:05:46 +05:30
|
|
|
|
});
|
|
|
|
|
break;
|
|
|
|
|
case "otlp":
|
|
|
|
|
tracerProviderBuilder.AddOtlpExporter(options =>
|
2021-04-09 16:01:38 +05:30
|
|
|
|
{
|
2021-04-07 18:05:46 +05:30
|
|
|
|
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 =>
|
2021-04-09 16:01:38 +05:30
|
|
|
|
{
|
2021-04-07 18:05:46 +05:30
|
|
|
|
options.Endpoint = new Uri(endpoint);
|
|
|
|
|
});
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
tracerProviderBuilder.AddConsoleExporter();
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|