Praćenje je postalo vrlo važna komponenta rastućih rješenja u oblaku kako se povećava složenost distribuiranih sustava. Potrebno je razumjeti njihovo ponašanje. Trebamo skalabilne alate koji mogu prikupiti podatke sa svih usluga - i pružiti stručnjacima jedinstveno sučelje s analizom performansi, demonstracijom pogrešaka, dostupnošću i zapisnicima.
Ti isti alati moraju biti učinkoviti i produktivni. U ovom ćemo članku pogledati dva popularna tehnološka skupa: EFK (Elasticsearch) i PLG (Loki) te ispitati njihove arhitekture i razlike.
EFK stog
Možda ste već čuli za vrlo popularne ELK ili EFK. Stog se sastoji od nekoliko različitih dijelova: Elasticsearch (pohrana objekata), Logstash ili FluentD (prikupljanje i agregacija dnevnika) i Kibana za vizualizaciju.
Tipičan tijek rada izgleda ovako:
Elasticsearch — distribuirano skladištenje objekata s pretraživanjem i analitikom u stvarnom vremenu. Izvrsno rješenje za polustrukturirane podatke kao što su dnevnici. Informacije se spremaju kao JSON dokumenti, indeksiraju u stvarnom vremenu i distribuiraju po čvorovima klastera. Koristi se obrnuti indeks koji sadrži sve jedinstvene riječi i pridružene dokumente za pretraživanje cijelog teksta, koje se pak temelji na tražilici Apache Lucene.
TečnoD je prikupljač podataka koji objedinjuje podatke prilikom prikupljanja i konzumiranja. Pokušava organizirati podatke u JSON-u što je više moguće. Njegova je arhitektura proširiva, ima ih još stotine različitih proširenja, uz podršku zajednice, za sve prilike.
kibana - alat za vizualizaciju podataka za Elasticsearch s raznim dodatnim mogućnostima, na primjer, analiza vremenskih serija, analiza grafikona, strojno učenje i više.
Elasticsearch arhitektura
Podaci klastera Elasticsearch pohranjuju se raspoređeni po svim njegovim čvorovima. Klaster se sastoji od više čvorova radi poboljšanja dostupnosti i otpornosti. Svaki čvor može obavljati sve uloge klastera, ali u velikim scale-out implementacijama, čvorovima se obično dodjeljuju pojedinačni zadaci.
Vrste čvorova klastera:
glavni čvor - upravlja klasterom, potrebna su najmanje tri, jedan je uvijek aktivan;
podatkovni čvor - pohranjuje indeksirane podatke i obavlja različite zadatke s njima;
čvor za unos - organizira cjevovode za transformaciju podataka prije indeksiranja;
Nemojte se iznenaditi ako ne možete pronaći ovu kraticu, jer je poznatija kao Grafana Loki. U svakom slučaju, ovaj skup dobiva na popularnosti jer koristi provjerena tehnička rješenja. Možda ste već čuli za Grafanu, popularni alat za vizualizaciju. Njegovi tvorci, nadahnuti Prometejem, razvili su Loki, horizontalno skalabilan sustav za agregaciju dnevnika visokih performansi. Loki indeksira samo metapodatke, ne i same časopise, što je tehničko rješenje koje omogućuje jednostavno korištenje i isplativost.
Promtail - agent za slanje logova iz operativnog sustava u Loki klaster. grafana je alat za vizualizaciju temeljen na podacima iz Lokija.
Loki je izgrađen na istim principima kao i Prometheus, što ga čini prikladnim za pohranu i analizu Kubernetes dnevnika.
Lokijeva arhitektura
Loki se može pokrenuti kao jedan proces ili kao više procesa, što omogućuje horizontalno skaliranje.
Također može raditi ili kao monolitna aplikacija ili kao mikroservis. Vođenje kao jedinstvenog procesa može biti korisno za lokalni razvoj ili za manji nadzor. Za industrijsku implementaciju i skalabilno radno opterećenje preporučuje se korištenje opcije mikroservisa. Putovi za pisanje i čitanje podataka su odvojeni, tako da se mogu fino podešavati i skalirati prema potrebi.
Pogledajmo arhitekturu sustava za prikupljanje dnevnika bez ulaska u detalje:
A evo i opisa (arhitektura mikroservisa):
Komponente:
Promtail — agent instaliran na čvorovima (kao skup usluga), on uklanja zapise iz zadataka i pristupa Kubernetes API-ju za dobivanje metapodataka koji će označavati zapise. Zatim šalje zapisnik glavnoj usluzi Loki. Mapiranje metapodataka podržava ista pravila označavanja kao Prometheus.
Distributer — servisni distributer koji radi kao međuspremnik. Za obradu milijuna zapisa, pakira dolazne podatke, sažimajući ih u blokove kako stignu. Nekoliko odvodnika podataka radi istovremeno, ali zapisnici koji pripadaju jednom dolaznom toku podataka trebali bi se pojaviti samo u jednom od njih za sve njegove blokove. To je organizirano u prsten odvodnika i sekvencijalnog raspršivanja. Za toleranciju grešaka i redundanciju, ovo se radi n puta (3 ako nije konfigurirano).
Ingester — poslužni prijemnik. Podatkovni blokovi stižu komprimirani s dodanim zapisima. Nakon što je blok dovoljne veličine, blok se ispire u bazu podataka. Metapodaci idu u indeks, a podaci iz bloka dnevnika idu u dijelove (obično pohrana objekata). Nakon resetiranja, prijamnik stvara novi blok u koji će se dodati novi unosi.
indeks - baza podataka, DynamoDB, Cassandra, Google BigTable itd.
Komadići — blokovi dnevnika u komprimiranom obliku, obično pohranjeni u objektnu pohranu, na primjer, S3.
upitnik - put čitanja koji obavlja sav prljavi posao. Gleda vremenski raspon i vremensku oznaku, a zatim gleda indeks kako bi pronašao podudaranja. Zatim čita blokove podataka i filtrira ih kako bi dobio rezultat.
Sada da vidimo sve na djelu.
Instalacija
Najlakši način za instalaciju u Kubernetes je korištenje helma. Pretpostavljamo da ste ga već instalirali i konfigurirali (i treća verzija!cca. prevoditelj)
Ispod je primjer nadzorne ploče koja prikazuje podatke iz Prometheusa za Etcd metriku i Loki za Etcd pod zapisnike.
Raspravljajmo sada o arhitekturi oba sustava i usporedimo njihove mogućnosti.
usporedba
Jezik upita
Elasticsearch koristi Query DSL i jezik upita Lucene za pružanje mogućnosti pretraživanja cijelog teksta. To je etablirana, moćna tražilica sa širokom podrškom operatera. Pomoću njega možete pretraživati po kontekstu i sortirati po relevantnosti.
S druge strane prstena je LogQL, koji se koristi u Lokiju, nasljedniku PromQL-a (Prometheus query language). Koristi oznake dnevnika za filtriranje i odabir podataka dnevnika. Moguće je koristiti neke operatore i aritmetiku kako je opisano здесь, ali po mogućnostima zaostaje za Elastic languageom.
Budući da su upiti u Lokiju povezani s oznakama, lako ih je povezati s metrikom, a kao rezultat toga, s njima je lakše organizirati operativni nadzor.
Skalabilnost
Oba skupa su horizontalno skalabilna, ali Loki to olakšava jer ima odvojene staze za čitanje i pisanje i mikroservisnu arhitekturu. Loki se može prilagoditi vašim potrebama i može se koristiti za vrlo velike količine podataka dnevnika.
Višestanarstvo
Multitenancy klastera je uobičajena tema u OPEX kratici, oba skupa pružaju multitenancy. Postoji nekoliko za Elasticsearch načine odvajanje klijenta: zasebni indeks za svakog klijenta, usmjeravanje temeljeno na klijentu, jedinstvena polja klijenta, filtri pretraživanja. Loki ima podržati u obliku HTTP X-Scope-OrgID zaglavlja.
trošak
Loki je prilično isplativ zbog činjenice da ne indeksira podatke, već samo metapodatke. Ovim se postiže uštede na skladištenju i memorije (cache), budući da je pohrana objekata jeftinija od pohrane blokova, koja se koristi u Elasticsearch klasterima.
Zaključak
EFK stog može se koristiti u razne svrhe, pružajući maksimalnu fleksibilnost i Kibana sučelje bogato značajkama za analitiku, vizualizaciju i upite. Može se dodatno poboljšati mogućnostima strojnog učenja.
Loki stack je koristan u ekosustavu Kubernetes zbog svog mehanizma za otkrivanje metapodataka. Možete jednostavno povezati podatke za praćenje na temelju vremenskih serija u Grafani i zapisima.
Kada je riječ o cijeni i dugoročnom skladištenju dnevnika, Loki je izvrsna ulazna točka u rješenja u oblaku.
Postoji više alternativa na tržištu - neke bi mogle biti bolje za vas. Na primjer, GKE ima integraciju Stackdrivera koja pruža izvrsno rješenje za nadzor. Nismo ih uključili u našu analizu u ovom članku.
Članak su za Habr preveli i pripremili djelatnici Slurm trening centar — intenzivni tečajevi, videotečajevi i korporativna obuka stručnjaka iz prakse (Kubernetes, DevOps, Docker, Ansible, Ceph, SRE, Agile)