Observability in Laravel, meer inzicht in je applicatie

Direct naar:

Er komt een punt waarop je website of webapplicatie begint te groeien en het steeds drukker wordt. Daardoor wordt het steeds belangrijker dat deze snel en beschikbaar blijft. Je wil natuurlijk niet de hele dag je website F5’en, maar wel met een gerust gevoel naar bed gaan, in de wetenschap dat je een bericht krijgt in het geval er toch iets mis gaat.

Observability is daarvoor de oplossing en het is meer dan alleen een alert krijgen wanneer er iets fout gaat. Het geeft je diepgaand inzicht in je applicatie: de huidige staat en hoe bepaalde problemen zijn ontstaan of welke punten je kan optimaliseren. Daardoor kun je incidenten vroegtijdig voorkomen of verhelpen en de oplostijd (lagere MTTR) terugdringen wanneer er toch iets misgaat.

Het grote probleem bij het implementeren van Observability is dat je data vaak decentraal wordt opgeslagen en verwerkt. Hierdoor mis je de kracht van het correleren van gebeurtenissen. Daarnaast is Observability ook niet iets wat je in één keer configureert. Dit moet leven binnen de ontwikkelaars en door de beheerders van het onderliggende platform, door continue verbeteringen door te voeren en extra inzichten toe te voegen.

Kernconcepten: logs, metrics, traces

Als je inzicht wilt krijgen in je applicatie, kom je altijd uit bij de ‘three pillars of observability’: logs, metrics en traces.

Met logs wil je achterhalen wat er is gebeurd. Welke soorten verzoeken zijn er op je applicatie binnengekomen? Zijn er foutmeldingen geweest? Debug-informatie helpt om dieper inzicht te krijgen in wat je applicatie tijdens een verzoek doet.

Met metrics maak je een momentopname van de huidige staat van je applicatie: hoeveel verzoeken komen er binnen? Hoeveel verkeer is er? En treden er meer fouten op dan normaal? Dit is ideaal voor het maken van alerts en dashboards. Het geeft een goede indicatie van de gezondheid van je applicatie en kan snel signaleren wanneer er iets misgaat.

Traces gebruik je om diep je applicatie in te gaan. Daarmee volg je een verzoek vanaf de browser van de klant, door de applicatie heen, tot aan de database. Zo kun je bottlenecks vinden of exact bepalen waar het misgaat. Traces zet je meestal in nadat je een alert hebt gekregen of een specifieke vraag van de klant om meer informatie te verzamelen en een mogelijke fix te bepalen.

Laravel-eigen tooling

Een goed begin is de tooling te gebruiken die Laravel zelf aanbiedt: te beginnen met Laravel/Monolog voor logs, en verder Telescope en Pulse.

Laravel gebruikt standaard Monolog als logging-engine. Hiermee kun je snel verschillende channels aanmaken om je logs te verwerken. Voorbeelden hiervan zijn het wegschrijven naar een logbestand, het sturen van berichten naar Slack of het aanpassen van specifieke soorten logdata (denk aan debug- of tracinginformatie) en het automatiseren van logrotatie.

Om te starten met het debuggen van je Laravel-omgeving kun je de Laravel Debugbar gebruiken. Dit is een laagdrempelige manier om je ontwikkelomgeving te debuggen en geeft snel inzicht in onder andere queries, routes en events. Let er wel op dat deze plug-in niet in productie draait, omdat hij informatie kan lekken over opgeslagen verzoeken.

Telescope is ideaal voor ontwikkelomgevingen, want Telescope registreert alle requests, queries, cache-aanroepen, jobs, exceptions, mail, notificaties en meer. Hierdoor krijg je een goed overzicht van wat er op dat moment gebeurt, bijvoorbeeld wanneer er zware queries in de backend draaien.

Laravel Pulse verzorgt een lichte vorm van APM. Je kunt hierin (bijna) realtime trage endpoints, langzame jobs, N+1-hits en actieve gebruikers terugvinden. Dit geeft een goede initiële indicatie en is perfect voor gebruik in productieomgevingen.

The Next level

Je hebt nu een goed initieel inzicht in je applicatie en kunt in grote lijnen reageren op incidenten. Wil je de volgende stap zetten naar een volwaardige APM-oplossing, dan zijn er verschillende opties.

Denk aan Grafana, Datadog of New Relic. Al deze opties bieden de mogelijkheid om je logs, traces en metrics te verzamelen en in een centraal overzicht weer te geven. Je kunt kiezen om je eigen stack te hosten met bijvoorbeeld Grafana’s LGTM-stack (Loki = logs, Grafana = webinterface, Tempo = traces, Mimir = metrics) of voor een gehoste oplossing zoals Datadog of New Relic.

Ook Laravel biedt hiervoor een dienst aan, genaamd Nightwatch. Hiermee kun je eenvoudig je Laravel-applicatie onboarden door een agent op je systeem te draaien. Vervolgens krijg je in het Nightwatch-dashboard inzicht in het gedrag van je applicatie, inclusief responstijden en verzoeken, specifieke traces en logs.

Ook een bekende is de ELK-setup, waarin we Elasticsearch gebruiken als datastore, Logstash als collector en Kibana als viewer. Dit ecosysteem staat bekend om razendsnel door een grote hoeveelheid data te zoeken.

Maak je je zorgen over eventuele vendor lock-in, dan kun je gebruikmaken van OpenTelemetry. Dit is een framework dat het mogelijk maakt om verschillende observability-typen te verzamelen en naar een backend te versturen. Die backend kan nog steeds een van de hierboven genoemde platformen zijn.

Om dit eenvoudiger te maken kun je gebruikmaken van Kubernetes. Daarin kun je de mogelijkheden voor autodetectie benutten. Zo kan Prometheus detecteren welke applicaties binnen het cluster zijn opgestart en automatisch de bijbehorende metrics ophalen. Een andere goede optie is de OpenTelemetry-operator, die de collectors en de auto-instrumentatie van je applicatie verzorgt, zodat dit niet handmatig geconfigureerd hoeft te worden.

Als voorbeeld: binnen onze Shock Media Kubernetes-clusters gebruiken we Fluent Bit in combinatie met OpenSearch. Dat zorgt ervoor dat we grote hoeveelheden logdata kunnen indexeren en snel beschikbaar maken voor klanten, zodat bij een (aankomend) probleem de logs direct inzichtelijk zijn. Dit combineren we met metrics uit Prometheus in een Grafana-dashboard. De kracht van Grafana ligt bij het aanmaken van applicatie specifieke dashboards, waarin je precies ziet hoe je applicatie zich gedraagt. Het doel is om problemen snel te detecteren en op te lossen. Binnen ons observability portal heb je vervolgens alle data op één plek.

Conclusie

Het draaien van een productie-website brengt de nodige uitdagingen met zich mee. Observability neemt die niet allemaal weg, maar biedt zeker houvast en helpt ervoor te zorgen dat je applicatie kan meegroeien met je klantengroep. Mocht je vast lopen bij het opzetten van Observability of ben je op zoek naar hosting voor jouw Laravel applicaties? Neem dan contact met ons op.

Interessant wat u ziet? Deel dit met een relatie.

Sven Mollinga
Sven MollingaCTO
Direct naar:

Overig nieuws

Geen hostingproblemen meer – laat ons je helpen!

Met 25+ jaar ervaring zorgen wij voor snelle, veilige hosting – altijd met persoonlijke 24/7 support. Sluit je aan bij duizenden tevreden klanten en laat je website stralen. Neem nu contact op voor een gratis adviesgesprek!

Wij bieden 24/7 beheerde oplossingen voor websites, webshops en applicaties. Hiermee behoud je focus en kun je vertrouwen op een stabiele, snelle en veilige omgeving.

Volledig geoptimaliseerde oplossingen voor jouw framework en/of CMS. Maximale snelheid, performance en technische ondersteuning.

Met branche specifieke kennis bieden we je een technische voorsprong. Bekijk nu de mogelijkheden en oplossingen die passen bij jou!