Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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();
        }
Exemplo n.º 3
0
        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());
        }
Exemplo n.º 4
0
        /// <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);
        }