예제 #1
0
        public static void AddJaeger(this ContainerBuilder builder)
        {
            builder.Register(context =>
            {
                var configuration = context.Resolve <IConfiguration>();
                var options       = new JaegerOptions();
                configuration.GetSection("jaeger").Bind(options);
                return(options);
            }).SingleInstance();

            builder.Register <ITracer>(context =>
            {
                var loggerFactory = context.Resolve <ILoggerFactory>();
                var options       = context.Resolve <JaegerOptions>();

                var reporter = new RemoteReporter
                               .Builder()
                               .WithSender(new UdpSender(options.UdpHost, options.UdpPort, options.MaxPacketSize))
                               .WithLoggerFactory(loggerFactory)
                               .Build();

                var sampler = GetSampler(options);
                var tracer  = new Tracer
                              .Builder(options.ServiceName)
                              .WithReporter(reporter)
                              .WithSampler(sampler)
                              .Build();

                GlobalTracer.Register(tracer);
                return(tracer);
            }).SingleInstance();
        }
예제 #2
0
        private static ISampler GetSampler(JaegerOptions options)
        {
            switch (options.Sampler)
            {
            case "const": return(new ConstSampler(true));

            case "rate": return(new RateLimitingSampler(options.MaxTracesPerSecond));

            case "probabilistic": return(new ProbabilisticSampler(options.SamplingRate));

            default: return(new ConstSampler(true));
            }
        }