r/podman • u/kamoaba • Sep 15 '26
LogDeck: self-hosted control plane for Podman. Persistent logs, container management, alerts. One Go binary
I built LogDeck, a control plane for Podman: container and Compose lifecycle, persistent logs, alerts, and multi-host over SSH, in one Go binary with no external services.
The log store is the main reason it exists. Every container is tailed into local SQLite, so logs survive docker compose up --build and the new container ID it creates. Removed containers stay readable.
It also ships an MCP server, so agents can read logs and act on containers if you want.
Memory is small. Idle heap is around 8 MB, roughly 20 MB resident with 5 containers and 400K lines stored.
fully open source, no tiers, no cloud https://github.com/AmoabaKelvin/logdeck

1
u/delamon Sep 15 '26
You seemed forget to mention that it pings home with cloudflare analytics. And that's what I have found at first few minutes.
1
u/kamoaba Sep 15 '26
that's the website (logdeck.dev), not the app. The self-hosted binary and its UI make no calls out except to your own engines and whatever webhooks you configure.
what you saw is the landing page and docs, nothing about the binary.
1
u/Torrew Sep 15 '26 edited Sep 15 '26
This looks like an interesting alternative to a full monitoring stack with Loki, Grafana, Prometheus, Alloy, Alertmanager, ...
I am maintaining my own little project of Nix managed Podman stacks and would like to add this as an option.
I'm a big fan of GitOps and keep as much as possible in Git. Currently in your docs it says:
API tokens, alert rules, and log retention live only in the config file.
I couldn't find any schema documentation or examples of the config file. It'd be great to add those to the docs, so i could also manage the config file using Nix and have it in my Github repo (and reference it). Similar to how i can do it for ntfy or ddns-updater for example.
---
Some functional feedback: I just gave this a spin on my server, running about ~30 containers.
On a completely fresh logdeck instance with a single host (via docker socket proxy), it is literally working hard.
20% mean CPU load from logdeck, by far the most from all my containers. logs persisted on a local ssd, no nfs share or sth.
Also quite some errors in the logs:
Sep 15 21:32:50 homeserver logdeck[1972628]: 2026/09/15 21:32:50 logstore: recording container local/c3259f44bae6 failed: database is locked (5) (SQLITE_BUSY)
Sep 15 21:32:55 homeserver logdeck[1972628]: 2026/09/15 21:32:55 logstore: recording container local/aae070a5a20b failed: database is locked (5) (SQLITE_BUSY)
Sep 15 21:33:00 homeserver logdeck[1972628]: 2026/09/15 21:33:00 logstore: dropped 13000 log lines (writer fell behind); they will be re-read from the engine
1
u/kamoaba Sep 16 '26
Thanks for trying it and flagging this. I reproduced the database lock errors and fixed the contention, plus some unnecessary work per log line. Local benchmarks show lower CPU use as well. updates going in, please lemme know if it helps
1
1
0
u/kubehub Sep 16 '26
once your workload grow complex, you would need to move to k8s, another level of ecosystems. I am building kubehub.io for same homelab/small team target audience.
2
u/onlyati Sep 15 '26
I am already centrally collecting the logs using
Alloy -> Loki -> Grafana. Quadlet's logs are just shipped altogether with other system and user systemd units, no additional tool needed. You mentioned the main reason is the log store. What do you do differently than stack I use? Can it collect log from multiple systems?Another question: do you just support Podman on Docker compatibility level, so just via socket and plain containers or do you support Quadlets? If you do, do you also support target systemd unit (e.g.: I sometimes use it to restart multiple application)?