Build an append-only pipeline: agents → Kafka → tiered storage (hot in ClickHouse/ELK, cold in object storage) with a retention policy that indexes recent data and cheaply archives the rest. 100M events/day is ~1,200/sec average (spikes far higher) and tens-to-hundreds of GB daily — you optimize for cheap writes and bounded query cost, not OLTP semantics.
App/agents ─▶ Kafka ─▶ Consumers ─┬─▶ ClickHouse / ELK (hot: last 7–30d, indexed, fast search)
(Fluent Bit) (buffer, │
replay) └─▶ S3/Parquet (cold: 90d–years, cheap, scan-on-demand)
│
Lifecycle/tiering ─▶ Glacier (archive) ─▶ delete at retention
