Spremljanje je postalo zelo pomembna komponenta rastočih rešitev v oblaku, saj se kompleksnost porazdeljenih sistemov povečuje. Treba je razumeti njihovo vedenje. Potrebujemo razširljiva orodja, ki lahko zbirajo podatke iz vseh storitev - in strokovnjakom zagotovijo enoten vmesnik z analizo delovanja, prikazom napak, razpoložljivostjo in dnevniki.
Ta ista orodja morajo biti učinkovita in produktivna. V tem članku si bomo ogledali dva priljubljena tehnološka sklopa: EFK (Elasticsearch) in PLG (Loki) ter preučili njuni arhitekturi in razlike.
sklad EFK
Morda ste že slišali za zelo priljubljena ELK ali EFK. Sklad je sestavljen iz več različnih delov: Elasticsearch (shranjevanje predmetov), Logstash ali FluentD (zbiranje in združevanje dnevnikov) in Kibana za vizualizacijo.
Tipičen potek dela izgleda takole:
Elastično iskanje — porazdeljeno shranjevanje objektov z iskanjem in analitiko v realnem času. Odlična rešitev za polstrukturirane podatke, kot so dnevniki. Informacije so shranjene kot dokumenti JSON, indeksirani v realnem času in porazdeljeni po vozliščih gruče. Za iskanje po celotnem besedilu se uporablja obrnjen indeks, ki vsebuje vse edinstvene besede in povezane dokumente, ki temelji na iskalniku Apache Lucene.
FluentD je zbiralnik podatkov, ki poenoti podatke pri zbiranju in porabi. Poskuša čim bolj organizirati podatke v JSON. Njegova arhitektura je razširljiva, obstaja še več na stotine različnih razširitev, s podporo skupnosti, za vse priložnosti.
Kibana - orodje za vizualizacijo podatkov za Elasticsearch z različnimi dodatnimi zmožnostmi, na primer analizo časovnih vrst, analizo grafov, strojno učenje in drugo.
Elasticsearch arhitektura
Podatki gruče Elasticsearch so shranjeni razpršeno po vseh njenih vozliščih. Grozd je sestavljen iz več vozlišč za izboljšanje razpoložljivosti in odpornosti. Vsako vozlišče lahko opravlja vse vloge gruče, vendar so v velikih razširjajočih uvedbah vozliščem običajno dodeljene posamezne naloge.
Vrste vozlišč gruče:
glavno vozlišče - upravlja gručo, potrebni so vsaj trije, eno je vedno aktivno;
podatkovno vozlišče - shranjuje indeksirane podatke in z njimi izvaja različne naloge;
vozlišče za vnos - organizira cevovode za preoblikovanje podatkov pred indeksiranjem;
Ne bodite presenečeni, če te kratice ne najdete, saj je bolj znana kot Grafana Loki. Vsekakor ta sklad postaja vse bolj priljubljen, ker uporablja preverjene tehnične rešitve. Morda ste že slišali za Grafano, priljubljeno orodje za vizualizacijo. Njegovi ustvarjalci so po navdihu Prometheusa razvili Loki, vodoravno razširljiv, visoko zmogljiv sistem združevanja dnevnikov. Loki indeksira le metapodatke, ne pa tudi samih revij, kar je tehnična rešitev, ki omogoča enostavno uporabo in stroškovno učinkovitost.
Promtail - agent za pošiljanje dnevnikov iz operacijskega sistema v gručo Loki. grafana je orodje za vizualizacijo, ki temelji na podatkih iz Lokija.
Loki je zgrajen na enakih principih kot Prometheus, zaradi česar je zelo primeren za shranjevanje in analizo dnevnikov Kubernetes.
Loki arhitektura
Loki je mogoče izvajati kot en sam proces ali kot več procesov, kar omogoča vodoravno skaliranje.
Deluje lahko tudi kot monolitna aplikacija ali kot mikrostoritev. Izvajanje kot en sam proces je lahko koristno za lokalni razvoj ali za manjše spremljanje. Za industrijsko izvedbo in razširljivo delovno obremenitev je priporočljiva uporaba možnosti mikrostoritve. Poti za pisanje in branje podatkov sta ločeni, tako da jih je mogoče po potrebi natančno prilagoditi in prilagoditi.
Oglejmo si arhitekturo sistema za zbiranje dnevnikov, ne da bi se spuščali v podrobnosti:
In tukaj je opis (arhitektura mikrostoritve):
Sestavine:
Promtail — agent, nameščen na vozliščih (kot niz storitev), odstrani dnevnike iz nalog in dostopa do Kubernetes API za pridobitev metapodatkov, ki bodo označili dnevnike. Nato pošlje dnevnik glavni storitvi Loki. Preslikava metapodatkov podpira ista pravila označevanja kot Prometheus.
Distributer — servisni distributer, ki deluje kot medpomnilnik. Za obdelavo milijonov zapisov pakira dohodne podatke in jih stisne v bloke, ko prispejo. Več ponorov podatkov deluje hkrati, vendar se morajo dnevniki, ki pripadajo enemu dohodnemu podatkovnemu toku, pojaviti samo v enem od njih za vse njegove bloke. To je organizirano v obroč ponorov in zaporednega zgoščevanja. Za toleranco napak in redundanco se to izvede n-krat (3, če ni konfigurirano).
Ingester — servisni sprejemnik. Podatkovni bloki prispejo stisnjeni z dodanimi dnevniki. Ko je blok dovolj velik, se blok odplakne v bazo podatkov. Metapodatki gredo v indeks, podatki iz bloka dnevnika pa v kose (običajno shranjevanje objektov). Po ponastavitvi sprejemnik ustvari nov blok, v katerega bodo dodani novi vnosi.
Kazalo - baza podatkov, DynamoDB, Cassandra, Google BigTable itd.
Koščki — bloki dnevnikov v stisnjeni obliki, običajno shranjeni v objektni shrambi, na primer S3.
Querier - bralna pot, ki opravi vse umazano delo. Pogleda časovni obseg in časovni žig, nato pa pogleda indeks, da najde ujemanja. Nato prebere bloke podatkov in jih filtrira, da dobi rezultat.
Zdaj pa poglejmo vse v akciji.
Namestitev
Najlažji način za namestitev v Kubernetes je uporaba helm. Predvidevamo, da ste ga že namestili in konfigurirali (in tretja verzija!pribl. prevajalec)
Spodaj je primer nadzorne plošče, ki prikazuje podatke iz Prometheusa za meritve Etcd in Loki za dnevnike Etcd pod.
Zdaj pa razpravljajmo o arhitekturi obeh sistemov in primerjajmo njune zmogljivosti med seboj.
Primerjava
Poizvedbeni jezik
Elasticsearch uporablja poizvedbeni jezik Query DSL in Lucene za zagotavljanje zmožnosti iskanja po celotnem besedilu. Je uveljavljen, močan iskalnik s široko podporo operaterjev. Z njim lahko iščete po kontekstu in razvrščate po pomembnosti.
Na drugi strani obroča je LogQL, ki se uporablja v Lokiju, nasledniku PromQL (Prometheus query language). Za filtriranje in izbiro dnevniških podatkov uporablja oznake dnevnika. Možno je uporabiti nekatere operatorje in aritmetiko, kot je opisano tukaj, po zmogljivostih pa zaostaja za jezikom Elastic.
Ker so poizvedbe v Lokiju povezane z oznakami, jih je enostavno povezati z metrikami in posledično z njimi lažje organizirati operativno spremljanje.
Razširljivost
Oba sklada sta vodoravno razširljiva, vendar Loki olajša, ker ima ločene poti za branje in pisanje ter arhitekturo mikrostoritev. Loki lahko prilagodite svojim potrebam in ga lahko uporabite za zelo velike količine podatkov dnevnika.
Več najemno
Večnajemništvo gruče je pogosta tema v kratici OPEX, oba sklada zagotavljata večnajemništvo. Obstaja več za Elasticsearch načine ločevanje odjemalcev: ločen indeks za vsakega odjemalca, usmerjanje na podlagi odjemalca, edinstvena polja odjemalca, iskalni filtri. Loki ima podporo v obliki glave HTTP X-Scope-OrgID.
Stroški
Loki je precej stroškovno učinkovit zaradi dejstva, da ne indeksira podatkov, ampak samo metapodatke. To doseže prihranek pri skladiščenju in pomnilnik (predpomnilnik), saj je shranjevanje objektov cenejše od shranjevanja blokov, ki se uporablja v gručah Elasticsearch.
Zaključek
Sklad EFK se lahko uporablja za različne namene, kar zagotavlja največjo prilagodljivost in s funkcijami bogat vmesnik Kibana za analitiko, vizualizacijo in poizvedbe. Dodatno ga je mogoče izboljšati z zmogljivostmi strojnega učenja.
Sklad Loki je uporaben v ekosistemu Kubernetes zaradi mehanizma za odkrivanje metapodatkov. Enostavno lahko povežete podatke za spremljanje na podlagi časovnih vrst v Grafani in dnevnikih.
Ko gre za stroške in dolgoročno shranjevanje dnevnikov, je Loki odlična vstopna točka v rešitve v oblaku.
Na trgu je več alternativ – nekatere so morda boljše za vas. GKE ima na primer integracijo Stackdriver, ki zagotavlja odlično rešitev za spremljanje. Nismo jih vključili v analizo v tem članku.
Članek so za Habr prevedli in pripravili zaposleni Slurm trening center — intenzivni tečaji, video tečaji in korporativno usposabljanje strokovnjakov v praksi (Kubernetes, DevOps, Docker, Ansible, Ceph, SRE, Agile)