Metrics and tracing
Surefire emits metrics via System.Diagnostics.Metrics and traces via System.Diagnostics.ActivitySource. Both use the name "Surefire".
Instruments
Section titled “Instruments”| Instrument | Type | Unit | Description |
|---|---|---|---|
surefire.runs.claimed | Counter | — | Runs claimed by workers |
surefire.runs.completed | Counter | — | Runs completed successfully |
surefire.runs.failed | Counter | — | Runs that reached dead letter |
surefire.runs.cancelled | Counter | — | Runs cancelled |
surefire.runs.duration.ms | Histogram | ms | Run execution duration |
Current counters and histograms are emitted without additional metric tags.
Traces
Section titled “Traces”The "Surefire" activity source creates surefire.run.execute spans with these tags:
| Tag | Description |
|---|---|
surefire.run.id | The run ID |
surefire.run.job | The job name |
surefire.run.attempt | Attempt number |
surefire.run.parent | Parent run ID (if any) |
Failed jobs set the span status to Error with the exception message.
Install the OpenTelemetry packages:
dotnet add package OpenTelemetry.Extensions.Hostingdotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocoldotnet add package OpenTelemetry.Exporter.Console # optional, for local devWire up the meter and activity source in your host builder:
using OpenTelemetry.Metrics;using OpenTelemetry.Trace;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddOpenTelemetry() .WithMetrics(metrics => { metrics.AddMeter("Surefire"); metrics.AddOtlpExporter(); // metrics.AddConsoleExporter(); // uncomment for local dev }) .WithTracing(tracing => { tracing.AddSource("Surefire"); tracing.AddOtlpExporter(); // tracing.AddConsoleExporter(); // uncomment for local dev });
builder.Services.AddSurefire();The OTLP exporter sends data to any OpenTelemetry-compatible backend (Jaeger, Grafana, Aspire Dashboard, etc.). By default it connects to http://localhost:4317. Configure via environment variables:
OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317OTEL_SERVICE_NAME=my-app.NET Aspire
Section titled “.NET Aspire”If you’re using .NET Aspire, metrics and traces are collected automatically — just add the meter and source:
builder.Services.AddOpenTelemetry() .WithMetrics(m => m.AddMeter("Surefire")) .WithTracing(t => t.AddSource("Surefire"));