Op een gegeven moment groeit elk zijproject op. Het is niet meer dat scriptje dat je lokaal draait, maar iets waar je daadwerkelijk op vertrouwt. En als dat eenmaal zo is, wil je weten wanneer het kapotgaat.
Het voor de hand liggende antwoord is Sentry. Of Datadog. Of een van de tientallen andere error tracking services die je errors graag bewaren, tot je de gratis limiet bereikt. Op dat moment krijg je een prijspagina voorgeschoteld die de maandelijkse kosten redelijk laat lijken door ze uit te smeren over een per-seat, per-event, per-project matrix.
Voor een klein project is dat niet redelijk. Dus heb ik BugBarn gebouwd.
Wat het is
BugBarn is een self-hosted error tracking server. Je draait het op je eigen machine. Je errors gaan daarheen. Niemand anders ziet ze, niemand rekent je per event af, en je hebt geen Kubernetes-cluster nodig. Het draait prima op een VPS van vijf euro of een Raspberry Pi op een plank.
De basiswerking is simpel. Je applicatie stuurt errors naar BugBarn via een kleine SDK. BugBarn groepeert ze in issues op basis van fingerprinting, slaat ze op in SQLite, en toont ze in een web UI. Je kunt issues oplossen, luidruchtige issues dempen, en alerts instellen voor dingen die er echt toe doen.
De onderdelen die het waard zijn om te weten
De web UI is een single-page app die naast de server draait. Geen apart frontend deploy, geen CDN nodig. Je opent de URL en daar is het. Er zit een log stream in die real-time bijwerkt, een issue-lijst die je kunt filteren en doorzoeken, en een alert editor om drempelwaarden in te stellen op error counts.
Er zijn SDK's voor Go, TypeScript en Python. Ze volgen allemaal hetzelfde patroon: een keer initialiseren met je API key en endpoint, en daarna errors capturen zodra ze zich voordoen. De Go SDK heeft een recovery middleware voor HTTP handlers. De TypeScript SDK draait zowel in Node als in de browser. Elke SDK is klein genoeg om in een keer door te lezen.
De wekelijkse digest mailt een samenvatting van wat er de afgelopen zeven dagen is gebeurd over al je projecten. Nieuwe issues, regressies, oplossingspercentage. Het soort informatie dat handig is om bij de koffie te lezen zonder een dashboard te hoeven openen.
Projecten zijn eersteklas. Als je meerdere apps op dezelfde server draait, krijgt elke app een eigen project met aparte API keys. Je kunt issues per project bekijken of over alles tegelijk, met een kleine project-tag op elke rij zodat je weet waar iets vandaan komt.
Hoe de opslag werkt
BugBarn schrijft naar SQLite. Dit is een bewuste keuze. SQLite is betrouwbaar, snel voor read-heavy workloads, en vereist niets meer dan een bestand op schijf. Voor het volume aan errors dat de meeste kleine projecten produceren, is het meer dan voldoende.
Voordat events SQLite bereiken, passeren ze een spool op schijf. Het ingest endpoint schrijft naar de spool en returnt meteen. Een achtergrondwerker leest van de spool, verwerkt de events en slaat ze op. Dit betekent dat ingest snel blijft, ook als de database belast is, en er niets verloren gaat als het proces halverwege een batch herstart.
Installatie
Op Linux is APT de schoonste optie. Voeg de WebWiebe repository toe en installeer het pakket. Het wordt geleverd met een systemd unit die configuratie leest uit /etc/bugbarn/bugbarn.conf, een eigen systeemgebruiker aanmaakt, en bij het opstarten start. Een voorbeeldconfiguratiebestand komt terecht op /etc/bugbarn/bugbarn.conf.example met elke optie gedocumenteerd.
curl -fsSL https://webwiebe.nl/apt/install.sh | sudo bash
sudo apt install bugbarnOp macOS gebruik je de Homebrew tap. De binary werkt op zowel Intel als Apple Silicon.
brew tap webwiebe/bugbarn
brew install bugbarnDocker en een directe binary download zijn ook beschikbaar op de GitHub releases page.
Configuratie
Alles wordt geconfigureerd via environment variables met een BUGBARN_prefix. Het configuratiebestandformaat is gewoon KEY=VALUE, dezelfde syntax die systemd's EnvironmentFile directive verwacht, dus die twee werken samen zonder adapter.
De belangrijkste variabelen zijn de admin credentials, het session secret, en de paden voor de database en spool directory. De rest heeft verstandige defaults: poort 8080, geen CORS-restricties, 12 uur session TTL.
Self-hosting als beperking
Er zit een bepaalde discipline in self-hosting. De tool moet klein genoeg zijn om te draaien op hardware die je al hebt. Het moet snel opstarten, weinig geheugen gebruiken, en niet constant aandacht nodig hebben. BugBarn probeert zich aan die beperkingen te houden.
Het moet ook iets zijn dat je daadwerkelijk vertrouwt met productiedata. Daarom is de code open source en is de opslag lokaal. Je kunt elke regel lezen, en je errors verlaten nooit je eigen infrastructuur.
De broncode staat op GitHub. Installatiedetails voor zowel Linux als macOS staan op de APT en Homebrew pagina's.