public static IServiceCollection AddOpenTracingAndJaeger(this IServiceCollection services) { services.AddOpenTracing(); // Adds the Jaeger Tracer. services.AddSingleton <ITracer>(serviceProvider => { var serviceName = "API"; var loggerFactory = serviceProvider.GetRequiredService <ILoggerFactory>(); var configuration = Jaeger.Configuration.FromEnv(loggerFactory); var tracer = configuration.GetTracerBuilder() .WithLoggerFactory(loggerFactory) .WithSampler(new ConstSampler(true)) .Build(); GlobalTracer.Register(tracer); var config = new Jaeger.Configuration(serviceName, loggerFactory); return(tracer); }); return(services); }
static async Task Main(string[] args) { var connStr = @"Data Source=(LocalDB)\MSSQLLocalDB;Integrated Security=True;Database=TestSandbox"; IHost host = new HostBuilder() .ConfigureServices(collection => { collection.AddTransient <IDapperContext>(provider => new DapperContext(connStr)); collection.AddTransient <IDbManager, DbManager>(); collection.AddOpenTracing(builder => { builder .AddBcl() .AddSqlClient() .AddLoggerProvider(); }); collection.AddSingleton <ITracer>(cli => { string applicationName = "SandboxSqlClient"; string environment = "Test"; string jaegerAgentHost = "localhost"; Environment.SetEnvironmentVariable("JAEGER_SERVICE_NAME", applicationName); Environment.SetEnvironmentVariable("JAEGER_AGENT_HOST", jaegerAgentHost); Environment.SetEnvironmentVariable("JAEGER_AGENT_PORT", "6831"); Environment.SetEnvironmentVariable("JAEGER_SAMPLER_TYPE", "const"); var loggerFactory = new LoggerFactory(); Jaeger.Configuration config = Jaeger.Configuration.FromEnv(loggerFactory); config.WithTracerTags(new Dictionary <string, string>() { { "environment", environment } }); ITracer tracer = config.GetTracer(); if (!GlobalTracer.IsRegistered()) { GlobalTracer.Register(tracer); } return(tracer); }); }).UseConsoleLifetime().Build(); await host.StartAsync(); var dbManager = host.Services.GetService <IDbManager>(); dbManager.CreateDb(); }
public static ITracer Init(string service) { var loggerFactory = NullLoggerFactory.Instance; var samplerConfig = SamplerConfiguration.FromEnv(loggerFactory) .WithType(ConstSampler.Type) .WithParam(1); var reporterConfig = ReporterConfiguration.FromEnv(loggerFactory); var config = new Jaeger.Configuration(service, loggerFactory) .WithSampler(samplerConfig) .WithReporter(reporterConfig); return(config.GetTracer()); }
/// <summary> /// 添加Jaeger链路追踪,实例对象ITracer /// </summary> /// <param name="services"></param> /// <param name="openTracingBuilder"></param> /// <returns></returns> public static IServiceCollection AddJaeger(this IServiceCollection services, Action <IOpenTracingBuilder> openTracingBuilder = null) { if (openTracingBuilder == null) { openTracingBuilder = builder => { builder.AddCoreFx(); builder.AddAspNetCore(); builder.AddEntityFrameworkCore(); builder.AddLoggerProvider(); builder.ConfigureGenericDiagnostics(options => { }); builder.ConfigureAspNetCore(options => { options.Hosting.OperationNameResolver = (context) => { return(context.Request.Path.ToUriComponent()); }; options.Hosting.IgnorePatterns.Add(a => { return(false); }); }); }; } services.AddOpenTracing(openTracingBuilder); services.AddSingleton <ITracer>(serviceProvider => { var config = serviceProvider.GetService <TracingConfiguration>(); var serviceName = config.SerivceName ?? serviceProvider.GetRequiredService <IHostingEnvironment>().ApplicationName; var loggerFactory = serviceProvider.GetRequiredService <ILoggerFactory>(); var endPoint = config.EndPoint; var senderConfiguration = new Jaeger.Configuration.SenderConfiguration(loggerFactory); if (!string.IsNullOrEmpty(config.AgentHost)) { senderConfiguration .WithAgentHost(config.AgentHost) .WithAgentPort(config.AgentPort); } else { senderConfiguration.WithEndpoint(endPoint); } var samplerConfiguration = new Jaeger.Configuration.SamplerConfiguration(loggerFactory) .WithType(config.SamplerType); var reporterConfiguration = new Jaeger.Configuration.ReporterConfiguration(loggerFactory) .WithFlushInterval(TimeSpan.FromSeconds(config.FlushIntervalSeconds)) .WithLogSpans(config.LogSpans) .WithSender(senderConfiguration); ITracer tracer = null; if (config.Open) { tracer = new Jaeger.Configuration(serviceName, loggerFactory) .WithSampler(samplerConfiguration) .WithReporter(reporterConfiguration) .GetTracer(); } else { tracer = new Jaeger.Tracer.Builder(serviceName) .WithSampler(new Jaeger.Samplers.RateLimitingSampler(0)) .WithReporter(new Jaeger.Reporters.NoopReporter()).Build(); } if (!GlobalTracer.IsRegistered()) { GlobalTracer.Register(tracer); } return(tracer); }); return(services); }