Observability for your entire software system
Traces, logs, metrics and errors from every service in one place, so your team finds and fixes issues before customers notice. Predictable costs, and your data stays on your own infrastructure.
- No per-seat pricing
- Built on OpenTelemetry
- Works with your AI assistant
Self-hosted with Docker
Your whole observability stack is two containers
knotel is one Bun app next to ClickHouse. Ingest, dashboard and MCP run in the app container; spans, logs and web analytics go to ClickHouse. Run it on any machine with Docker, behind the proxy you already use.
Your data stays yours
Spans, logs and sessions are written to ClickHouse on a machine you run. There is no vendor in the middle to trust, sign a DPA with or lose.
Priced by the machine
It costs whatever the server costs. No per-span, per-request or per-seat billing, and one vCPU handles tens of millions of spans a day.
Two containers, not a cluster
docker compose up starts the app and ClickHouse. Accounts, projects and settings live in one SQLite file beside them.
One store for everything
ClickHouse compresses spans tenfold or better and aggregates raw spans fast, so there are no rollups, no sampling and no separate archive.
Filum.ai traces its whole platform with knotel, from one instance it runs itself.
Web apps, the mobile app and backend services all report to the same instance. When a page slows down or a request starts failing, the team opens the trace, or asks their assistant about it.
Footprint
It runs on one vCPU
Not a benchmark on a machine nobody rents. The Filum.ai instance above - 89 services across 39 projects, 30 million spans a day - is a single shared vCPU with 2 GB of memory.
Sampling is a tax you pay for someone else's margin
Vendors bill per span, so they teach you to drop 90% of them - and the one trace you needed at 2 a.m. is the one that got dropped. At 40 bytes a span, a year of every request Filum serves fits on a disk that costs less than a month of most plans. Keep all of it.
Small because it does little
The app parses a batch, filters it and hands it to ClickHouse, which is the part that is good at columns. There is no queue, no agent on every host and no cluster to keep quorum in - two containers, and one of them is the database.
Read off the instance on 28 September 2026, a Monday. One shared vCPU (Xeon Platinum 8558P), 2 GB of memory, 47 GB disk.
Features
Everything you reach for when something breaks
The pages you open at 2 a.m., built to load fast and stay out of the way.
Trace waterfalls
Every span of a request in one view, from page load to the slowest database call, with attributes, events and stack traces.
Service health
Requests, error rate and p50/p95/p99 latency per service, over the last 15 minutes or 30 days.
Errors
Failed spans and exceptions grouped by fingerprint, with trends, stack traces and example traces.
Source maps
Upload your build's maps and a minified production stack reads as your own files and lines, with the source beside them. Resolved when you open the error, so uploading later fixes errors you already have.
Logs
OTLP logs, searchable by service, level and message, and shown under the trace that wrote them.
Sessions
Browser visits and the people behind them, stitched together from session and user ids.
AI agents
Agent runs with their tokens, tool calls and cost, from gen_ai spans.
Alerts
Thresholds on any metric the dashboard computes, sent to Slack or any webhook.
Retention per project
Keep a day, a week or a few months per project. Past that, ClickHouse deletes the data instead of hiding it.
Ask AI and MCP
Ask in plain words, not a query builder
Ask AI is a chat in the app that answers with your own model: OpenAI, Anthropic, Gemini, Azure, OpenRouter or a local Ollama. It reads latency, errors, logs and traces the way you do, draws charts, and waits for your approval before it changes an alert or a setting. The same tools are served over MCP at /mcp, for Claude or any other assistant.
compare_periodsfind_tracesget_tracerun_querytimeserieslist_errorsfind_outlierssearch_logsservice_mapHow it works
From deploy to first trace
It’s two containers, not a cluster, but it’s still infrastructure you own. This is what setting it up involves.
- 1
Start the containers
Save one Compose file, set two secrets and run docker compose up. Then open /setup: the first account you create owns the instance.
docker compose.env/setup - 2Optional
Invite your team
Add teammates from Settings with a one-time link. Each picks a password, and can add a passkey too.
Settings → Memberspasskeys - 3
Instrument your apps
Add the browser script to your sites, wrap your Workers with the SDK, or point any OpenTelemetry exporter at the instance.
/t.jsinstrument()/v1/traces - 4
Explore, or just ask
Open a slow trace, compare latency across services, or ask why checkout got slower today: in Ask AI with your own model key, or from Claude over MCP.
Ask AI/mcp
Opening soon
knotel isn’t public yet. Until it is, the live demo is the real app on a week of sample data: click around as much as you like.
- Source code
- Private
- Sign-ups
- Not open yet
- Live demo
- Open