Beispiel #1
0
        private static void SetupJaeger()
        {
            var jaegerTracerConfig = new JaegerTracerConfig();

            jaegerTracerConfig.DefaultTracerId = "Default-Tracer";
            jaegerTracerConfig.TraceEndPoint   = "http://localhost:14268/api/traces";
            var tracerFactory = new JaegerTracerFactory(jaegerTracerConfig);

            //replace null
            var tracerContext = new TracerContext(tracerFactory);

            TracerContext.Resolve = () => tracerContext;
        }
Beispiel #2
0
        public static void InitDemoTrace(this SimpleIoc simpleIoc)
        {
            simpleIoc.Register <FooData>(() => new FooData());
            simpleIoc.Register <FooService>(() => new FooService(simpleIoc.Resolve <FooData>()));
            simpleIoc.Register <FooApi>(() => new FooApi(simpleIoc.Resolve <FooService>()));

            var traceConfig = new TraceConfig();

            traceConfig.DefaultTracerId = "Demo.ConsoleApp";
            traceConfig.SetTraceEndPoint("http://192.168.1.182:14268/api/traces");
            var tracerFactory = new JaegerTracerFactory(new MyLoggerFactory(), traceConfig);

            TracerContext.Resolve = () => new TracerContext(tracerFactory);
        }
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            var serviceName = String.Format(Configuration.GetValue <string>("name", "Service {0}"), new Random().Next());

            Console.WriteLine(String.Format("Service Name: {0}", serviceName));

            services.AddControllers();
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo {
                    Title = "webapi_sample", Version = "v1"
                });
            });

            if (Configuration.GetValue <string>("tracer", "none").ToLower().Equals("jaeger"))
            {
                #region OpenTracing_Usage
                OpenTracing.Util.GlobalTracer.Register(
                    JaegerTracerFactory.Create(
                        serviceName, LoggerFactory.Create(builder => builder.AddConsole()))
                    );
                services.AddOpenTracing();
                #endregion
            }

            #region OpenTelemetry_Usage
            if (Configuration.GetValue <string>("tracer", "none").ToLower().Equals("opentelemetry"))
            {
                services.AddOpenTelemetryTracing((builder) =>
                                                 builder
                                                 .AddSource("NETCONF2020.MyApplication")
                                                 .AddAspNetCoreInstrumentation()
                                                 .AddHttpClientInstrumentation()
                                                 //.AddEntityFrameworkCoreInstrumentation()
                                                 //.AddJaegerExporter(o => o.AgentHost = Configuration.GetValue<string>("otlp-endpoint", "otel-collector"))
                                                 .AddOtlpExporter(o => o.Endpoint = Configuration.GetValue <string>("otlp-endpoint", "otel-collector:55680"))
                                                 .AddConsoleExporter()
                                                 .SetSampler(new AlwaysOnSampler())
                                                 );
            }
            #endregion
        }
        private static void AddTraceClients(IServiceCollection services, IConfiguration configuration)
        {
            services.AddSingleton <IClientTracerApi, ClientTracerApi>();
            services.AddSingleton <CommandQueue>();
            services.AddSingleton <CommandQueueTask>();

            //SimpleTrace.dll
            var assemblyToScan = Assembly.GetAssembly(typeof(ICommandLogistic));

            //All IClientSpanProcess
            services.AddSingletonFromAssembly(assemblyToScan, typeof(IClientSpanProcess));
            //All ICommandLogistic and KnownCommands
            services.AddSingletonFromAssembly(assemblyToScan, typeof(ICommandLogistic));
            services.AddSingleton(sp =>
            {
                var knownCommands = KnownCommands.Instance;

                var commandLogistics = sp.GetServices <ICommandLogistic>().ToList();
                foreach (var commandLogistic in commandLogistics)
                {
                    knownCommands.Register(commandLogistic);
                }

                return(knownCommands);
            });

            //TraceConfig
            var traceConfig = TryLoadTraceConfig(configuration);

            services.AddSingleton(traceConfig);

            //CommandQueueTaskLoop
            services.AddSingleton(sp =>
            {
                var commandQueueTaskLoop = new CommandQueueTaskLoop();

                var queueTask        = sp.GetService <CommandQueueTask>();
                var knownCommands    = sp.GetService <KnownCommands>();
                var commandLogistics = sp.GetServices <ICommandLogistic>().ToList();
                foreach (var commandLogistic in commandLogistics)
                {
                    knownCommands.Register(commandLogistic);
                }

                commandQueueTaskLoop.Init(
                    TimeSpan.FromSeconds(traceConfig.FlushIntervalSecond),
                    queueTask,
                    sp.GetService <CommandQueue>(),
                    sp.GetServices <ICommandLogistic>(),
                    sp.GetServices <IClientSpanProcess>(),
                    DateHelper.Instance.GetDateNow);

                return(commandQueueTaskLoop);
            });
            services.AddSingleton(CommandQueueProcessLogs.Instance);


            //IClientSpanRepository
            if (traceConfig.TraceSaveProcessEnabled)
            {
                services.AddSingleton <IClientSpanRepository, ClientSpanRepository>();
            }
            else
            {
                services.AddSingleton <IClientSpanRepository, NullClientSpanRepository>();
            }

            //TracerContext
            var tracerContext = TracerContext.Resolve();

            services.AddSingleton <TracerContext>(tracerContext);

            if (traceConfig.TraceSendProcessEnabled)
            {
                //JaegerTracerConfig
                var jaegerTracerConfig = new JaegerTracerConfig();
                jaegerTracerConfig.DefaultTracerId = traceConfig.DefaultTracerId;
                jaegerTracerConfig.TraceEndPoint   = traceConfig.TraceEndPoint;
                services.AddSingleton(jaegerTracerConfig);

                //ITracerFactory and TracerContext
                var tracerFactory = new JaegerTracerFactory(jaegerTracerConfig);
                services.AddSingleton <ITracerFactory>(tracerFactory);
                tracerContext.Factory = tracerFactory;

                //ITraceSender
                services.AddSingleton <ITraceSender, JaegerTraceSender>();

                //log TraceConfig
                var tracer = tracerContext.Current();
                using (var scope = tracer.BuildSpan("LogObject").StartActive(true))
                {
                    scope.Span.SetTag("Name", "TraceConfig");
                    var dictionary = MyModelHelper.GetKeyValueDictionary(traceConfig);
                    foreach (var kv in dictionary)
                    {
                        scope.Span.Log(kv.Key + " : " + kv.Value);
                    }
                }
            }
            else
            {
                services.AddSingleton <ITracerFactory, NullTracerFactory>();
                services.AddSingleton <ITraceSender, NullTraceSender>();
            }
        }