Loggning i Kubernetes: EFK kontra PLG

Loggning i Kubernetes: EFK kontra PLG

Övervakning har blivit en mycket viktig komponent av vĂ€xande molnlösningar i takt med ökande komplexitet i distribuerade system. Det Ă€r nödvĂ€ndigt för att förstĂ„ deras beteende. Det behövs skalbara verktyg som kan samla data frĂ„n alla tjĂ€nster — och ge specialister ett gemensamt grĂ€nssnitt för prestandaanalys, felvisning, tillgĂ€nglighet och loggar.

Dessa verktyg bör vara effektiva och presterande. I denna artikel kommer vi att titta pÄ tvÄ populÀra teknikstackar: EFK (Elasticsearch) och PLG (Loki) och gÄ igenom deras arkitekturer och skillnader.

EFK-stacken

Du har kanske redan hört talas om den populÀra ELK eller EFK. Stacken bestÄr av flera separata delar: Elasticsearch (objektrepository), Logstash eller FluentD (insamling och aggregering av loggar) och Kibana för visualisering.

Ett typiskt arbetsflöde ser ut sÄ hÀr:

Loggning i Kubernetes: EFK kontra PLG

Elasticsearch — ett distribuerat objektrepository med sökning och analys i realtid. En utmĂ€rkt lösning för delvis strukturerad data, som loggar. Informationen lagras som JSON-dokument, indexeras i realtid och sprids över klustrets noder. En omvĂ€nd index anvĂ€nds, som innehĂ„ller alla unika ord och relaterade dokument för fulltextssökning, som i sin tur bygger pĂ„ sökmotorn Apache Lucene.

FluentD — Ă€r en datainsamlare som utför datastandardisering vid insamling och konsumtion. Den strĂ€var efter att strukturera data i JSON sĂ„ lĂ„ngt som möjligt. Dess arkitektur Ă€r utbyggbar, det finns mer Ă€n hundratals olika tillĂ€gg, som stöds av gemenskapen, för alla situationer.

Kibana — ett verktyg för datavisualisering för Elasticsearch med olika extra funktioner, som analys av tidsserier, grafer, maskininlĂ€rning och mer.

Elasticsearch-arkitektur

Data i Elasticsearch-klustret lagras utspritt över alla dess noder. Klustret bestÄr av flera noder för att förbÀttra tillgÀnglighet och motstÄndskraft. Vilken nod som helst kan utföra alla klustrets roller, men i stora skalbara installationer tilldelas noder vanligtvis specifika uppgifter.

Typer av klusternoder:

  • master node — hanterar klustret, minst tre behövs, en Ă€r alltid aktiv;
  • data node — lagrar indexerade data och utför olika uppgifter med dem;
  • ingest node — organiserar pipeliner för datatransformation före indexering;
  • coordinating node — routar förfrĂ„gningar, minskar sökprocessens bearbetningsfas, koordinerar massindeksering;
  • alerting node — initierar varningsuppgifter;
  • machine learning node — hanterar maskininlĂ€rningsuppgifter.

Diagrammet nedan visar hur data sparas och replikeras över noder för att uppnÄ högre datatillgÀnglighet.

Loggning i Kubernetes: EFK kontra PLG

Data för varje replik lagras i en inverterad index, schemat nedan visar hur detta gÄr till:

Loggning i Kubernetes: EFK kontra PLG

Installation

Detaljer kan ses hÀr, jag kommer att anvÀnda helm chart:

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

PLG-stacken

Det Àr inte sÄ konstigt om du inte hittar denna akronym, eftersom den bÀttre Àr kÀnd som Grafana Loki. Oavsett sÄ blir denna stack mer populÀr eftersom den tillÀmpar genomtÀnkta tekniska lösningar. Du har kanske redan hört talas om Grafana, det populÀra visualiseringsverktyget. Dess skapare, inspirerade av Prometheus, utvecklade Loki, ett horisontalt skalbart högpresterande system för loggaggregation. Loki indexerar endast metadata, inte sjÀlva loggarna, denna tekniska lösning har gjort det enkelt att anvÀnda och kostnadseffektivt.

Promtail — agent för att skicka loggar frĂ„n operativsystemet till Loki-klustret. Grafana — visualiseringsverktyg baserat pĂ„ data frĂ„n Loki.

Loggning i Kubernetes: EFK kontra PLG

Loki bygger pÄ samma principer som Prometheus, vilket gör att det passar bra för lagring och analys av Kubernetes-loggar.

Arkitektur för Loki

Loki kan köras bÄde som en enda process och som flera processer, vilket möjliggör horisontell skalning.

Loggning i Kubernetes: EFK kontra PLG

Den kan ocksÄ fungera antingen som en monolitisk applikation eller som en mikrotjÀnst. Att köra som en enda process kan vara anvÀndbart för lokal utveckling eller för liten övervakning. För industriell implementering och skalbar belastning rekommenderas den mikrotjÀnstvariant. Skriv- och lÀsvÀgarna för data Àr separerade, sÄ det kan justeras och skalas tydligt efter behov.

LÄt oss titta pÄ arkitekturen för systemet för loggsamling utan att gÄ in pÄ detaljer:

Loggning i Kubernetes: EFK kontra PLG

Och hÀr Àr beskrivningen (mikrotjÀnstarkitektur):

Loggning i Kubernetes: EFK kontra PLG

BestÄndsdelar:

Promtail — en agent som installeras pĂ„ noder (i form av en uppsĂ€ttning tjĂ€nster), som tar bort loggar frĂ„n uppgifter och ansluter till Kubernetes API för att hĂ€mta metadata som loggarna ska mĂ€rkas med. Den skickar sedan loggen till huvudtjĂ€nsten Loki. För att mappa metadata stöds samma regler för mĂ€rkning som i Prometheus.

Distributör — en distribuerande tjĂ€nst som fungerar som en buffert. För att hantera miljontals poster paketerar den de inkommande data genom att komprimera dem i block i takt med att de kommer in. Flera datamottagare arbetar samtidigt, men loggar som tillhör en ingĂ„ngsdatainström mĂ„ste hamna endast i en av dem för alla dess block. Detta organiseras som en ring av mottagare och sekventiell hashning. För att sĂ€kerstĂ€lla redundans görs detta n gĂ„nger (3 om det inte konfigureras).

Ingester — en datamottagartjĂ€nst. Data block kommer som komprimerade med tillagda loggar. SĂ„ snart ett block Ă€r tillrĂ€ckligt stort, görs en dump av blocket till databasen. Metadata gĂ„r till indexet och data frĂ„n loggblocket hamnar i Chunks (vanligtvis ett objektlager). Efter dumpning skapar mottagaren ett nytt block dit nya poster kommer att lĂ€ggas till.

Loggning i Kubernetes: EFK kontra PLG

Index — en databas, DynamoDB, Cassandra, Google BigTable och liknande.

Chunks — loggblock i komprimerad form, vanligtvis lagrade i objektlager, exempelvis S3.

FrĂ„gare — en lĂ€svĂ€g som gör allt det tunga arbetet. Den tittar pĂ„ tidsintervallet och etiketter, efter vilket den kollar indexet för att hitta matchningar. Sedan lĂ€ser den datablok och filtrerar dem för att fĂ„ fram resultatet.

LÄt oss nu titta pÄ allt i aktion.

Installation

För att installera i Kubernetes Àr det enklast att anvÀnda helm. Vi förutsÀtter att du redan har installerat och konfigurerat den (och den tredje versionen! översÀttarens anm.)

LÀgg till förrÄdet och installera stacken.

$ 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

Nedan visas ett exempel pÄ en instrumentpanel som visar data frÄn Prometheus för Etcd-metrik och Loki för loggar frÄn Etcd-pods.

Loggning i Kubernetes: EFK kontra PLG

LÄt oss nu diskutera arkitekturen för bÄda systemen och jÀmföra deras funktioner med varandra.

JÀmförelse

FrÄgesprÄk

I Elasticsearch anvÀnds Query DSL och Lucene query language, som möjliggör fulltextsökning. Det Àr en beprövad kraftfull sökmotor med bred support för operatorer. Med den kan man söka inom kontext och sortera efter relevans.

PÄ andra sidan ringen finns LogQL, som anvÀnds i Loki, en efterföljare till PromQL (Prometheus query language). Den anvÀnder loggtaggar för att filtrera och hÀmta loggdata. Det finns möjlighet att anvÀnda vissa operatorer och aritmetik, som beskrivs hÀr, men nÀr det gÀller funktionaliteter ligger det efter Elastic language.

Eftersom förfrĂ„gningar i Loki Ă€r kopplade till taggar — de Ă€r lĂ€tta att förena med metrik, vilket gör att de Ă€r enklare att organisera för operationell övervakning.

Skalbarhet

BÄda stackarna Àr horisontellt skalbara, men med Loki Àr det enklare eftersom den har separerade lÀs- och skrivvÀgar för data samt en mikrotjÀnstarkitektur. Loki kan anpassas efter dina behov och kan anvÀndas för mycket stora volymer av loggdata.

Multitenancy

Multitenancy av klustret Àr ett gemensamt tema för att minska OPEX, bÄda stackarna erbjuder multitenancy. För Elasticsearch finns det flera metoder för att separera klienter: enskild index för varje klient, klientbaserad routning, unika klientfÀlt, sökfilter. I Loki finns det stöd för i form av HTTP-huvudet X-Scope-OrgID.

Kostnad

Loki Àr ekonomiskt effektivt eftersom det inte indexerar data, utan endast metadata. PÄ sÄ sÀtt uppnÄs besparingar pÄ lagring och minne (cache), eftersom objektlagring Àr billigare Àn blocklagring, som anvÀnds i Elasticsearch-kluster.

Slutsats

EFK-stacken kan anvÀndas för olika ÀndamÄl, vilket ger maximal flexibilitet och en mÄngsidig Kibana-grÀnssnitt för analys, visualisering och förfrÄgningar. Den kan ytterligare förbÀttras med maskininlÀrningsmöjligheter.

Loki-stacken Àr anvÀndbar i Kubernetes-ekosystemet pÄ grund av dess mekanism för metadataupptÀckte. Det Àr enkelt att matcha data för övervakning baserat pÄ tidsserier i Grafana och loggar.

NÀr det kommer till kostnad och lÄngtidslagring av loggar Àr Loki ett utmÀrkt val för att komma in i molnlösningar.

Det finns fler alternativ pĂ„ marknaden — nĂ„gra kan vara bĂ€ttre för dig. Till exempel har GKE integration med Stackdriver, som erbjuder en utmĂ€rkt lösning för övervakning. Vi inkluderade dem inte i vĂ„r analys i denna artikel.

LĂ€nkar:

Artikeln har översatts och förberetts för Habr av medarbetare frĂ„n Slörms utbildningscenter — intensiver, videokurser och företagsutbildning frĂ„n praktiker (Kubernetes, DevOps, Docker, Ansible, Ceph, SRE, Agile)

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster