Logging voorbeeld

Observability

de mate waarin je de (interne) toestand van je systeem kunt afleiden uit (extern) waarneembare data

In de basis begint het meestal met de meer traditionele metrics van applicaties en servers op basis van duidelijk meetbare waarden zoals CPU gebruik, geheugen gebruik etc. Dit is meestal gebaseerd op de (virtuele) machine waar de applicatie op draait. Bij web applicaties kan ook worden gedacht aan (download) snelheden en latency (hoe lang duurt het voordat de applicatie antwoord geeft). Vaak zijn deze waarden gerelateerd: zodra het druk wordt kan het langer duren voordat er een antwoord komt.

Daarnaast kan er ook gekeken worden naar de logging. Het kan handig zijn om de logging van deze applicaties naar een centraal punt te sturen om hier te analyseren. Op deze manier kan meer inzicht worden verkregen in het gebruik en mogelijke foutsituaties. Door informatie te combineren van meerdere applicaties kunnen er diepere inzichten worden verkregen in het verwerking van bijvoorbeeld een klantverzoek, door gebruik te maken van tracing. Een trace volgt de afhankelijk van een verzoek over applicaties heen en kan daarbij bottlenecks aan het licht brengen.

 

Aan de hand van een aantal voorbeelden laten we zien wat er zoals mogelijk is:

Metrics

De technische prestatie van servers, kijk bijvoorbeeld naar processor- en geheugengebruik van de applicatie. Een eenvoudig en herkenbaar beeld is die van Zabbix en de CPU en Memory Utilization van het standaard meegeleverde “Linux by Zabbix Agent” template.

 

Daarnaast kan dit bijvoorbeeld worden afgezet tegen het aantal requests dat per seconde wordt afgehandeld op de webserver, en de gemiddelde grootte van de requests. Deze kunnen worden verkregen met het standaard “Apache by Zabbix agent” template. Voor veel applicaties zijn standaard templates, en soms is het handiger om zelf iets te maken.

 

Voor bijvoorbeeld Apache ActiveMQ is een JMX template, maar dezelfde metrics worden hieronder met Jolokia opgehaald via “HTTP agent” calls, en in een dashboard gecombineerd met de Apache en CPU load metrics.

Logging

Naast het monitoren van metrics is ook logging een belangrijk onderdeel van Observability. Inspectie van logs geeft veel informatie over het welbevinden van de applicatie. Zeker bij de wat grotere applicatie landschappen is het handig om de logs op te sturen naar een centraal punt voor analyse. Dit kan bijvoorbeeld met de Elastic Stack.

Logging voorbeeld

Ook in de log kunnen allerlei metrics worden gevonden die aanvullend en soms overlappend zijn met de monitoring. Bijvoorbeeld webserver logs kunnen ook informatie geven over de tijd die het duurt voordat het request is afgehandeld. Deze kan toenemen bij grotere drukte op de server.

Tracing

Bij het afhandelen van een request zijn vaak meerdere services betrokken. Om deze afhandeling te kunnen volgen is het handig om hiervoor herkenbare referenties toe te voegen aan bijvoorbeeld de logging. Een redelijk op zichzelf staande manier om dit te doen is met ZipKin, die een instrumentatie library en UI heeft.

De Elastic Stack biedt ook mogelijkheden voor tracing, door middel van een agent. Deze Application Performance Monitoring (APM) agent geeft ook de nodige metrics en meta informatie van de applicatie door aan Elasticsearch, die dan weer gevisualiseerd kan worden door Kibana. 

Deze agent kan ook afhankelijkheden detecteren van de applicatie op bijvoorbeeld databases, message brokers en externe webservices.

De agent is in staat om een enkel webrequest naar de applicatie uit te splitsen in de verschillende stappen die nodig zijn om het af te handelen, bijvoorbeeld een uitstapje naar de database of externe webservice.

Conclusie

Zoals je ziet zijn er veel mogelijkheden om per applicatie of project de diepte in te gaan op basis van de specifieke behoefte. Vaak ontkom je niet aan een beetje maatwerk om precies te krijgen wat je wilt, maar dat maakt het juist zo interessant!