TurboMediator
Observability

Telemetry

OpenTelemetry distributed tracing and metrics integration

The telemetry behavior integrates with OpenTelemetry to provide distributed tracing and metrics for all mediator operations.

Installation

dotnet add package TurboMediator.Observability

Configuration

builder.Services.AddTurboMediator(m =>
{
    // Apply to all messages
    m.WithTelemetry(options =>
    {
        options.RecordTraces = true;
        options.RecordMetrics = true;
        options.RecordExceptionStackTrace = false;
    });

    // Or apply to a specific message type
    m.WithTelemetry<ProcessOrderCommand, OrderResult>(options =>
    {
        options.RecordExceptionStackTrace = true;
    });
});

TelemetryOptions

OptionDefaultDescription
RecordTracestrueCreate Activity spans for each operation
RecordMetricstrueRecord counters and histograms
RecordExceptionStackTracefalseInclude stack traces in error events

Built-in Metrics

TurboMediatorTelemetry provides these static instruments:

MetricTypeDescription
turbomediator.requests.totalCounterTotal requests processed
turbomediator.requests.successCounterSuccessful requests
turbomediator.requests.failureCounterFailed requests
turbomediator.requests.durationHistogramRequest duration in milliseconds
turbomediator.notifications.totalCounterTotal notifications published

Custom Telemetry Tags

Implement ITelemetryEnriched on your messages to add custom tags to traces:

public record ProcessOrderCommand(Guid OrderId, string Region)
    : ICommand<OrderResult>, ITelemetryEnriched
{
    public IEnumerable<KeyValuePair<string, object?>> GetTelemetryTags()
    {
        return new Dictionary<string, object?>
        {
            ["order.id"] = OrderId.ToString(),
            ["order.region"] = Region
        };
    }
}

OpenTelemetry Integration

Register the TurboMediator source with your OpenTelemetry configuration:

builder.Services.AddOpenTelemetry()
    .WithTracing(tracing =>
    {
        tracing
            .AddSource(TurboMediatorTelemetry.ActivitySource.Name)
            .AddAspNetCoreInstrumentation()
            .AddOtlpExporter();
    })
    .WithMetrics(metrics =>
    {
        metrics
            .AddMeter(TurboMediatorTelemetry.Meter.Name)
            .AddOtlpExporter();
    });

Activity Spans

Each mediator operation creates an Activity span with:

  • Name: Message type name (e.g., CreateUserCommand)
  • Tags: Message type, handler type, success/failure status, duration
  • Events: Exception details on failure
  • Custom tags: From ITelemetryEnriched implementations

The telemetry behavior automatically correlates with ASP.NET Core and HttpClient traces when using OpenTelemetry, giving you end-to-end distributed tracing.

On this page