Inleiding tot monitoring met distributed tracing, performance metrics en logging
Tags: programming, monitoring
Published: 2023-03-20 21:12:41

Het monitoren van applicaties is een essentieel onderdeel van het bouwen en onderhouden van ingewikkelde software systemen. Monitoring stelt ontwikkelaars en operationele teams in staat om de prestaties van hun applicaties te meten, problemen op te sporen en te analyseren en de algehele gebruikerservaring te verbeteren.

Er zijn verschillende technologieën beschikbaar om applicaties te monitoren, waaronder Distributed Tracing, Metrics en Logging. In dit artikel bespreken we hoe deze technologieën werken en hoe ze kunnen worden toegepast om applicaties te monitoren.

## Distributed Tracing: Opentelemetry & Jaeger

Distributed Tracing is een technologie die wordt gebruikt om te traceren hoe een transactie door een gedistribueerd systeem beweegt. Het kan worden gebruikt om de prestaties van de software te verbeteren en te debuggen door de oorzaak van prestatieproblemen op te sporen en op te lossen.

De standaard voor Distributed Tracing is OpenTelemetry. OpenTelemetry gebruikt een uniforme manier om de interactie tussen de verschillende componenten van een gedistribueerd systeem vast te leggen, ongeacht de programmeertaal of de specifieke technologie die wordt gebruikt. Dit maakt het mogelijk om end-to-end transacties te traceren en gegevens te verzamelen over de prestaties van het systeem als geheel.

Een veelgebruikte tool voor Distributed Tracing is Jaeger. Jaeger is een open source Distributed Tracing systeem dat is gebouwd om grote microservice architecturen te ondersteunen. Het biedt een intuïtieve gebruikersinterface om trace-gegevens te visualiseren en te analyseren, en het kan eenvoudig worden geïntegreerd met andere tools zoals Grafana. Bovendien heeft het een ook een docker container die gemakkelijk is te deployen. Het tracing dashboard voor NeobyteCMS ziet er als volgt uit:
![Tracing dashboard](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/emd29233q8uv0l78jo1g.png)
Hier kan er gefilterd worden op verschillende criteria voor de verschillende traces te vinden en te analyseren. Een kan bijvoorbeeld gefilterd worden op traces met de tag 'error=true'. Zo kan men snel alle problematische traces vinden.

## Metrics: Prometheus & Grafana

Metrics zijn metingen van belangrijke prestatie-indicatoren (KPI's) van applicaties. Het meten van deze KPI's kan ontwikkelaars helpen om de prestaties van hun applicaties te analyseren en te verbeteren.

Een populaire tool voor Metrics op te nemen is Prometheus. Prometheus is een open source systeem voor het verzamelen, opslaan en queryen van metrics. Het kan worden gebruikt om gegevens te verzamelen over CPU-gebruik, geheugengebruik, netwerkverkeer en andere belangrijke prestatie-indicatoren van applicaties.

Grafana is een tool voor het visualiseren en analyseren van metrics. Het kan worden geïntegreerd met Prometheus om grafieken en dashboards te maken van de metrics die worden verzameld. Dit kan helpen om prestatieproblemen op te sporen en te analyseren, en om de gebruikerservaring te verbeteren. Het performance dashboard voor de NeobyteCMS ziet er zo uit:
![Grafana Dashboard](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/35bsn80oa9z7az094ztq.png)
Hier zijn een paar interessante statistieken te zien, zoals de API response time en succes rate, uptime, en cpu en geheugen gebruik op de server.

### Prometheus
Prometheus is een open source monitoringtool die is ontworpen voor het verzamelen en analyseren van metingen van verschillende systemen. Het is speciaal ontworpen voor gebruik in gedistribueerde systemen, waar het kan worden gebruikt om de prestaties van individuele componenten te meten en om problemen op te sporen. Hieronder een mogelijk configuratie van de scrapers die de metrics van verschillende services verzamelen: 
![Prometheus scrapers](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rthaj66cfndneunw36st.png)

Prometheus werkt door middel van het verzamelen van metingen van verschillende systemen en deze op te slaan in een database. Het maakt gebruik van een speciale querytaal, genaamd PromQL, om de gegevens in deze database te analyseren en om prestatieproblemen op te sporen.

Een van de belangrijkste voordelen van Prometheus is de flexibiliteit ervan. Het is gemakkelijk te integreren met verschillende systemen en het kan op verschillende manieren worden geconfigureerd. Hierdoor kan het worden aangepast aan de specifieke behoeften van een gedistribueerd systeem.

### Grafana
Net zoals prometheus is, is Grafana een open source platform voor het visualiseren en analyseren van metrics en meer. Het maakt gebruik van verschillende databronnen, waaronder Prometheus, om gegevens te verzamelen en weer te geven op een intuïtieve en interactieve manier.

Grafana biedt een brede reeks van visualisatiemogelijkheden, zoals grafieken, diagrammen, histogrammen, taartdiagrammen, en meer, waarmee gebruikers de prestaties van hun gedistribueerde systeem kunnen monitoren en analyseren. Het kan ook worden gebruikt om waarschuwingen te configureren op basis van bepaalde vooraf ingestelde drempelwaarden.

### Waarom Prometheus en Grafana?
Prometheus en Grafana worden vaak samen gebruikt als monitoringtools in gedistribueerde systemen, omdat ze goed op elkaar zijn afgestemd en elkaar aanvullen. Prometheus verzamelt en slaat metingen op in een tijdsreeksdatabase en Grafana biedt de mogelijkheid om deze gegevens op een intuïtieve manier weer te geven en te analyseren.

Een ander voordeel van Prometheus en Grafana is dat ze beide open source zijn, waardoor ze gemakkelijk te integreren zijn met andere tools en systemen. Dit maakt het gemakkelijk om aan te passen aan de specifieke behoeften van een gedistribueerd systeem.

## Logging met Promtail & Grafana Loki

Naast distributed tracing en metrics, is logging ook een belangrijk aspect van het monitoren van applicaties. Logging kan helpen bij het opsporen van fouten en het begrijpen van de oorzaak van fouten en prestatieproblemen. Bovendien kan het helpen bij het verzamelen van statistieken voor analyses. Hier gaan we even verder in op logging en de technologieën die we hebben gebruikt in ons onderzoek: Promtail en Grafana Loki.

### Promtail

Promtail is een open-source log scraper dat is ontwikkeld door Grafana Labs. Het wordt gebruikt om logs van meerdere bronnen te verzamelen en te verzenden naar een centrale opslagplaats. Promtail heeft meerdere voordelen ten opzichte van traditionele loggers, zoals het verzamelen van logs in real-time en het verminderen van de hoeveelheid opslagruimte die nodig is.

Promtail werkt door logbestanden te scannen en nieuwe gebeurtenissen te verzenden naar de centrale opslagplaats. Hierdoor worden logs in real-time verzameld en zijn ze direct beschikbaar voor analyse en onderzoek. Bovendien kan Promtail automatisch logbestanden opruimen die niet langer nodig zijn, wat de hoeveelheid vereiste opslagruimte vermindert.

### Grafana Loki

Grafana Loki is log-aggregatie systeem dat is ook ontwikkeld door Grafana Labs. Het werkt samen met Promtail om logs op te slaan en te indexeren. Grafana Loki heeft meerdere voordelen ten opzichte van traditionele log-aggregatiesystemen, zoals het ondersteunen van real-time zoekopdrachten.

Grafana Loki werkt door logs op te slaan in een geoptimaliseerde database en deze te indexeren voor real-time zoekopdrachten. Hierdoor kunnen ontwikkelaars snel logs doorzoeken en eventuele problemen opsporen. Bovendien kan Grafana Loki logs comprimeren en duplicaten verwijderen, waardoor de hoeveelheid opslagruimte die nodig is wordt verminderd.

Om ervoor te zorgen dat de logs beter doorzoekbaar zijn, wordt er in de logs ook een correlation-ID toegevoegd. Deze zorgt ervoor dat men de logs per request kan filteren.

### Integratie met Grafana

Grafana biedt net zoals voor de metrics, een eenvoudige en intuïtieve interface voor het monitoren van logs met Grafana Loki als data source. Met Grafana kunnen ontwikkelaars loggegevens visualiseren en doorzoeken met behulp van dashboards. Hierdoor kunnen ze snel problemen opsporen en onderzoeken.

![Logging dashboard](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rljz43usn85pdto5gzc3.png)

## Conclusie

Het monitoren van applicaties is van cruciaal belang voor het bouwen en onderhouden van complexe softwaresystemen. Distributed tracing, monitoring en logging zijn allemaal tools die het mogelijk maken om een probleem sneller te detecteren en op te lossen. Elks hebben ze hun sterktes en use-cases. Door deze in combinatie met elkaar te gebruiken kan er in de toekomst steeds een goed beeld gevormd worden als er iets foutloopt.