Skip to content
All flows

Ship OTel data to Gigapipe

Ships logs, metrics, and traces over plain OTLP to Gigapipe, an open-source backend that stores them in ClickHouse and answers Loki, Prometheus, and Tempo queries.

Use this flow if you run Gigapipe, or if you're on Loki, Mimir, and Tempo and want one store instead of three. Gigapipe keeps logs, metrics, and traces in ClickHouse and answers the Loki, Prometheus, and Tempo APIs, so you point Grafana's built-in datasources at it and your dashboards keep working.

Gigapipe serves the same OTLP paths the otlphttp exporter uses and maps the data into its own storage, so the collector only needs memory_limiter and batch in front of the exporter.

Set GIGAPIPE_ENDPOINT to the base URL (port 3100 by default) and GIGAPIPE_USERNAME and GIGAPIPE_PASSWORD to the server's login. This pipeline runs in our demo environment, shipping the OpenTelemetry demo app into a self-hosted Gigapipe.

How the data moves
receiverprocessorexporterextension
logs
otlpmemory_limiterbatchotlphttp/gigapipe
traces
otlpmemory_limiterbatchotlphttp/gigapipe
metrics
otlpmemory_limiterbatchotlphttp/gigapipe

Use this flow

Open the config in Telflo and it becomes a working pipeline on the canvas: adapt what's specific to you, test it against recorded traffic, and push it to your fleet over OpAMP. Free account, no card.

Components

What's in it, and why

otlp

Single entry point for all three signals from SDKs and downstream collectors, on gRPC :4317 and HTTP :4318.

memory_limiter

Caps collector memory and pushes back on the receivers instead of falling over during a burst.

batch

Groups records into fewer, larger exports than the 200ms default, sized to stay under Gigapipe's 64 MiB request cap.

otlphttp/gigapipe

Writes all three signals to Gigapipe's OTLP routes from one base URL, in protobuf with gzip, behind a disk-backed queue.

basicauth/gigapipe

Adds your Gigapipe username and password to every request the exporter sends, since Gigapipe checks HTTP Basic auth on writes.

file_storage

Keeps the exporter queue on disk, so queued data survives a collector restart and waits out a Gigapipe outage.

Notes

Gotchas

  • 1

    Metrics need to arrive cumulative, which is the OTel SDK default. If a source sends delta (StatsD, Datadog re-exports, or an SDK set to delta), add the delta_to_cumulative processor, because Gigapipe rejects delta points while still returning HTTP 200 and the exporter never retries them.

  • 2

    Gigapipe builds a metric's job and instance labels from service.name and service.instance.id, and a log's level label from severity_text. Data missing those fields still lands, it just can't be selected by that label.

  • 3

    OTLP metrics need Gigapipe 5.3.0 or later. The server's GIGAPIPE_LOGIN and GIGAPIPE_PASSWORD variables only work on 5.5.2 and up; older releases read the QRYN_ names, and if you set the new ones there the server comes up with auth off.

  • 4

    An OTLP metrics request is capped at 64 MiB decompressed. If you hit the 413, lower send_batch_max_size before raising GIGAPIPE_SYSTEM_SETTINGS_OTLP_MAX_MESSAGE_SIZE on the server.

  • 5

    Every log attribute becomes a stream label, with dots turned into underscores, plus trace_id and span_id from the trace context. That's how logs link to traces, but it means logs from different spans land in different streams.

  • 6

    Gigapipe's ruler only evaluates recording rules, so alerts living in the Loki or Mimir ruler need to become Grafana-managed alerts. topk, quantile_over_time, stddev, and stdvar aren't supported in LogQL yet, so check the panels that use them before cutting over.

Test it before your fleet runs it

Free account, no card. Open this flow in the editor, adapt it, and see what it does to real data before anything ships.