Om te zorgen dat alles vlekkeloos blijft lopen, is goede monitoring nodig voor ons zeer noodzakelijk en onze partner Hypernode is daar heel compleet op ingericht. Met de toevoeging van Prometheus faciliteert het ons om hoge kwaliteit monitoring te realiseren
Prometheus is een tool voor monitoring en werd oorspronkelijk gemaakt door en voor SoundCloud. Dit gebeurde al in 2012 en zodoende bestaat deze tool dus al best een tijdje, maar sinds het onderdeel werd van Cloud Native Computing Foundation (CNCF) is het nog weer flink verder ontwikkeld. Prometheus is dus open source, kent een actieve community en ook Hypernode biedt actief ondersteuning voor deze tool op haar platform. Iets waar we graag gebruik van maken.
Mijn naam is Jonathan en ik ben bij Mooore Digital werkzaam als DevOps en Full stack webdeveloper. In die rol houd ik me in de dagelijkse praktijk sterk bezig met DevOps en Site Reliability. Aangezien stabiliteit, en dus ook monitoring, een belangrijk onderdeel is van onze dienstverlening, is de beschikbaarheid van Prometheus op Hypernode een hele mooie ontwikkeling. Een ontwikkeling waar ik graag wat meer over vertel.
In deze post maak ik het ook graag praktisch en probeer ik helder te maken hoe je aan de slag kunt met Prometheus voor betere monitoring.
Over Prometheus in het algemeen
Om te begrijpen wat de waarde van Prometheus is, is het goed om wel wat meer in het algemeen over deze tool te vertellen. Ken je de tool al en ben je vooral geïnteresseerd in implementatie? Scroll dan gerust direct door.
Wat is Prometheus?
Prometheus is een open source technologie die is ontworpen om monitoring- en waarschuwingsfunctionaliteit te bieden. Het kan gegevens verzamelen en opslaan als tijdreeksgegevens, waarbij informatie wordt vastgelegd met een tijdstempel. Het kan ook labels verzamelen en registreren, wat optionele sleutel-waardeparen zijn.
Om heel simpel te zeggen; Prometheus werkt eigenlijk door elke minuut een TXT-bestandje aan te maken met keys en values. De centrale server haalt aan het eind van de minuut deze bestandjes op en zet deze in de database. Op die manier kunnen we dan ook op de minuut inzoomen en exact zien wat er met een systeem gebeurt.
Belangrijke kenmerken van Prometheus zijn:
Multidimensionaal gegevensmodel – Gebruikmakend van tijdreeksgegevens die worden geïdentificeerd aan de hand van metrische namen en sleutel-waardeparen.
PromQL – Een flexibele querytaal die gebruikmaakt van het multidimensionale gegevensmodel.
Geen afhankelijkheid van gedistribueerde opslag – Alle individuele servernodes blijven autonoom.
Pull-model – Prometheus kan tijdreeksgegevens actief "ophalen" via HTTP.
Pushen van tijdreeksdata – Beschikbaar via het gebruik van een tussenliggende gateway.
Ontdekking van bewakingsdoelen – Beschikbaar via statische configuratie of service discovery.
Visualisatie – Prometheus biedt meerdere soorten grafieken en dashboards.
Wat wilden we met Prometheus bereiken?
Actieve monitoring en snel reageren op eventuele problemen met een applicatie of server is een belangrijk streven van ons. Met tools zoals New Relic monitoren we goed op applicatie-niveau en worden ons allerlei tools geboden om bottlenecks goed op te lossen. Dit stelt ons in staat om de gezondheid van de systemen beter in de gaten te houden en proactief te handelen om potentiële problemen te voorkomen.
Wat we verder ook écht belangrijk vinden, is dat we weet hebben van een probleem vóórdat het een probleem is. Met Prometheus in combinatie met Hypernode maken we een mooie stap op dat gebied. Het stel je als agency in staat om klanten te voorzien van een beter presterende en stabielere omgeving door geavanceerde monitoring nog laagdrempeliger te maken.
Wat levert het op?
Het implementeren van Prometheus’ data exporter op een Hypernode-server biedt verschillende voordelen voor ons als bureau. Het stelt ons in staat om actieve monitoring uit te voeren en snel te reageren op eventuele problemen met de applicatie of server. Hierdoor kunnen we de gezondheid van de systemen beter in de gaten houden en proactief handelen om potentiële problemen te voorkomen.
Uiteraard stelt dat ons beter in staat om onze klanten te voorzien van een beter presterende en stabiele omgeving. Door de gelegenheid om met Prometheus op Hypernode geavanceerde monitoring nog laagdrempeliger te maken is het voor alle collega's toegankelijker om te werken met geavanceerde monitoring tools en het optimaliseren van serverprestaties.
Een kijkje in de keuken
In onze eigen praktijk zijn er aantal zaken waar we op monitoren en notificaties op instellen. Uiteraard is er nog veel meer mogelijk en ook wij breiden wel steeds uit.
Server-metrics
Applicatie-metrics
Notificaties op metrics
Op de gemonitorde metrics kunnen we vervolgens tresholds en notificaties instellen om zekerheid te hebben over stabiliteit en bijzonderheden, uiteraard ons belangrijkste doel van gerichte monitoring.
Op deze manier hebben we goed in kaart wanneer er ongewenste ontwikkelingen plaatsvinden zoals vertragende webshops, processen, bijzondere orderverlopen, etc., etc.
Hypernode metrics
Hypernode zelf biedt natuurlijk ook wel monitoring over de staat van de server, maar Prometheus is toch wel wat beter in te zetten voor echt actieve monitoring en alerting. Dat we Prometheus kunnen gebruiken op Hypernode is dan ook een mooie ontwikkeling die ons helpt om de monitoring en alerting op een hoger niveau te krijgen.
Prometheus op jouw Hypernode
De vraag is natuurlijk hoe je een werkende Prometheus node-export op een Hypernode kunt krijgen. Dat probeer ik in de volgende stappen helder uit te leggen. Heb je er vragen over: neem dan gerust contact met ons op.
Prometheus en Hypernode
Op dit moment draaien alle Hypernodes een Prometheus node-export (te vinden op /var/lib/prometheus) met een configuratie die is opgezet via een privé openbaar sleutelpaar dat wordt gedeeld over alle Hypernodes en alleen wordt bewaard door het Hypernode team.
Echter, je kunt een tweede - minder veilige - variant van de node-exporter zelf draaien. Voel je vrij om bij te dragen of hieronder opmerkingen te plaatsen voor feedback en/of vragen!
Voordat je de beschreven stappen volgt, is het belangrijk om actief aandacht voor de beveiligingsrisico's te hebben. We gaan beschrijven hoe je de Prometheus node-export kunt proxyen via nginx als een subdomein van de Hypernode URL, die alleen wordt beschermd door een HTTP Authenticatie en aanzienlijk minder veilig is dan een toegewijde privésleutel. De toegewijde 'hypernode' node-export draait onder zijn eigen gebruiker, omdat we hier geen toegang toe hebben, zal onze export draaien onder de app gebruiker.
Het proces zou nu moeten draaien op http://localhost:29100, verifieer alsjeblieft door het volgende uit te voeren:
curl http://localhost:29100/metrics
Stel een reverse proxy in via een nginx Vhost
Standaard staat de server-firewall geen verzoeken toe naar poort 29100. We kunnen nginx gebruiken om te proxyen, versleutelen (HTTPS) en het wachtwoord beveiligen van de node-export applicatie.
Bij het instellen van de export node in je Prometheus-client, vergeet niet om de basic_auth eigenschap in te stellen, meer informatie is te vinden hier.
Bonus: je eigen metrics toevoegen aan Prometheus
De node-exporter van Hypernode voegt al wat metrics toe: Web status codes, nginx errors, en verschillende redis-informatie, maar als je hierop wilt uitbreiden, stel ik voor om een nieuwe map te maken voor metrics die je wilt gebruiken voor de client-exporter. Op deze manier zal het de Hypernode node-export niet potentieel breken.
Maak een nieuwe map voor lokale Prometheus node-export metrics
mkdir -p /data/web/.prometheus/node-export
Maak symlinks voor de metrics van Hypernode (die elke minuut worden bijgewerkt)
Zorg ervoor dat je het pad in het Supervisor-proces wijzigt naar /data/web/.prometheus/node-exporter in /data/web/supervisor/client-prometheus.conf
nano /data/web/supervisor/client-prometheus.conf # Vervang --collector.textfile.directory=/var/lib/prometheus/node-exporter door --collector.textfile.directory=/data/web/.prometheus/node-exporter
Herstart Supervisor
supervisorctl reload
Nu kun je nieuwe metrics maken in ~/.prometheus/node-exporter. Alle nieuwe bestanden met de extensie .prom worden automatisch opgenomen.
Ondersteuning bij implementatie Prometheus
We hopen dat je ook vanuit praktisch oogpunt wat aan deze post hebt en je de monitoring naar een hoger niveau kunt tillen. Als je vanuit je development team (als e-commerce ondernemer of agency) hulp nodig hebt bij de implementatie van Prometheus, dan mag je zeker contact met ons opnemen. We nemen het graag voor je uit handen of helpen je team verder met bijvoorbeeld een hands-on workshop. Neem contact met ons op om Prometheus in combinatie met Hypernode te gebruiken.