Skip to main content
Tell’s pipeline moves data from your apps to storage in real time. SDKs and services send events, logs, and sessions to sources. The router matches data to one or more sinks based on rules you define, optionally applying transforms along the way.

How data flows

  1. Sources accept incoming data — TCP binary for native SDKs (the Tell protocol, fastest path), HTTP with JSONL or binary support for web apps, syslog for infrastructure logs
  2. Routing rules match each batch by source name or type and determine which sinks receive it
  3. Transforms (optional) modify data in-flight — redact PII, extract log patterns, filter events
  4. Sinks write data to storage — ClickHouse for analytics, disk for archival, or forward to another Tell instance
A batch can go to multiple sinks simultaneously (fan-out). Tell delivers to each sink without copying the data, so fan-out to 5 sinks costs roughly the same as writing to 1.

Minimal configuration

A working pipeline needs one source, one sink, and a routing rule:
See Pipeline Configuration for the full config reference.

Sources

Sources listen for incoming data. You can run multiple sources at the same time.

Routing

Routing rules decide which sinks receive which data. Rules match by source name or source type. The first matching rule wins. Unmatched data goes to the default sinks.
See Routing for matching logic and examples.

Transforms

Transforms process data between routing and sinks. They’re configured per routing rule and applied in order. See Transforms for configuration details.

Sinks

Sinks write data to storage or forward it elsewhere.

Backpressure

If a sink can’t keep up, Tell drops batches for that sink rather than blocking the entire pipeline. Other sinks continue receiving data normally. Backpressure events are tracked in pipeline metrics and logged — check tell status --metrics to spot sinks that are falling behind.

Graceful shutdown

When Tell shuts down, it finishes processing batches already in the pipeline before stopping. Sources stop accepting new connections, in-flight batches drain to sinks, and final metrics are logged.