Last active
July 2, 2020 08:21
-
-
Save Tirael/16be34de10ed5fd88882716f5a47ca22 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using Jaeger.Reporters; | |
using Jaeger.Samplers; | |
using Jaeger.Senders; | |
using Jaeger.Senders.Thrift; | |
using Microsoft.AspNetCore.Builder; | |
using Microsoft.AspNetCore.Hosting; | |
using Microsoft.Extensions.Configuration; | |
using Microsoft.Extensions.DependencyInjection; | |
using Microsoft.Extensions.Hosting; | |
using OpenTracing; | |
using OpenTracing.Util; | |
// Use "OpenTracing.Contrib.NetCore" to automatically generate spans for ASP.NET Core, Entity Framework Core, ... | |
// See https://github.com/opentracing-contrib/csharp-netcore for details. | |
services.AddOpenTracing(); | |
// Adds the Jaeger Tracer. | |
services.AddSingleton<ITracer>(serviceProvider => | |
{ | |
string serviceName = serviceProvider | |
.GetRequiredService<IWebHostEnvironment>() | |
.ApplicationName; | |
ISender udpSender = new UdpSender("localhost", 5775, maxPacketSize: 0); | |
ISender httpSender = new HttpSender("http://localhost:14268/api/traces"); | |
IReporter reporter = new RemoteReporter.Builder() | |
.WithSender(udpSender) | |
.WithMaxQueueSize(maxQueueSize: 100) | |
.Build(); | |
// This will log to a default localhost installation of Jaeger. | |
var tracer = new Tracer.Builder(serviceName) | |
.WithSampler(new ConstSampler(true)) | |
.WithReporter(reporter) | |
.Build(); | |
// Allows code that can't use DI to also access the tracer. | |
GlobalTracer.Register(tracer); | |
return tracer; | |
}); | |
// ***************** | |
// ServiceCollectionExtensions.cs | |
using System; | |
using Microsoft.Extensions.DependencyInjection.Extensions; | |
using Microsoft.Extensions.Hosting; | |
using OpenTracing; | |
using OpenTracing.Contrib.NetCore; | |
using OpenTracing.Contrib.NetCore.Configuration; | |
using OpenTracing.Contrib.NetCore.Internal; | |
using OpenTracing.Util; | |
namespace Microsoft.Extensions.DependencyInjection | |
{ | |
public static class ServiceCollectionExtensions | |
{ | |
/// <summary> | |
/// Adds OpenTracing instrumentation for ASP.NET Core, CoreFx (BCL), Entity Framework Core. | |
/// </summary> | |
public static IServiceCollection AddOpenTracing(this IServiceCollection services, Action<IOpenTracingBuilder> builder = null) | |
{ | |
if (services == null) | |
throw new ArgumentNullException(nameof(services)); | |
return services.AddOpenTracingCoreServices(otBuilder => | |
{ | |
otBuilder.AddAspNetCore() | |
.AddCoreFx() | |
.AddEntityFrameworkCore() | |
.AddLoggerProvider(); | |
builder?.Invoke(otBuilder); | |
}); | |
} | |
/// <summary> | |
/// Adds the core services required for OpenTracing without any actual instrumentations. | |
/// </summary> | |
public static IServiceCollection AddOpenTracingCoreServices(this IServiceCollection services, Action<IOpenTracingBuilder> builder = null) | |
{ | |
if (services == null) | |
throw new ArgumentNullException(nameof(services)); | |
services.TryAddSingleton<ITracer>(GlobalTracer.Instance); | |
services.TryAddSingleton<IGlobalTracerAccessor, GlobalTracerAccessor>(); | |
services.TryAddSingleton<DiagnosticManager>(); | |
services.TryAddEnumerable(ServiceDescriptor.Singleton<IHostedService, InstrumentationService>()); | |
var builderInstance = new OpenTracingBuilder(services); | |
builder?.Invoke(builderInstance); | |
return services; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment