Bilis - Self-hosted log storage and search, on one box.

by
Self-hosted log storage and search. OTLP in, ClickHouse underneath, a fast viewer on top.

Add a comment

Replies

Best
Hey Product Hunt 👋 I built Bilis because every time I wanted searchable logs for a side project, the answer was either a SaaS bill that scales with how noisy my app is, or standing up a Grafana + Loki + Promtail stack and then maintaining it forever. Neither felt proportionate to "I want to find one line among a few million." So Bilis is deliberately small. It's one Laravel app and one ClickHouse table. That's the whole architecture. You run it on a box you already pay for, and the storage bill is whatever that box costs. A few things I care about under the hood: It speaks standard OTLP/HTTP, so you point an OpenTelemetry Collector — or any exporter you already have — at it and you're done. There's a simple JSON endpoint too, for when you just want to curl something. Protobuf is decoded in pure PHP. No ext-protobuf, no composer package for it. That was more work than it sounds, but it means you don't have to compile a PHP extension on your server to install Bilis. Full-text search is a ClickHouse tokenbf_v1 index over the log body, so a search across millions of rows skips the granules that can't match instead of scanning everything. Live tail for when you're actually debugging, and time-window + project + service + severity filters for when you're hunting. Ingest never returns 400. A malformed record gets skipped and counted; your app is never punished for a log line. If ClickHouse is down you get a 503 and a Retry-After, so exporters back off correctly. It's source-available under FSL-1.1, which converts to Apache-2.0 after two years. Read the code, run it, fork it. The only thing you can't do is sell Bilis as Bilis. Self-hosted, no trackers, no telemetry phoning home. If you're in the EU and would rather your logs not leave the continent, that's a straightforward answer. v1 is intentionally logs only. No traces, no metrics, no alerting. If those matter to you I'd genuinely rather you use something else than have me do them badly. Happy to answer anything about the ClickHouse schema, the OTLP mapping, or why it's a fish. 🐟