public static IActivityPipeline CreateForDevelopmentPhase(TelemetryClient applicationInsightsClient) { Util.EnsureNotNull(applicationInsightsClient, nameof(applicationInsightsClient)); ActivityPipeline pipeline = new ActivityPipeline(); // In development/debug phase we log all activities. // We also extract metrics from all activities. // The metric includes the activity duration as Value and the number of activities as Count. // The metric dimensions are the LogLevel category and the Status of the activities. pipeline.Processors.Add(ActivityProcessor.CreateMetricExtractor( extractorName: ProcessorNames.MetricExtractorForCountsAndDurations, activitySelector: ActivityProcessor.UseSelectors.SelectAll(), applicationInsightsClient: applicationInsightsClient, outputMetricName: MetricNames.ActivityCountsAndDurations, measurementValueExtractor: ActivityProcessor.UseMeasurement.ActivityDuration(), activityLabelsToMetricDimensionsMap: ActivityProcessor.UseLabels.MapToDimensions( ActivityProcessor.UseLabels.MagicNames.ActivityStatus, ActivityProcessor.UseLabels.MagicNames.ActivityLogLevel) )); pipeline.Senders.Add(new ApplicationInsightsActivitySender(SenderNames.DefaultApplicationInsightsSender, applicationInsightsClient)); return(pipeline); }
public static IActivityPipeline CreateForMaturePhase(TelemetryClient applicationInsightsClient) { Util.EnsureNotNull(applicationInsightsClient, nameof(applicationInsightsClient)); ActivityPipeline pipeline = new ActivityPipeline(); pipeline.Processors.Add(ActivityProcessor.CreateMetricExtractor( extractorName: ProcessorNames.MetricExtractorForCountsAndDurations, activitySelector: ActivityProcessor.UseSelectors.SelectAll(), applicationInsightsClient: applicationInsightsClient, outputMetricName: MetricNames.ActivityCountsAndDurations, measurementValueExtractor: ActivityProcessor.UseMeasurement.ActivityDuration(), activityLabelsToMetricDimensionsMap: ActivityProcessor.UseLabels.MapToDimensions( ActivityProcessor.UseLabels.MagicNames.ActivityStatus, ActivityProcessor.UseLabels.MagicNames.ActivityLogLevel) )); pipeline.Processors.Add(ActivityProcessor.CreateMetricExtractor( extractorName: ProcessorNames.MetricExtractorForCountsAndDurations, activitySelector: ActivityProcessor.UseSelectors.SelectAll(), applicationInsightsClient: applicationInsightsClient, outputMetricName: MetricNames.ActivityCountsAndDurationsByName, measurementValueExtractor: ActivityProcessor.UseMeasurement.ActivityDuration(), activityLabelsToMetricDimensionsMap: new[] { ActivityProcessor.UseLabels.LabelExtractorToDimensionMapEntry( (a) => a.LogLevel.ToCategoryString(), ActivityProcessor.UseLabels.MagicNames.ActivityLogLevel), ActivityProcessor.UseLabels.LabelExtractorToDimensionMapEntry( (a) => a.Status.ToString(), ActivityProcessor.UseLabels.MagicNames.ActivityStatus), ActivityProcessor.UseLabels.LabelExtractorToDimensionMapEntry( (new ValueExtractorForLabelsWithCardinalityLimit((a) => a.Name, maxValueCount: 100)).ExtractValue, ActivityProcessor.UseLabels.MagicNames.ActivityName) } )); pipeline.Processors.Add(ActivityProcessor.CreateFilterToExcludeAllSelected( filterName: ProcessorNames.FilterToExcludeDevelopmentLogs, applyToActivitySelector: ActivityProcessor.UseSelectors.Combine.And( ActivityProcessor.UseSelectors.ByLogLevel.SmallerOrEqual(ActivityLogLevel.Information), ActivityProcessor.UseSelectors.ByStatus.NotEqual(ActivityStatus.Faulted)) )); pipeline.Senders.Add(new ApplicationInsightsActivitySender(SenderNames.DefaultApplicationInsightsSender, applicationInsightsClient)); return(pipeline); }