Skip to content

Performance

On a Hetzner Cloud ccx33 (8 dedicated vCPUs, 32 GB RAM), with telemetrygen on a separate ccx33 (8 dedicated vCPUs, 32 GB RAM) in the same location over a private network, Fanout v2026.10.7-alpha accepted 422,408 mixed OpenTelemetry items/s for five minutes. The composition was 51,358 spans, 184,883 log records and 186,178 metric points per second. Every generator exited successfully, there were zero dropped rows and no restarts, and fanout repair verify validated the Parquet store. The run measured ingest only.

Fanout ran alone on its ccx33 with dedicated AMD EPYC-Milan vCPUs. Both VMs ran Ubuntu 24.04 in Hetzner’s fsn1 location. telemetrygen v0.157.0 sent plaintext OTLP/gRPC over the private network, using 1,000-item batches and 8 workers per process.

The publish preset swept 1, 2, 4, 8, 16, 32 and 64 processes per signal for traces, logs, metrics and mixed ingest, with three repetitions at each process count. It then ran one five-minute mixed phase at 32 processes per signal. Accepted throughput is the change in Fanout’s fanout_ingest_rows_total counter over each measured phase.

The suite accepted 584.1 million items in total: 131,484,819 spans, 217,735,381 log records and 234,835,485 metric points.

The sustained phase ran once for 302.9 seconds. Fanout averaged 7.33 CPU cores and reached 13.5 GiB peak RSS. The generator host averaged 7.01 of 8 CPU cores.

SignalAccepted items/s
Spans51,358
Log records184,883
Metric points186,178
Mixed total422,408

telemetrygen keeps one trace export in flight per process, while log and metric processes keep eight, producing the measured composition.

The run measured ingest only, using synthetic, highly compressible telemetrygen payloads. Results describe this hardware.

Each peak is the highest median accepted rate in that workload’s sweep. Ranges cover all three repetitions at the listed process count. CPU columns are median average cores at that count; each host has 8 cores.

WorkloadMedian peak items/sProcesses per signalRange items/sFanout CPU coresGenerator CPU cores
Mixed429,74932429,504–471,5066.957.02
Traces243,69664225,110–267,9166.036.83
Logs342,49464299,902–347,7216.823.46
Metrics540,10264293,700–543,9415.834.64

All rates below are accepted items/s across the three repetitions. CPU columns are median average cores per host.

Processes per signalMedian items/sMin items/sMax items/sFanout CPU coresGenerator CPU cores
141,30040,26941,3624.920.31
281,07580,66181,6514.440.65
4148,972130,086154,6265.091.33
8244,888219,064273,9016.062.56
16330,232325,618364,3016.394.29
32429,749429,504471,5066.957.02
64422,667384,338441,4606.797.49

The charts use a shared vertical scale and an evenly spaced log2 process axis. Lines and points show the median; bands show the minimum and maximum across three repetitions. The diamond marks the sustained phase at 32 processes per signal. The shaded region marks generator CPU of at least 7 cores.

Traces sweepaccepted items/s
Traces accepted throughput by processes per signalMedian line and minimum-to-maximum band across 3 repetitions at 1, 2, 4, 8, 16, 32 and 64 processes per signal. The horizontal axis is evenly spaced on a log2 scale; the vertical axis runs from zero to 600,000 accepted items per second. At 1 processes: 14,591 items/s, range 14,376 to 14,631. At 2 processes: 29,230 items/s, range 28,622 to 29,265. At 4 processes: 58,232 items/s, range 54,232 to 58,522. At 8 processes: 104,036 items/s, range 103,638 to 110,067. At 16 processes: 182,701 items/s, range 150,682 to 195,737. At 32 processes: 193,558 items/s, range 183,113 to 284,067. At 64 processes: 243,696 items/s, range 225,110 to 267,916.
medianmin–max
Logs sweepaccepted items/s
Logs accepted throughput by processes per signalMedian line and minimum-to-maximum band across 3 repetitions at 1, 2, 4, 8, 16, 32 and 64 processes per signal. The horizontal axis is evenly spaced on a log2 scale; the vertical axis runs from zero to 600,000 accepted items per second. At 1 processes: 13,468 items/s, range 13,138 to 13,471. At 2 processes: 26,532 items/s, range 26,436 to 26,878. At 4 processes: 50,600 items/s, range 49,616 to 52,532. At 8 processes: 100,808 items/s, range 86,979 to 104,131. At 16 processes: 180,022 items/s, range 170,624 to 185,542. At 32 processes: 299,290 items/s, range 247,014 to 319,885. At 64 processes: 342,494 items/s, range 299,902 to 347,721.
medianmin–max
Metrics sweepaccepted items/s
Metrics accepted throughput by processes per signalMedian line and minimum-to-maximum band across 3 repetitions at 1, 2, 4, 8, 16, 32 and 64 processes per signal. The horizontal axis is evenly spaced on a log2 scale; the vertical axis runs from zero to 600,000 accepted items per second. At 1 processes: 13,192 items/s, range 12,430 to 13,395. At 2 processes: 26,846 items/s, range 26,708 to 27,036. At 4 processes: 52,641 items/s, range 32,335 to 53,373. At 8 processes: 99,628 items/s, range 95,654 to 106,147. At 16 processes: 184,239 items/s, range 179,830 to 205,136. At 32 processes: 338,541 items/s, range 263,804 to 341,351. At 64 processes: 540,102 items/s, range 293,700 to 543,941.
medianmin–max
Mixed sweepaccepted items/s
Mixed accepted throughput by processes per signalMedian line and minimum-to-maximum band across 3 repetitions at 1, 2, 4, 8, 16, 32 and 64 processes per signal. The horizontal axis is evenly spaced on a log2 scale; the vertical axis runs from zero to 600,000 accepted items per second. At 1 processes: 41,300 items/s, range 40,269 to 41,362. At 2 processes: 81,075 items/s, range 80,661 to 81,651. At 4 processes: 148,972 items/s, range 130,086 to 154,626. At 8 processes: 244,888 items/s, range 219,064 to 273,901. At 16 processes: 330,232 items/s, range 325,618 to 364,301. At 32 processes: 429,749 items/s, range 429,504 to 471,506. At 64 processes: 422,667 items/s, range 384,338 to 441,460. The diamond marks the single sustained phase: 422,408 items/s at 32 processes per signal over 302.9 seconds. Shading at 32–64 processes marks generator CPU of at least 7 cores.
medianmin–max422,408/s sustained at 32

The published evidence directory contains the raw artifacts, and its README summarises the run. It records all gates passing: successful generator exits, zero dropped rows, no restarts and a verified Parquet store.

The harness was clean at commit 8a2a28aafa828fc7967ba82a481c7cdb5c7e921e. The Fanout release artifact has SHA-256:

d1b602130463b38a03f7575c52c1c2178213839dbf276294abd57ce662c8756b

From the fanout-bench repository, run the Hetzner provisioner with the same release, preset and repetition count:

Terminal window
scripts/hetzner.sh \
--fanout-version v2026.10.7-alpha \
--preset publish \
--repeat 3

Both VMs default to ccx33. The publishing guide documents credentials, provisioning, the private network and artifact collection.