Showcase · Workflow-automatisering

210 workflows — en twee die we bewust hebben afgebroken

Automatiseren is het makkelijke deel. Het lastige deel is beslissen wat je niet automatiseert, en welke workflow meer ruis maakt dan hij oplost. Onze n8n-laag orkestreert het beheer van ons eigen lab: schijfbewaking, pipeline-monitors, security-scans en backup-orkestratie.

210
workflows in productie
2
instanties: uitvoeren + bouwen
1
append-only event store
2
automatiseringen teruggedraaid
Architectuur

Trigger → beoordeling → actie → logboek

Elke workflow volgt dezelfde vorm. Er is een aanleiding, er is een expliciete drempel die bepaalt of er iets moet gebeuren, er is hooguit één actie — en alles landt in het append-only event store.

Trigger cron · webhook · event per taak gekozen Beoordeling exacte match · drempels meestal: niets doen Signaal Telegram · dashboard mens leest mee Actie alleen boven drempel of monitor-only Event store — append-only elke run terugleesbaar · wat de flow zag, wanneer hij liep en wat hij besloot
Twee lessen uit eigen huis

Welke automatisering je níét moet bouwen

Twee dingen die we zelf verkeerd hebben gedaan en daarna hebben teruggebouwd: een monitor die op een onnauwkeurige containernaam matchte, en een workflow die elke 30 minuten een gezonde container herstartte.

Wat we eerst bouwden

  1. Monitor matcht containernaam op een deel van de string
  2. De echte Compose-naam wijkt af van de naam in de config
  3. Alarm: "container offline" — terwijl de container gewoon draait
  4. Losse workflow herstart elke 30 minuten een gezonde container
  5. Ruis wint: je gaat alarmen negeren omdat ze meestal onzin zijn

Wat er nu staat

  1. Matchen op de exacte Compose-naam, geen deelstring
  2. Manifest met de werkelijke containernamen als bron
  3. Alarm betekent weer iets, omdat het niet meer vanzelf afgaat
  4. Herstart op een echte health-failure, niet op een klok
  5. Elke run landt in het event store en is terug te lezen
Techniek in detail

Een workflow is pas af als je hem kunt teruglezen

Uitvoeren en bouwen gescheiden

De productie-instantie draait native onder systemd en voert de 210 workflows uit. Bouwen en uitproberen gebeurt op een aparte Docker-instantie, zodat sleutelen aan een flow de draaiende automatisering niet raakt.

Triggers: cron, webhook, event

Sommige workflows lopen op een klok, andere reageren op een binnenkomende webhook of op een gebeurtenis uit het event store. De trigger bepalen we per taak — niet standaard "elke vijf minuten".

Drempels vóór acties

Disk Alert volume2 controleert elk uur de schijf, waarschuwt via Telegram vanaf 80% en prunet Docker pas boven 90%. De actie zit achter een drempel, de waarschuwing gaat eerst naar een mens.

Monitoren zonder ingrijpen

De Stamboom Pipeline Monitor is bewust monitor-only: hij leest de status uit en rapporteert, maar herstart niets. De Stamboom PG Watchdog bewaakt de database-kant van dezelfde pijplijn.

Elke run terugleesbaar

Workflows schrijven naar een append-only event store. Wat een flow zag, wanneer hij liep en wat hij besloot blijft staan — dat is het verschil tussen "het ging mis" en "hier ging het mis".

Beheer als workflow

Security-scans en backup-orkestratie draaien als gewone flows in dezelfde omgeving. Eén plek waar je kunt zien wat er automatisch gebeurt, in plaats van scripts verspreid over een handvol machines.

Gebouwd met n8nsystemdTelegramWebhooksCronEvent storeREST API
Uit productie

De keten van één workflow, uitgetekend

Een schone weergave van de Disk Alert-workflow zoals die elk uur draait: trigger, meting, splitsing op drempelwaarde, en beide takken die in hetzelfde event store eindigen. Rechts de laatste runs; onderin de automatisering die we juist hebben teruggedraaid.

Workflow-orkestratie: de Disk Alert-workflow met trigger, drempelsplitsing, prune, Telegram-melding en event store
Orkestratie

Wil je weten welke van jouw processen automatisering verdienen?

We beginnen liever met schrappen dan met bouwen: welke taken lopen echt op een klok, welke horen op een gebeurtenis, en welke kun je beter met rust laten. Daarna pas de flows.