In een tweetal eerdere blogs zetten we de belangrijkste monitoringtools voor Kubernetes voor je uiteen en doken we in de wereld van de monitoringssoftware van Prometheus. In deze blog zoomen we uit en kijken naar twee vormen van monitoring: architectuurmonitoring en tracing. Wat is dit precies, hoe gebruik je het en welke voordelen levert dit op voor jouw organisatie?
Wat is architectuurmonitoring?
Een Kubernetes-container kan op verschillende locaties worden gehost. Vanuit een datacenter beantwoordt een masterserver vragen vanuit clients, zoals devices van eindgebruikers. Deze masterserver fungeert hierbij als het controlerende knooppunt en centraal contactpunt voor clients. Ook een multi-master setup is overigens mogelijk, waarmee meerdere masterservers worden gebruikt. Dit vergroot de beschikbaarheid van de omgeving.
De masterserver bestaat in de praktijk uit verschillende componenten. Voorbeelden zijn de kube-apiserver, een etcd-opslag, een kube-controller-manager en een cloud-controller-manager. Denk echter ook aan een kube-scheduler en een DNS-server voor Kubernetes-services. Met behulp van architectuurmonitoring houd je de prestaties van deze architectuur continu in de gaten.
Wat maakt architectuurmonitoring van belang?
De verschillende architectuurcomponenten van Kubernetes werken nauw met elkaar samen. Prestatieproblemen in één component kunnen hierdoor invloed hebben op de prestaties van een ander component en de applicatie als geheel.
Lees ook het e-book: 26 handige Kubernetes tools voor beginners
Deze onderlinge afhankelijkheid maakt architectuurmonitoring van groot belang. Actieve monitoring helpt onder meer bij het opsporen van prestatieproblemen van individuele componenten van de architectuur. Met behulp van architectuurmonitoring achterhaal je de bron van prestatieproblemen. En kan je gericht actie ondernemen. Zo zorg je dat de prestaties van de containerized applicatie als geheel optimaal blijven.
Populaire tools
Enkele veel gebruikte tools voor architectuurmonitoring zijn onder meer:
Prometheus
Deze open-source tool is een van de meest populaire tools op het gebied van monitoring en alerting voor Kubernetes. Prometheus verzamelt gegevens vanuit Kubernetes via HTTP endpoints, die vervolgens voor analyse beschikbaar wordt gemaakt in een tijdreeks. De monitoringtool is zeer schaalbaar en geschikt voor het verwerken van grote hoeveelheden gegevens.
Lees ook: Prometheus: monitoring software voor microservices en Kubernetes
Kubelet
Deze tool verzamelt PodSpecs, YAML– of JSON-bestanden die een pod beschreven. Kubelet analyseert deze PodSpecs en brengt de status van pods in kaart. Ook verzamelt de tool meetwaarden over pods.
Container Advisor (cAdvisor)
cAdvisor is een agent die het gebruik van resources en de prestaties van containers in kaart brengt. De tool inventariseert automatisch alle containers op een systeem. Per container maakt cAdvisor statistieken inzichtelijk met betrekking tot onder meer het geheugen-, CPU- en netwerkgebruik.
Wat is distributed tracing?
In een Kubernetes-omgeving zijn applicaties vaak opgedeeld in microservices, die ieder als een losse service fungeren. De microservices werken onderling nauw samen en geven bijvoorbeeld data of input aan elkaar door. In de praktijk kan binnen een Kubernetes-applicatie sprake zijn van interactie tussen honderden verschillende microservices. Met behulp van distributed tracing monitor je deze interacties en krijg je een overzicht over de volledige Kubernetes-omgeving.
De mogelijkheden zijn divers. Zo kan je met behulp van distributed tracing onder meer de latency van microservices onderling in kaart brengen. Denk echter ook aan het in kaart brengen van bottlenecks, die de prestaties van de applicatie kunnen beïnvloeden. Een ander voorbeeld is het monitoren van de volledige levenscyclus van bijvoorbeeld een HTTP- of RPC-verzoek. Of het analyseren van de serviceafhankelijkheid. Distributed tracing speelt dan ook een cruciale rol bij root cause analysis als er problemen worden geconstateerd.
Drie frameworks
Op het gebied van distributed tracing zijn er drie leidende frameworks beschikbaar: OpenCensus, OpenTracing en OpenTelemetry. We zoomen kort in op de drie opties.
OpenCensus
OpenCensus wordt gesteund door zowel Google als Microsoft en is beschikbaar als open source tool. Het framework bevat een reeks libraries die zijn toegespitst op specifieke programmeertalen voor het instrumenteren van een applicatie, verzamelen van meetwaarden en exporteren van data naar de backend. Developers voegen OpenCensus met behulp van een agent toe aan hun code. Het framework ondersteunt onder meer Azure Monitor, DataDog, Instana, Jaeger, New Relic, SignalFX, Google Cloud Monitoring + Trace en Zipkin.
OpenTracing
OpenTracing is een specificatie voor tracing API’s die wordt gehost door de Cloud Native Computing Foundation (CNCF), een stichting die als hoeder van Kubernetes fungeert. Het doel van OpenTracing is het bieden van een gestandaardiseerde API voor tracing en is vendor-neutraal. Zo kan bijvoorbeeld eenvoudiger worden gewisseld van storage backend. Na het toevoegen van een OpenTracing-compatibele tracer aan hun code kunnen ontwikkelaars met OpenTracing aan de slag. Ook kunnen zij eigen tracers schrijven.
OpenTelemetry
OpenTelemetry combineert de mogelijkheden van OpenTracing en OpenCensus. Het raamwerk biedt een enkelvoudige reeks API’s, libraries, agents en services voor het vastleggen van meetwaarden en traces. Kenmerkend is ondersteuning voor een breed aantal programmeertalen, waaronder Java, C#, Go, JavaScript, Python, Rust, C++ en Erlang/Elixir. OpenTelemetry integreert met populaire raamwerken en libraries als MySQL, Redis, Django, Kafka, Spring, Flask en PostgreSQL. OpenTelemetry combineert hiermee de flexibiliteit van OpenTracing met het gebruiksgemak van OpenCensus.
Architectuurmonitoring of distributed tracing?
Voor Kubernetes zijn dus twee hoofdvormen van monitoring beschikbaar: architectuurmonitoring en distributed tracing. Met behulp van architectuurmonitoring breng je de prestaties en status van individuele componenten van de onderliggende architectuur van de containeromgeving in kaart. Met behulp van distributed tracing monitor je de integratie van, de samenwerking tussen en de afhankelijkheden van microservices.