diff --git a/src/NBomber.Sinks.OpenTelemetry/OpenTelemetrySdkEventListener.cs b/src/NBomber.Sinks.OpenTelemetry/OpenTelemetrySdkEventListener.cs new file mode 100644 index 0000000..bde591f --- /dev/null +++ b/src/NBomber.Sinks.OpenTelemetry/OpenTelemetrySdkEventListener.cs @@ -0,0 +1,38 @@ +using System.Diagnostics.Tracing; +using Serilog; + +namespace NBomber.Sinks.OpenTelemetry; + +internal class OpenTelemetrySdkEventListener : EventListener +{ + private readonly ILogger _logger; + + public OpenTelemetrySdkEventListener(ILogger logger) + { + _logger = logger; + } + + protected override void OnEventSourceCreated(EventSource eventSource) + { + if (eventSource.Name.StartsWith("OpenTelemetry", StringComparison.OrdinalIgnoreCase)) + { + EnableEvents(eventSource, EventLevel.Error); + } + } + + protected override void OnEventWritten(EventWrittenEventArgs eventData) + { + if (!eventData.EventSource.Name.StartsWith("OpenTelemetry", StringComparison.OrdinalIgnoreCase)) + return; + + var payload = eventData.Payload != null + ? string.Join(", ", eventData.Payload) + : string.Empty; + + _logger.Error( + "OpenTelemetrySink [{Source}] {EventName}: {Payload}", + eventData.EventSource.Name, + eventData.EventName, + payload); + } +} diff --git a/src/NBomber.Sinks.OpenTelemetry/OpenTelemetrySink.cs b/src/NBomber.Sinks.OpenTelemetry/OpenTelemetrySink.cs index cc57925..92c6cee 100644 --- a/src/NBomber.Sinks.OpenTelemetry/OpenTelemetrySink.cs +++ b/src/NBomber.Sinks.OpenTelemetry/OpenTelemetrySink.cs @@ -26,6 +26,7 @@ public class OpenTelemetrySink : IReportingSink private EmptyMetricsReader _customMetricsReader = null!; private OtlpExporterOptions _config = null!; private MetricReaderTemporalityPreference _readerTemporalityPreference; + private OpenTelemetrySdkEventListener _eventListener = null!; /// /// Gets the name of the sink. @@ -65,11 +66,12 @@ public Task Init(IBaseContext context, IConfiguration infraConfig) { _logger = context.Logger.ForContext(); _context = context; + _eventListener = new OpenTelemetrySdkEventListener(_logger); var config = infraConfig?.GetSection("OpenTelemetrySink").Get(); if (config != null) _config = config; - + _customMetricsReader = new EmptyMetricsReader(new OtlpMetricExporter(_config)); _customMetricsReader.TemporalityPreference = _readerTemporalityPreference; @@ -156,6 +158,7 @@ public void Dispose() _meterProvider.Dispose(); _customMetricsReader.Dispose(); _meter.Dispose(); + _eventListener.Dispose(); } private void RecordRealtimeStats(ScenarioStats[] stats, OperationType operationType)