
Ă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:

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 , 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.

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

Installation
Detaljer kan ses , jag kommer att anvÀnda helm chart:
$ helm install efk-stack stable/elastic-stack --set logstash.enabled=false --set fluentd.enabled=true --set fluentd-elasticsPLG-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.

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.

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:

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

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.

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 ( ö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=falseNedan 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.

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 , 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 för att separera klienter: enskild index för varje klient, klientbaserad routning, unika klientfÀlt, sökfilter. I Loki finns det 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 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 â intensiver, videokurser och företagsutbildning frĂ„n praktiker (Kubernetes, DevOps, Docker, Ansible, Ceph, SRE, Agile)
KĂ€lla: habr.com
