Logging in Kubernetes: EFK versus PLG

Logging in Kubernetes: EFK versus PLG

Monitoring is becoming an increasingly important component of growing cloud solutions as distributed systems become more complex. It is essential for understanding their behavior. Scalable tools are needed to collect data from all services and provide specialists with a unified interface for performance analysis, error demonstration, availability, and logs.

These tools must also be effective and efficient. In this article, we will explore two popular technology stacks: EFK (Elasticsearch) and PLG (Loki), and examine their architectures and differences.

EFK stack

You may have already heard of the well-known ELK or EFK. The stack consists of several distinct parts: Elasticsearch (object storage), Logstash or FluentD (log collection and aggregation), and Kibana for visualization.

A typical workflow looks like this:

Logging in Kubernetes: EFK versus PLG

Elasticsearch — a distributed object storage with real-time search and analytics. An excellent solution for semi-structured data, such as logs. Information is stored as JSON documents, indexed in real-time, and distributed across the nodes of the cluster. An inverted index is used, containing all unique words and their associated documents for full-text search, which is based on the Apache Lucene search engine.

FluentD — is a data collector that performs data unification upon collection and consumption. It aims to structure data in JSON format as much as possible. Its architecture is extensible, and there are more than a hundred different extensions, supported by the community, for all kinds of scenarios.

Kibana — a data visualization tool for Elasticsearch with various additional features, such as time series analysis, graphing, machine learning, and more.

Elasticsearch Architecture

Data in the Elasticsearch cluster is stored spread across all its nodes. The cluster consists of multiple nodes to improve availability and resilience. Any node can perform all cluster roles, but in large scalable deployments, nodes are typically assigned specific tasks.

Cluster node types:

  • master node — manages the cluster; a minimum of three is needed, with one always active;
  • data node — stores indexed data and performs various tasks with it;
  • ingest node — organiseert pijpleidingen voor het transformeren van gegevens vóór indexatie;
  • coordinating node — routering van verzoeken, verkorting van de zoekverwerking, coördinatie van grootschalige indexatie;
  • alerting node — start taken voor notificaties;
  • machine learning node — verwerking van machine learning-taken.

In de onderstaande diagram wordt getoond hoe gegevens worden opgeslagen en gerepliceerd over nodes voor een hogere beschikbaarheid van gegevens.

Logging in Kubernetes: EFK versus PLG

Gegevens van elke replica worden opgeslagen in een omgekeerde index, het schema hieronder toont hoe dit gebeurt:

Logging in Kubernetes: EFK versus PLG

Installatie

Details zijn te bekijken hier, ik ga helm chart gebruiken:

$ helm install efk-stack stable/elastic-stack --set logstash.enabled=false --set fluentd.enabled=true --set fluentd-elastics

PLG-stack

Het is niet verwonderlijk als je deze acroniem niet kunt vinden, want het staat beter bekend als Grafana Loki. Hoe dan ook, deze stack wint aan populariteit omdat het zorgvuldig geselecteerde technische oplossingen toepast. Je hebt misschien al gehoord van Grafana, een populaire visualisatietool. De makers ervan, geïnspireerd door Prometheus, ontwikkelden Loki, een horizontaal schaalbare, hoogpresterende systeem voor logaggregatie. Loki indexeert alleen metadata, maar niet de logs zelf; deze technische oplossing maakte het eenvoudig te gebruiken en kosteneffectief.

Promtail — agent voor het verzenden van logs vanuit het besturingssysteem naar de Loki-cluster. Grafana — visualisatietool gebaseerd op gegevens van Loki.

Logging in Kubernetes: EFK versus PLG

Loki is gebouwd op dezelfde principes als Prometheus, waardoor het goed geschikt is voor het opslaan en analyseren van Kubernetes-logs.

Architectuur van Loki

Loki kan zowel in één procesmodus als in meerdere processen worden uitgevoerd, waardoor horizontale schaalbaarheid wordt gegarandeerd.

Logging in Kubernetes: EFK versus PLG

Het kan ook functioneren als een monolithische applicatie of als een microservice. Het uitvoeren in één proces kan nuttig zijn voor lokale ontwikkeling of voor kleinere monitoring. Voor industriële implementatie en schaalbare belasting wordt de microservice-optie aanbevolen. De paden voor het schrijven en lezen van gegevens zijn gescheiden, zodat het vrij nauwkeurig kan worden aangepast en geschaald indien nodig.

Laten we kijken naar de architectuur van het logverzamelingssysteem zonder in detail te treden:

Logging in Kubernetes: EFK versus PLG

En hier is een beschrijving (microservice-architectuur):

Logging in Kubernetes: EFK versus PLG

Onderdelen:

Promtail — agent, geïnstalleerd op knooppunten (in de vorm van een set services), haalt logs uit taken en roept de API van Kubernetes aan om metadata te verkrijgen, waarmee de logs zullen worden gemarkeerd. Vervolgens verzendt het de log naar de belangrijkste service Loki. Voor het koppelen van metadata worden dezelfde regels voor labeling ondersteund als in Prometheus.

Distributor — service-distributeur, die fungeert als buffer. Voor het verwerken van miljoenen records verpakt het inkomende gegevens, waarbij het deze in blokken comprimeert naarmate ze binnenkomen. Meerdere data-ontvangers werken tegelijkertijd, maar logs die tot één stroom van inkomende gegevens behoren, moeten zich slechts in één van hen bevinden voor al zijn blokken. Dit is georganiseerd in de vorm van een ring van ontvangers en sequentieel hashen. Voor fouttolerantie en redundantie wordt dit n keer gedaan (3, als het niet geconfigureerd is).

Ingester — service-ontvanger. Datablokken komen gecomprimeerd binnen met toegevoegde logs. Zodra een blok groot genoeg is, wordt het blok naar de database geschreven. Metadata komt in de index, en gegevens van het logblok komen in Chunks (meestal objectopslag). Na het schrijven creëert de ontvanger een nieuw blok, waarin nieuwe records zullen worden toegevoegd.

Logging in Kubernetes: EFK versus PLG

Index — database zoals DynamoDB, Cassandra, Google BigTable en meer.

Chunks — blokken logs in gecomprimeerde vorm, meestal opgeslagen in objectopslag, zoals S3.

Querier — leespad, dat al het zware werk doet. Het bekijkt het tijdsbereik en de labels, daarna bekijkt het de index voor overeenkomsten. Vervolgens leest het de datablokken en filtert deze om de resultaten te verkrijgen.

Laten we nu alles in actie bekijken.

Installatie

Voor installatie in Kubernetes is het het eenvoudigst om helm te gebruiken. We nemen aan dat je het al hebt geïnstalleerd en geconfigureerd (en versie drie! opmerking van de vertaler)

Voeg de repository toe en installeer de stack.

$ helm repo add loki https://grafana.github.io/loki/charts
$ helm repo update
$ helm upgrade --install loki loki/loki-stack --set grafana.enabled=true,prometheus.enabled=true,prometheus.alertmanager.persistentVolume.enabled=false,prometheus.server.persistentVolume.enabled=false

Hieronder is een voorbeeld van een dashboard dat gegevens uit Prometheus toont voor metrics van Etcd en Loki voor logs van Etcd-pods.

Logging in Kubernetes: EFK versus PLG

Laten we nu de architectuur van beide systemen bespreken en hun mogelijkheden met elkaar vergelijken.

Vergelijking

Querytaal

In Elasticsearch wordt de Query DSL en de Lucene query language gebruikt, die de mogelijkheid biedt voor full-text zoekopdrachten. Dit is een gevestigde krachtige zoekmachine met brede ondersteuning voor operators. Hiermee kun je contextueel zoeken en sorteren op relevantie.

Aan de andere kant van de ring is LogQL, dat wordt toegepast in Loki, de opvolger van PromQL (Prometheus query language). Het gebruikt loglabels om logs te filteren en te selecteren. Er is de mogelijkheid om enkele operators en reconstructies te gebruiken, zoals beschreven hier, maar qua mogelijkheden blijft het achter bij de Elastic-taal.

Aangezien de aanvragen in Loki verbonden zijn met labels, kunnen ze gemakkelijk worden gekoppeld aan metrics, waardoor ze eenvoudiger een operationele monitoring kunnen organiseren.

Schaalbaarheid

Beide stacks zijn horizontaal schaalbaar, maar bij Loki is dit eenvoudiger, omdat het lees- en schrijfprocessen van gegevens gescheiden zijn, en het een microservices-architectuur heeft. Loki kan worden geconfigureerd volgens uw behoeften en kan worden gebruikt voor zeer grote hoeveelheden loggegevens.

Multi-tenant

Multi-tenancy van de cluster is een algemeen thema voor het verminderen van OPEX; beide stacks bieden multi-tenancy. Voor Elasticsearch zijn er verschillende manieren om klanten te scheiden: een aparte index voor elke klant, routering op basis van klant, unieke klantvelden, zoekfilters. In Loki is er ondersteuning voor in de vorm van de HTTP-header X-Scope-OrgID.

Cost

Loki is zeer kosteneffectief omdat het geen gegevens indexeert, maar alleen metadata. Hierdoor wordt er bespaard op opslag en geheugen (cache), aangezien objectopslag goedkoper is dan de blokopslag die wordt gebruikt in Elasticsearch-clusters.

Conclusie

De EFK-stack kan voor verschillende doeleinden worden gebruikt, waardoor maximale flexibiliteit en een multifunctionele interface in Kibana voor analytics, visualisaties en queries wordt geboden. Dit kan verder worden verbeterd met machine learning-functionaliteiten.

De Loki-stack is nuttig in het Kubernetes-ecosysteem vanwege het mechanisme voor het ontdekken van metadata. Gegevens voor tijdreeksmonitoring kunnen eenvoudig worden gekoppeld in Grafana en logs.

Als het gaat om kosten en langdurige opslag van logs, is Loki een uitstekende keuze voor toegang tot cloudoplossingen.

Er zijn meer alternatieven op de markt - sommige kunnen beter voor jou zijn. Bijvoorbeeld, voor GKE is er Stackdriver-integratie die een uitstekende oplossing biedt voor monitoring. We hebben ze niet in onze analyse in dit artikel opgenomen.

Links:

Dit artikel is vertaald en voorbereid voor Habr door medewerkers van de opleidingscentrum Slyrm — intensives, videocursussen en bedrijfsopleidingen van ervaren professionals (Kubernetes, DevOps, Docker, Ansible, Ceph, SRE, Agile)

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster