Prometheus

Open source driftsovervågning og alarmsystem

Prometheus er en open source overvågningsløsning, samt et alarmsystem. Siden løsningens skabelse i 2012 er den blevet taget i brug af mange store firmaer og organisationer - herunder Docker, Soundcloud, Jodel og mange flere. Projektets udvikling er stadig meget aktivt og den offentligt tilgængelige kildekode kan ses på deres GitHub side.


Hvad er en overvågningsløsning?
Overvågning dækker over mange ting. Det kunne være svartider på databaseforespørgsler, aktive forbindelser til en server, CPU og RAM, SSL-certifikaters udløbstid og meget meget mere. Helt generelt: Kan en sensor eller en server skrive et tal til en fil, så kan Prometheus læse og arbejde med det. Tallene kaldes for "metrikker" (metrics) og er - helt lavpraktisk - bare numeriske værdier. Prometheus primære funktioner inkluderer:
  • En mutli-dimensional data model med tidsstemplet data, identificeret af navn og key / value par
  • PromQL (Prometheus Query Language) - et fleksibelt query sprog som kan håndtere disse data
  • Kræver ingen fordelt lagringsplads, al data gemmes på Prometheus serveren
  • Data hentes gennem en simpel HTTP push-model
  • Centralt konfigureret - opret jobs og definér target-servere fra én fil på Prometheus serveren
  • Understøtter visualisering og kan ydermere arbejde sammen med eksterne visualiseringsløsninger
  • Kan opsættes til at alarmere via email og SMS, hvis metrikker falder over eller under definerede niveauer

Sådan fungerer Prometheus
For at Prometheus kan indsamle metrikker kræver det at der er noget data at samle til at starte med. Her kommer eksporterer ind i billedet. Der findes mange forskellige eksportere til mange forskellige systemer / applikationer. Eksporteren har den simple rolle at indsamle data om værtssystemet og pushe det til en HTTP-server i en simpel Prometheus format. Informationen overskrives ved hvert nyt push, og eksporteren kræver derfor næsten ingen lagerplads - man kan tænke på eksporterens output som et øjebliksbillede der bliver opdateret ved et givent interval. Følgende er et eksempel på metrikken "participants" som eksporteres fra en Jitsi Meet server:
[...]
# HELP participants Active participants on server
# TYPE participants gauge
participants 32
[...]
Dette er altså en numerisk værdi der beskriver hvor mange aktive deltagere der er i møder på videomøde løsningen Jitsi. For hver metrik forventer Prometheus følgende tre informationer:
  1. En menneskelæselig forklaring af metrikken, præfikset med '# HELP'
  2. Datatypen, præfikset med '# TYPE'
  3. Metrikkens navn og aktuelle værdi
Hver gang Prometheus læser, eller scraper, en server - også kaldet et target, vil den kopiere disse info fra eksporteren og tidstemple data med målingstidspunktet. Tidstemplet giver mulighed for at opsætte grafer af det læste data, med tiden som enhed på førsteaksen. Prometheus understøtter visualisering med dens "Graph" værktøj, men det anbefales at benytte en dedikeret løsning til datavisualisering såsom Grafana.

En simpel og effektiv web-applikation
Prometheus løsningen kommer med en web-applikation som kan tilgås med alle browsere. Herinde kan en oversigt ses over alle target-servere, hvornår de sidst er blevet scrapet, hvor længe det tog at læse info fra dem, og om der var eventuelle fejl under læsningen. Det er også muligt at inspicere data mere detaljeret for hver server. I web-appen er det også muligt at se Prometheus's nuværende konfiguration, versionsinformation samt eventuelle brugerdefinerede regler for alarmer, eksempelvis hvis en server når en temperatur højere en 60 grader, eller hvis svartider bliver længere end 10 sekunder. Med Alertmanager kan der tilmed ydermere over email eller SMS.