Not all telemetry compresses equally. The structural characteristics of traces, metrics, and logs produce different compression profiles.
Traces
Traces are the most compressible OTEL signal. A typical span carries fixed-width identifiers (trace_id, span_id), repetitive resource attributes (service.name, host.name, sdk.version), repetitive span attributes (http.method, http.status_code, db.system), and timestamps as nanosecond-precision integers with small deltas.
Uncompressed size: ~500 bytes/span is a common planning estimate (Jaeger + Elasticsearch), though ClickHouse achieves ~80 bytes/span after column-oriented compression.
| Compressor | Ratio | Notes |
|---|---|---|
| gzip -6 | 3:1 — 5:1 | Baseline; OTLP servers must support gzip (clients may use any supported algorithm) |
| zstd -1 | 4:1 — 6:1 | Default level; ~2x faster than gzip |
| zstd -9 | 5:1 — 7:1 | Balanced; negligible decompression penalty |
| OTel Arrow + zstd | 7:1 — 12:1 | Columnar encoding; best-in-class |
| OTel Arrow + zstd (production) | 15:1 — 30:1 | ServiceNow Cloud Observability reported range |
Metrics
Metrics payloads consist of monotonically increasing timestamps (perfect for delta/DoubleDelta encoding), floating-point gauge values with small inter-sample deltas (ideal for Gorilla/XOR encoding), and repeated label sets.
| Compressor | Ratio | Notes |
|---|---|---|
| gzip -6 | 4:1 — 6:1 | Better than traces due to numeric regularity |
| zstd -1 | 5:1 — 8:1 | Numeric patterns compress well under LZ77 |
| snappy | 2:1 — 3:1 | Required by Prometheus Remote Write v1 |
| Prometheus RW 2.0 + zstd | ~1.7x over snappy | ~30% bandwidth reduction vs RW 1.0 |
Logs
Logs are the least predictable signal. Freeform message bodies introduce entropy that resists compression, but structured fields (severity, resource attributes, scope) still compress well.