private EventPipeProvider[] GetEventPipeProviders() { // EventSources support EventCounter based metrics directly IEnumerable <EventPipeProvider> eventCounterProviders = _counterList.Providers.Select( providerName => new EventPipeProvider(providerName, EventLevel.Error, 0, new Dictionary <string, string>() { { "EventCounterIntervalSec", _interval.ToString() } })); //System.Diagnostics.Metrics EventSource supports the new Meter/Instrument APIs const long TimeSeriesValues = 0x2; StringBuilder metrics = new StringBuilder(); foreach (string provider in _counterList.Providers) { if (metrics.Length != 0) { metrics.Append(","); } if (_counterList.IncludesAllCounters(provider)) { metrics.Append(provider); } else { string[] providerCounters = _counterList.GetCounters(provider).Select(counter => $"{provider}\\{counter}").ToArray(); metrics.Append(string.Join(',', providerCounters)); } } EventPipeProvider metricsEventSourceProvider = new EventPipeProvider("System.Diagnostics.Metrics", EventLevel.Informational, TimeSeriesValues, new Dictionary <string, string>() { { "SessionId", _metricsEventSourceSessionId }, { "Metrics", metrics.ToString() }, { "RefreshInterval", _interval.ToString() }, { "MaxTimeSeries", _maxTimeSeries.ToString() }, { "MaxHistograms", _maxHistograms.ToString() } } ); return(eventCounterProviders.Append(metricsEventSourceProvider).ToArray()); }