How data flows
- Sources accept incoming data — TCP for SDKs, HTTP for webhooks, syslog for infrastructure logs
- Routing rules match each batch by source name or type and determine which sinks receive it
- Transforms (optional) modify data in-flight — redact PII, extract log patterns, filter events
- Sinks write data to storage — ClickHouse for analytics, disk for archival, or forward to another Tell instance
Minimal configuration
A working pipeline needs one source, one sink, and a routing rule: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.Transforms
Transforms process data between routing and sinks. They’re configured per routing rule and applied in order.| Transform | What it does |
|---|---|
| Pattern extraction | Cluster logs into patterns using the Drain algorithm |
| Redact | Scrub PII with 11 built-in patterns — email, phone, IP, and more |
| Filter | Drop or keep events by condition |
| Reduce | Consolidate similar events with count metadata |
Sinks
Sinks write data to storage or forward it elsewhere.| Sink | Use case |
|---|---|
| ClickHouse | Production analytics (recommended) |
| Disk | Binary or plaintext file storage |
| Parquet | Columnar archival with compression |
| Arrow IPC | Fast local storage for Polars/DuckDB |
| Forwarder | Edge-to-cloud Tell-to-Tell relay |
| Stdout | Debugging |
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 — checktell status --metrics to spot sinks that are falling behind.