Logging i Kubernetes: EFK kontra PLG

Logging i Kubernetes: EFK kontra PLG

Overvågning er blevet en væsentlig komponent i voksende cloud-løsninger med den stigende kompleksitet af distribuerede systemer. Det er nødvendigt for at forstå deres adfærd. Der kræves skalerbare værktøjer, der kan indsamle data fra alle tjenester — og give specialisterne en samlet grænseflade med ydeevneanalyse, fejlvisning, tilgængelighed og logfiler.

Disse værktøjer skal også være effektive og ydedygtige. I denne artikel vil vi se på to populære teknologi-stakke: EFK (Elasticsearch) og PLG (Loki) og gennemgå deres arkitekturer og forskelle.

EFK-stakken

Måske har du allerede hørt om den meget populære ELK eller EFK. Stakken består af flere separate dele: Elasticsearch (objektlager), Logstash eller FluentD (indsamling og aggregering af logs) og Kibana til visualisering.

En typisk arbejdsmodel ser således ud:

Logging i Kubernetes: EFK kontra PLG

Elasticsearch — et distribueret objektlager med søgning og analyse i realtid. En fremragende løsning til delvist strukturerede data, som logs. Oplysninger gemmes i form af JSON-dokumenter, indekseres i realtid og distribueres på cluster-noder. Der anvendes et omvendt indeks, der indeholder alle unikke ord og de relaterede dokumenter til fuldtekst-søgning, som i øvrigt er baseret på søgemaskinen Apache Lucene.

FluentD — en datainnsamler, der søger at standardisere dataene ved indsamling og forbrug. Den prøver at organisere dataene i JSON så meget som muligt. Dens arkitektur er udvidelig, og der findes mere end hundrede forskellige udvidelser, understøttet af fællesskabet, til alle mulige formål.

Kibana — et visualiseringsværktøj til Elasticsearch med forskellige ekstra funktioner, såsom tidsserieanalyse, grafanalyse, maskinlæring og meget mere.

Elasticsearch-arkitektur

Dataene i Elasticsearch-clusteret gemmes spredt over alle dets noder. Clustret består af flere noder for at forbedre tilgængeligheden og robustheden. Enhver node kan udføre alle roller i clustret, men i store skalerbare implementeringer får noderne typisk tildelt specifikke opgaver.

Typer af cluster-noder:

  • master node — styrer clustret, minimum tre nødvendige, én er altid aktiv;
  • data node — gemmer indekserede data og udfører forskellige opgaver med dem;
  • ingest node — organiserer pipelines til at transformere data før indeksering;
  • coordinating node — rutinerer forespørgsler, forkorter søgebehandlingsfasen, koordinerer masseindeksering;
  • alerting node — starter varslingopgaver;
  • machine learning node — behandler maskinlæringsopgaver.

Diagrammet nedenfor viser, hvordan data gemmes og replikeres på noderne for at opnå højere datatilgængelighed.

Logging i Kubernetes: EFK kontra PLG

Data fra hver replik gemmes i et inverteret indeks, skemaet nedenfor viser, hvordan dette sker:

Logging i Kubernetes: EFK kontra PLG

Installation

Detaljerne kan ses her, jeg vil bruge helm chart:

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

PLG stack

Du bør ikke blive overrasket, hvis du ikke kan finde denne forkortelse, da den bedst er kendt som Grafana Loki. Under alle omstændigheder vinder denne stack popularitet, da den anvender gennemtænkte tekniske løsninger. Du har måske allerede hørt om Grafana, det populære visualiseringsværktøj. Dets skabere, inspireret af Prometheus, udviklede Loki, et horisontalt skalerbart, højtydende system til aggregation af logs. Loki indekserer kun metadata, ikke selve loggene, hvilket har gjort det nemt at anvende og økonomisk fordelagtigt.

Promtail — agent til at sende logs fra operativsystemet til Loki-klyngen. Grafana — visualiseringværktøj baseret på data fra Loki.

Logging i Kubernetes: EFK kontra PLG

Loki er bygget på de samme principper som Prometheus, så det passer godt til lager og analyse af Kubernetes-logs.

Loki-arkitektur

Loki kan køre både i en enkelt proces og i flere processer, hvilket giver horisontal skalering.

Logging i Kubernetes: EFK kontra PLG

Det kan også fungere som en monolitisk applikation eller som en mikrotjeneste. Kørsel i en enkelt proces kan være nyttig til lokal udvikling eller til mindre overvågning. For industriel implementering og skalerbar belastning anbefales det at anvende mikrotjenestevarianten. Veje til at skrive og læse data er adskilt, så det kan justeres og skaleres efter behov.

Lad os se på arkitekturen af logindsamlingssystemet uden detaljering:

Logging i Kubernetes: EFK kontra PLG

Og her er en beskrivelse (mikrotjenestearkitektur):

Logging i Kubernetes: EFK kontra PLG

Bestanddele:

Promtail — en agent, der installeres på noder (i form af et sæt tjenester), indsamler logfiler fra opgaver og henter metadata via Kubernetes API, som loggene vil blive mærket med. Derefter sender den loggen til den primære Loki-tjeneste. De samme regler for mærkning som i Prometheus understøttes til matchning af metadata.

Distributor — en distributionsservice, der fungerer som en buffer. For at behandle millioner af poster pakker den de indkommende data og komprimerer dem i blokke, mens de modtages. Flere datamodtagere fungerer samtidigt, men logfiler, der tilhører en enkelt indkommende datastream, bør kun være i én af dem for alle dens blokke. Dette er organiseret i en ring af modtagere med sekventiel hashing. For fejltolerance og redundans gøres det n gange (3, hvis ikke konfigureret).

Ingester — en modtagerservice. Data blokke kommer komprimeret med tilføjede logfiler. Når en blok når en tilstrækkelig størrelse, udføres blokken i databasen. Metadata går til indekset, mens data fra blokken med loggen går til Chunks (normalt objektlagring). Efter nedskrivning opretter modtageren en ny blok, hvor nye poster skal tilføjes.

Logging i Kubernetes: EFK kontra PLG

Index — database, DynamoDB, Cassandra, Google BigTable og andet.

Chunks — komprimerede logblokke, der normalt opbevares i objektlagring, f.eks. S3.

Querier — læsevejen, der udfører alt det hårde arbejde. Den ser på tidsintervallet og mærker, hvorefter den kigger på indekset for at finde matches. Derefter læser den datablokke og filtrerer dem for at få resultatet.

Lad os nu se alt i aktion.

Installation

For at installere i Kubernetes er det nemmeste at bruge helm. Vi antager, at du allerede har installeret og konfigureret det (og version tre! oversætterens bemærkning)

Tilføj repoet og installér stakken.

$ 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

Her er et eksempel på et dashboard, der viser data fra Prometheus for Etcd-metrikker og Loki for Etcd-pod-logfiler.

Logging i Kubernetes: EFK kontra PLG

Lad os nu diskutere arkitekturen af begge systemer og sammenligne deres funktionaliteter.

Sammenligning

Spørgesprog

Elasticsearch bruger Query DSL og Lucene forespørgselssprog, der muliggør fuldtekstsøgning. Det er en veletableret kraftfuld søgemaskine med bred støtte til operatorer. Med det kan man søge i konteksten og sortere efter relevans.

På den anden side af ringen er LogQL, der anvendes i Loki, en efterfølger til PromQL (Prometheus forespørgselssprog). Den bruger log-tags til at filtrere og vælge logdata. Der er mulighed for at bruge nogle operatorer og aritmetik, som beskrevet her, men hvad angår muligheder er den bagud i forhold til Elastic-sproget.

Da forespørgsler i Loki er relateret til tags, er de lette at knytte til metrikker, hvilket gør det lettere at organisere operationel overvågning.

Skalering

Begge stacks er horisontalt skalerbare, men det er lettere med Loki, da den har adskilte veje for læsning og skrivning af data, samt en mikrotjenestearkitektur. Loki kan tilpasses til dine specifikationer og kan bruges til meget store mængder logdata.

Multi-leje

Multi-leje for klynger er et generelt emne til at reducere OPEX, begge stacks understøtter multi-leje. For Elasticsearch er der flere måder at adskille kunder: en separat indeks for hver kunde, kundebaseret routing, unikke kunde-felter, søgefiltre. I Loki er der understøttelse af i form af HTTP-headeren X-Scope-OrgID.

Omkostninger

Loki er meget omkostningseffektiv, da den ikke indekserer data, men kun metadata. Dette opnår besparelser på lagerplads og hukommelse (cache), da objektlagring er billigere end bloklagring, som bruges i Elasticsearch-klynger.

Konklusion

EFK-stakken kan bruges til forskellige formål, hvilket giver maksimal fleksibilitet og et multifunktionelt grænseflade i Kibana til analyse, visualisering og forespørgsler. Den kan yderligere forbedres med maskinlæringsevner.

Loki-stakken er nyttig i Kubernetes-økosystemet på grund af metadata-opdagelsesmekanismen. Det er nemt at matche data til tidsserieovervågning i Grafana og logs.

Når det kommer til omkostninger og langvarig opbevaring af logs, er Loki et fremragende valg for indtræden i cloud-løsninger.

Der er flere alternativer på markedet - nogle kan være bedre for dig. For eksempel tilbyder GKE en integration med Stackdriver, som giver en fremragende løsning til overvågning. Vi inkluderede ikke dem i vores analyse i denne artikel.

Links:

Artiklen er oversat og forberedt til Habr af medarbejdere af Slurm træningscenteret – intensivkurser, videokurser og virksomhedstræning fra praktiserende specialister (Kubernetes, DevOps, Docker, Ansible, Ceph, SRE, Agile)

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster