Olrik's place

Javascript is disabled. This is fine. It was just here to show a random "funny" tag line in a fancy yellow "sticker". But now, you get a longer personal message. Almost in admiration of refusing modern techniques. I actually wasn't going to add Javascript at first, since I wanted to make this as simple and accessible as possible. Older browsers probably don't do too well with JS. But then again, the front-end of this website DOES have the latest techniques, so an older browser won't work anyway.

Homelab

What a journey this was. Started out (like so many) with a Ubiquity EdgeRouter (which I still have somewhere). Later refurbished a Core 2 Duo machine with Solaris (back when you could still get patches for free) as a NAS with ZFS. Thing also ran a Minecraft server (which I still do today). Even later added a discarded laptop as HomeAssistant machine. Everything cobbled together with recuperated cables in a flat VLAN. And for a while, it was good.

But today, it's all a bit more organized. Everything is on proxmox now (with most in LXCs). Storage on a separate NAS (still with ZFS) with two external back-ups. I try to apply the old UNIX adagio: do one thing and do it well, so there are a lot of moving parts. But the upside is that it just works very well. Replacing a single part is also absolutely trivial. There's still a lot of re-used and repaired parts in there. No point in overspending.

Homelab monitor

With a seemingly ever-evolving homelab, comes the need for a decent monitoring system. I tried loads, but they either were too simple (like SmokePing), too bloated and rigid (like CheckMk) or insecure (like Uptime Kuma, has super old, fixed dependencies). So I made my own, as you do. The goal was simple: keep it simple.

No time-series stuff
I don't care if the CPU usage of an LXC was 5% or 10% or 27% last month. I don't care about rigid SLA's. I only care about now: does something need my immediate attention, or not.

Expandable
It should allow for different collectors, and be easily expandable. I started with https, ping and dns. Right now, there's NTP, SNMP, truenas and proxmox added, without any changes to the back-end. Alerts go out via Ntfy, but other could just hook onto the state transition interface. Neat! Almost every little thing is configurable as well.

Don't derive health
Don't assume and absolutely don't rebuild a failure model that the application already has, and can judge way better than me. Ingest values, measure against thresholds, transition states, alert.

Operationally simple
No authentication, no giant code base, no dependencies. Limited states (ok, warning, failed, unknown). Keep the state transitions for a limited amount of days in a database. The result is a simple, 14MB GO binary with some config in yaml and a tiny SQLite file. And a wink to Windows Phone's metro interface, because I'm still salty about that.

a screenshot