← Projecten

PoC: een publieke statuspagina die geen interne details lekt

Een eigen statuspagina voor klanten, gevoed door Prometheus en Alertmanager, die alleen gesaniteerde status publiceert. Met beheer voor incidenten en onderhoud, een auditlog, en een GitOps-pipeline die de image-tag zelf terugschrijft.

Het idee

Klanten willen bij een storing zien wat er aan de hand is, zonder te bellen. Een standaard statuspagina koppelen aan de monitoring is verleidelijk, maar dan lekt er al snel van alles: PromQL, labels, hostnamen, namespaces, IP-adressen of een stacktrace in een foutmelding.

De PoC

Een Django-applicatie met:

  • Een publieke statuspagina en een publieke API die alleen gesaniteerde data tonen: component, status en een tekst die een mens heeft goedgekeurd.
  • Een modulair providersysteem voor monitoringbronnen (Prometheus en Alertmanager), met een sync-worker die de interne status vertaalt naar publieke componenten.
  • Beheer voor statuspagina's, componenten, incidenten, gepland onderhoud en handmatige overrides, met de rollen admin, editor en viewer.
  • Een auditlog van elke wijziging, en statushistorie die minimaal een jaar bewaard blijft, zodat je een beschikbaarheidspercentage kunt onderbouwen.

GitOps van code tot cluster

De repository bevat zowel de applicatie als de productiemanifests:

  1. ontwikkelen op development, met tests in CI;
  2. een merge naar main bouwt de image, getagd met de commit-SHA;
  3. de pipeline schrijft die tag terug in de Kustomization, met [skip ci];
  4. Flux rolt uit.

Elke image wordt gescand met Trivy, en de rapporten staan bij de pipeline.

Status

De PoC werkte lokaal met Docker Compose, maar is niet in productie genomen: de keuze tussen zelf bouwen en een bestaande dienst ligt bij de organisatie. Het principe is wel gebleven: publiceer alleen wat een mens heeft goedgekeurd, en nooit iets uit de interne monitoring rechtstreeks.

De opruiming na de PoC liet nog een les achter: een namespace die beschermd is tegen verwijderen, blokkeert ook de prune van Flux. Zie GitOps in de praktijk.