示例#1
0
        /// <summary>
        /// Should be instantiated before any Http request takes place
        /// </summary>
        /// <param name="setupConfig"></param>
        private SimpleTracingSetup(SimpleTracingSetupConfig setupConfig)
        {
            setupConfig.CheckValidity();
            this._setupConfig = setupConfig;

            var probabilisticSampler = new ProbabilisticSampler(this._setupConfig.TracingComponentsConfigProvider);
            var debugModeSampler     = new DebugModeSampler(probabilisticSampler, this._setupConfig.DebugModeConfig);
            var sampler = new TracesThrottlerSampler(
                new ParentBasedSampler(debugModeSampler),
                this._setupConfig.TracingComponentsConfigProvider);

            this._setupConfig.InstrumentationConfig.WithSampler(sampler);

            var httpClientHeadersTracker = new ClientHeadersTracker(this._setupConfig.TracingComponentsConfigProvider);

            this._setupConfig.InstrumentationConfig.HttpInstrumentationEnrichHooks.Add(httpClientHeadersTracker);
            TracingSetup.PreConfigure(this._setupConfig.InstrumentationConfig);

            this._startTraceHandler = new StartTraceHandler(
                ActivityTracer.Singleton,
                () => sampler.DecrementOngoingTraces(),
                this._setupConfig.RouteTemplateProvider, this._setupConfig.DebugModeConfig,
                this._setupConfig.TracingComponentsConfigProvider
                );

            this._periodicUpdater = new PeriodicUpdater(
                this._setupConfig.ComponentsUpdateInterval,
                this._setupConfig.ComponentsUpdateTimeout,
                this._setupConfig.TracingComponentsConfigProvider,
                new List <IConfigUpdatableComponent> {
                probabilisticSampler, sampler, httpClientHeadersTracker, this._startTraceHandler
            },
                this._setupConfig.Logger, this._setupConfig.MetricsTracker);

            this._periodicMetricsReporter = new PeriodicMetricsReporter(
                this._setupConfig.ComponentsMetricsReportInterval,
                new List <IMeasurableComponent> {
                probabilisticSampler, debugModeSampler, sampler, this._startTraceHandler
            },
                this._setupConfig.Logger,
                this._setupConfig.MetricsTracker);
        }
示例#2
0
        public void ConfigureTracing()
        {
            try
            {
                this._setupConfig.InstrumentationConfig.AddResourceEnhancers(new List <IResourceEnhancer>
                {
                    OsInfo.GetResourceEnhancer(),
                    AwsInstanceIdentityProvider.GetCloudResourceEnhancer(),
                    AwsInstanceIdentityProvider.GetHostResourceEnhancer()
                });

                this._tracerProvider = TracingSetup.Configure(this._setupConfig.InstrumentationConfig);
                this._periodicUpdater.Start();
                this._periodicMetricsReporter.Start();
                this._configured = true;
            }
            catch (Exception ex)
            {
                this._setupConfig.Logger.Error(nameof(SimpleTracingSetup), "Failed to configure OpenTelemetry", ex);
            }
        }