
JĂ€lgimine on muutunud vĂ€ga oluliseks komponendiks kasvavatesse pilve lahendustesse, kuna jaotatud sĂŒsteemide keerukus suureneb. See on vajalik nende kĂ€itumise mĂ”istmiseks. On vaja skaleeritavaid tööriistu, mis suudavad koguda andmeid kĂ”ikidest teenustest ja pakkuda spetsialistidele ĂŒhtset liidest jĂ”udluse analĂŒĂŒsimiseks, vigade tuvastamiseks, kĂ€tte saadavuse jĂ€lgimiseks ja logide haldamiseks.
Need tööriistad peavad olema tĂ”husad ja tootlikud. KĂ€esolevas artiklis vaatleme kahte populaarset tehnoloogeograafiat: EFK (Elasticsearch) ja PLG (Loki) ning analĂŒĂŒsime nende arhitektuure ja erinevusi.
EFK tehnoloogeograafia
VÔimalik, et olete juba kuulnud vÀga populaarsest ELK vÔi EFK-st. Tehnoloogeograafia koosneb mitmest eraldi osast: Elasticsearch (objektide salvestamine), Logstash vÔi FluentD (logide kogumine ja agregatsioon) ning Kibana visualiseerimiseks.
TĂŒĂŒpiline töövoog nĂ€eb vĂ€lja jĂ€rgmiselt:

Elasticsearch â jaotatud objektide salvestamine, reaalajas otsingu ja analĂŒĂŒsi vĂ”imalustega. SuurepĂ€rane lahendus osaliselt struktureeritud andmete, nagu logide, jaoks. Teave salvestatakse JSON dokumentidena, indekseeritakse reaalajas ja jagatakse klastrite sĂ”lmede vahel. Kasutatakse pöördsĂ”nastikku, mis sisaldab kĂ”iki unikaalseid sĂ”nu ja nendega seotud dokumente tĂ€isteksti otsingu jaoks, mis pĂ”hineb Apache Lucene'i otsingumootoril.
FluentD â andmete kogumiseks mĂ”eldud tööriist, mis ĂŒhtlustab andmeid nende kogumise ja kasutamise ajal. See pĂŒĂŒab andmeid JSON formaadis vĂ”imalikult korralikult struktureerida. Selle arhitektuur on laiendatav ning olemas on ĂŒle , mida toetavad kogukonnad iga olukorra jaoks.
Kibana â Elasticsearchi andmete visualiseerimise tööriist koos erinevate tĂ€iendavate funktsioonidega, nagu ajaread, graafikud, masinĂ”pe ja muud.
Elasticsearchi arhitektuur
Elasticsearchi klastrite andmed on jaotatud kĂ”ikide selle sĂ”lmede vahel. Klastril on mitu sĂ”lme, et parandada kĂ€tte saadavust ja vastupidavust. Iga sĂ”lm vĂ”ib tĂ€ita kĂ”iki klastritöid, kuid suurtel skaleeritavatel juurutustel mÀÀratakse tavaliselt sĂ”lmedele erinevad ĂŒlesanded.
Klastri sĂ”lmede tĂŒĂŒbid:
- master node â haldab klastrit, vajab vĂ€hemalt kolme, ĂŒks neist on alati aktiivne;
- data node â salvestab indekseeritud andmeid ja sooritab nendega erinevaid ĂŒlesandeid;
- ingest node â korraldab andmete töötlemise torusid enne indekseerimist;
- coordinating node â suunab pĂ€ringud, lĂŒhendab otsingu töötlemise etappi, koordineerib massindekseerimist;
- alerting node â kĂ€ivitab teavitamise ĂŒlesandeid;
- machine learning node â töötleb masinĂ”ppe ĂŒlesandeid.
Alloleval diagrammil on nÀidatud, kuidas andmeid salvestatakse ja kopeeritakse sÔlmedes, et saavutada suurem andmete kÀttesaadavus.

Iga replikatsiooni andmed salvestatakse pöördindeksis, allolev skeem nÀitab, kuidas see toimub:

Paigaldamine
Detailide vaatamiseks kliki siia , ma kasutan helm chart'i:
$ helm install efk-stack stable/elastic-stack --set logstash.enabled=false --set fluentd.enabled=true --set fluentd-elasticsPLG stack
Ărge muretsege, kui te ei leia seda akronĂŒĂŒmi, kuna seda tuntakse paremini kui Grafana Loki. Igal juhul on see stack populaarsust kogumas, kuna rakendab lĂ€bimĂ”eldud tehnilisi lahendusi. Olete vĂ”ib-olla juba kuulnud Grafanast, populaarsest visualiseerimise tööriistast. Selle loojad, vĂ”ttes inspiratsiooni Prometheusest, arendasid vĂ€lja Loki, horisontaalselt skaleeritava ja kĂ”rge jĂ”udlusega logide kogumise sĂŒsteemi. Loki indekseerib ainult metaandmeid, mitte logisid endid, see tehniline lahendus on vĂ”imaldanud sellel olla lihtne kasutada ja kulutĂ”hus.
Promtail â agent, mis saadab logisid opsĂŒsteemist Loki klastrisse. Grafana â visualiseerimise tööriist, mis pĂ”hineb Loki andmetel.

Loki on ĂŒles ehitatud samadel pĂ”himĂ”tetel kui Prometheus, seega sobib see hĂ€sti logide sĂ€ilitamiseks ja analĂŒĂŒsimiseks Kuberneteses.
Loki arhitektuur
Loki saab tööle panna nii ĂŒhes protsessis kui ka mitmes protsessis, mis tagab horisontaalse skaleeritavuse.

Samuti vĂ”ib see töötada kas monoliitse rakendusena vĂ”i mikroteenusena. Ăhes protsessis töötamine vĂ”ib olla kasulik kohaliku arenduse vĂ”i vĂ€ikese jĂ€lgimise jaoks. Tööstuslikuks rakendamiseks ja skaleeritava koormuse jaoks on soovitatav kasutada mikroteenuse varianti. Andmete kirjutamise ja lugemise teed on eraldatud, nii et seda saab piisavalt peenelt seadistada ja vajadusel skaleerida.
Vaatame logide kogumise sĂŒsteemi arhitektuuri ilma detailideta:

Ja siin on kirjeldus (mikroteenuse arhitektuur):

Koostisosad:
Promtail â agent, mis paigaldatakse sĂ”lmedesse (teenuste kogumina), mis salvestab ĂŒlesannete logid ja suhtleb Kubernetes API-ga logide mĂ€rgistamiseks vajalike metadate saamiseks. SeejĂ€rel saadab see logi pĂ”hiteenusele Loki. Metadatee mĂ€rgistamiseks kehtivad samad reeglid nagu Prometheuses.
Jaotaja â jaotusteenus, mis töötab puhvri pĂ”himĂ”ttel. Miljonite kirje töötlemiseks pakib see sissetulevaid andmeid, surudes need blotina kokku nende saabumise ajal. Samal ajal töötab mitu andmete vastuvĂ”tjat, kuid ĂŒhe sissetuleva andmevoo logid peavad olema ainult ĂŒhes neist kĂ”ikides tema blotides. See on korraldatud vastuvĂ”tjate ringina ja jĂ€rjestikuse hĂ€shetimisega. Veatuks ja ĂŒleliigseks rakendatakse seda n korda (3, kui seda ei seadistata).
AndmevastuvĂ”tja â vastuvĂ”tja teenus. Andmeblokid tulevad kokku surutud koos lisatud logidega. Kui blokil on piisavalt suurus, tehakse selle blokeerimine andmebaasi. Metadatee lĂ€heb indeksisse, samas kui logiblokist saadud andmed jĂ”uavad Chunks'isse (tavaliselt objektihoidlas). PĂ€rast blokeerimist loob vastuvĂ”tja uue bloki, kuhu lisatakse uusi kirjeid.

Index â andmebaas, nĂ€iteks DynamoDB, Cassandra, Google BigTable jne.
Chunks â kompaktsed logiblokid, mis on tavaliselt salvestatud objektihoidlas, nagu S3.
KĂŒsija â lugemistee, mis teeb kogu musta töö. See vaatab ajavahemikku ja silte, seejĂ€rel vaatab indeksist vastete leidmiseks. SeejĂ€rel loeb andmeblokke ja filtreerib neid, et saada tulemus.
NĂŒĂŒd vaatame kĂ”ike töös.
Paigaldamine
Kubernetesesse seadistamiseks on kÔige lihtsam kasutada helm'i. Eeldame, et olete selle juba paigaldanud ja seadistatud ( tÔlkija mÀrkus)
Lisame hoidla ja paigaldame steigi.
$ 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=falseAllpool on nÀide juhtpaneelist, kus kuvatakse andmed Prometheusest Etcd-i mÔÔtmete ja Loki logide jaoks.

NĂŒĂŒd arutame mĂ”lema sĂŒsteemi arhitektuuri ja vĂ”rdleme nende vĂ”imalusi.
VÔrdlus
KĂŒsimuste keel
Elasticsearch kasutab Query DSL-i ja Lucene pÀringukeelt, mis vÔimaldavad tÀisteksti otsingut. See on vÀljakujunenud vÔimas otsimootor, millel on lai toetavate operaatorete tugi. Selle abil saab otsida konteksti jÀrgi ja jÀrjekorrastada vastavuse alusel.
Ringis teisel pool on LogQL, mida kasutatakse Lokis, PromQL-i (Prometheuse pÀringukeel) jÀreltulija. See kasutab logimÀrksÔnu logide filterimiseks ja andmete valimiseks. On vÔimalik kasutada mÔningaid operaatorite ja aritmeetika, nagu on kirjeldatud, , kuid omaduste poolest jÀÀb see Elasticu keelele alla.
Kuna Loki pÀringud on seotud mÀrksÔnadega, on neid lihtne seostada mÔÔdikute tÔttu, mis teeb operatiivse jÀlgimise korraldamise lihtsamaks.
Skaleeritavus
MÔlemad tehnoloogiad on horisontaalselt skaleeritavad, kuid Loki puhul on see lihtsam, kuna sellel on eraldi andmete lugemise ja kirjutamise teed ning mikroteenuste arhitektuur. Lokit saab kohandada vastavalt teie vajadustele ja seda saab kasutada vÀga suurte logiandmete mahtude jaoks.
MitmeĂŒĂŒrilisus
Klastri mitmeĂŒĂŒrilisus on ĂŒldine teema OPEX-i vĂ€hendamiseks, mĂ”lemad tehnoloogiad toetavad mitmeĂŒĂŒrilisust. Elasticsearchi jaoks on mitmeid klientide eraldamiseks: eraldi indeks igale kliendile, kliendi pĂ”hjal navigeerimine, unikaalsed kliendi vĂ€ljad, otsingufiltrid. Lokis on olemas HTTP pĂ€ises X-Scope-OrgID.
Hind
Loki on majanduslikult vÀga efektiivne, kuna see ei indekseeri andmeid, vaid ainult metaandmeid. Nii saavutatakse ja mÀlu (vahemÀlu) kokkuhoid, kuna objektide salvestamine on odavam kui plokis, mida kasutatakse Elasticsearchi klastrites.
KokkuvÔte
EFK tehnoloogiat saab kasutada erinevateks eesmĂ€rkideks, pakkudes maksimaalset paindlikkust ja mitmeotstarbelist Kibana liidest analĂŒĂŒtikaks, visualiseerimiseks ja pĂ€ringuteks. Seda saab veelgi tĂ€iustada masinĂ”ppe vĂ”imalustega.
Loki tehnoloogia on Kubernetes'i ökosĂŒsteemis kasulik seoses metaandmete avastamise mehhanismiga. Andmeid on lihtne seostada ajajoonte jĂ€lgimise ja logide pĂ”hjal Grafanas.
Kui rÀÀkida logide sÀilitamise maksumusest ja pikkadest sÀilitamisperioodidest, on Loki suurepÀrane valik pilve lahendustesse sisenemiseks.
Turul on rohkem alternatiive - mĂ”ned vĂ”ivad teile paremini sobida. NĂ€iteks GKE jaoks on olemas Stackdriveri integreerimine, mis pakub suurepĂ€rast lahendust jĂ€lgimiseks. Me ei lisanud neid oma analĂŒĂŒsi selles artiklis.
Lingid:
Artikkel on tĂ”lgitud ja koostatud Habra töötajate poolt â intensiivkursused, videokursused ja ettevĂ”tte koolitus praktiseerivatelt spetsialistidelt (Kubernetes, DevOps, Docker, Ansible, Ceph, SRE, Agile)
Allikas: habr.com
