![Search icon](https://hackernoon.imgix.net/search-new.png?w=19&h=19)
U prošlosti, kada smo govorili o pozadini, obično smo govorili o jednoj velikoj aplikaciji s jednom velikom bazom podataka, a zapisivanje je bilo dovoljno za praćenje. Sada, zahvaljujući tehnologijama poput Kubernetesa , mikroservisi su postali standard. Aplikacije su sve brojnije i rasprostranjenije, a tradicionalno bilježenje više nije dovoljno za otklanjanje pogrešaka i dijagnosticiranje problema u našim aplikacijama.
Izvrsno rješenje za organiziranje nadzora je OpenTelemetry — moderan alat koji se može koristiti za ispravljanje pogrešaka i analizu performansi distribuiranih sustava.
Ovaj je članak namijenjen IT stručnjacima koji žele proširiti svoje znanje o pozadinskoj optimizaciji. U nastavku ćemo detaljno opisati što je OpenTelemetry, njegove ključne koncepte i probleme koje pomaže riješiti. Ako vas zanima kako OpenTelemetry može promijeniti vaš pristup nadzoru i otklanjanju pogrešaka pozadinskih sustava, povećavajući njihovu pouzdanost i učinkovitost — čitajte dalje.
Velike tehnološke tvrtke prvi put su se suočile s izazovom distribuiranog evidentiranja i praćenja u kasnim 2000-ima. Google je 2010. objavio rad,
Godine 2014. pojavio se Kubernetes koji je značajno pojednostavio razvoj mikroservisa i drugih sustava distribuiranih u oblaku. To je dovelo do toga da su se mnoge tvrtke susrele s problemima s distribuiranim zapisivanjem i praćenjem u mikroservisima. Kako bi se standardiziralo distribuirano praćenje, stvoren je standard OpenTracing koji je usvojio CNCF i Googleov projekt OpenCensus.
Godine 2019. projekti OpenTracing i OpenCensus najavili su spajanje pod imenom OpenTelemetry. Ova platforma kombinira najbolje prakse prikupljene tijekom mnogih godina, dopuštajući besprijekornu integraciju praćenja, zapisivanja i metrike u bilo koji sustav, bez obzira na njihovu složenost.
Danas OpenTelemetry nije samo projekt; to je industrijski standard za prikupljanje i prijenos telemetrijskih podataka. Razvija ga i podržava zajednica stručnjaka i vodećih tvrtki na tržištu poput Googlea i Microsofta. Projekt se nastavlja razvijati, stječući nove mogućnosti za pojednostavljenje procesa integracije i korištenja.
OpenTelemetry je opsežan skup praksi i alata koji definiraju koje signale aplikacija može generirati za interakciju s vanjskim svijetom i kako se ti signali mogu prikupiti i vizualizirati za praćenje stanja aplikacija i sustava u cjelini. Tri glavne vrste signala su praćenje, bilježenje i prikupljanje metrike .
**Pogledajmo pobliže svaku komponentu: \
OpenTelemetry uvodi koncept konteksta operacija. Kontekst prvenstveno uključuje atribute kao što su `trace_id`
(identifikator za trenutnu operaciju) i `span_id`
(identifikator za podzahtjev, pri čemu svaki ponovni pokušaj podzahtjeva ima jedinstveni `span_id`
).
Dodatno, kontekst može sadržavati statičke informacije, kao što je naziv čvora gdje je aplikacija postavljena ili naziv okruženja (prod/qa). Ova polja, poznata kao resursi u terminologiji OpenTelemetry, priložena su svakom dnevniku, metrici ili praćenju radi lakšeg pretraživanja. Konteksti također mogu uključivati dinamičke podatke, poput identifikatora trenutne krajnje točke ( `http_path: "GET /user/:id/info"`
), koji se mogu selektivno priložiti grupama dnevnika, metrike ili tragova.
OpenTelemetry konteksti mogu se prenositi između različitih aplikacija pomoću protokola za širenje konteksta. Ovi se protokoli sastoje od skupova zaglavlja koji se dodaju svakom HTTP ili gRPC zahtjevu ili zaglavlja poruka za redove. To omogućuje nizvodnim aplikacijama da rekonstruiraju radni kontekst iz ovih zaglavlja.
Evo nekoliko primjera širenja konteksta:
B3-Propagacija Ovo je skup zaglavlja ( x-b3-*
) izvorno razvijen za Zipkin sustav praćenja. Prilagođen je OpenTracingu i korišten u mnogim alatima i bibliotekama. B3-Propagacija nosi trace_id
/ span_id
i oznaku koja pokazuje je li potrebno uzorkovanje.
Kontekst praćenja W3C Ovaj standard koji je razvila radna grupa W3C objedinjuje različite pristupe širenja konteksta u jedan standard i zadani je u OpenTelemetryju. Dobar primjer primjene ovih standarda je praćenje izvršenja zahtjeva koji prolazi kroz mikroservise implementirane različitim tehnologijama bez ugrožavanja točnosti praćenja i otklanjanja pogrešaka.
Praćenje je proces snimanja i naknadne vizualizacije vremenske trake putanje zahtjeva kroz više mikroservisa.
U vizualizaciji se svaka traka naziva "span" i ima jedinstveni "span_id" . Korijenski raspon se naziva "trag" i ima "trace_id" , koji služi kao identifikator za cijeli zahtjev.
Ova vrsta vizualizacije omogućuje vam sljedeće:
trace_id
i span_id
za upotrebu u drugim signalima.
Unatoč prividnoj jednostavnosti, bilježenje ostaje jedan od najmoćnijih alata za dijagnosticiranje problema. OpenTelemetry poboljšava tradicionalno bilježenje dodavanjem kontekstualnih informacija. Konkretno, ako je aktivno praćenje prisutno, atributi `trace_id` i `span_id` automatski se dodaju u zapisnike, povezujući ih s vremenskom crtom praćenja. Štoviše, atributi dnevnika mogu uključivati statičke informacije iz OpenTelemetry konteksta, kao što je identifikator čvora, kao i dinamičke informacije, kao što je trenutni identifikator HTTP krajnje točke (`http_path: "GET /user/:id"`).
Pomoću `trace_id` možete pronaći zapisnike svih mikroservisa povezanih s trenutnim zahtjevom, dok `span_id` omogućuje razlikovanje podzahtjeva. Na primjer, u slučaju ponovnih pokušaja, zapisnici iz različitih pokušaja imat će različite `span_id`-ove. Korištenje ovih identifikatora omogućuje brzu analizu ponašanja cijelog sustava u stvarnom vremenu, ubrzavajući dijagnostiku problema i povećavajući stabilnost i pouzdanost.
Zbirka metrike pruža kvantitativne podatke o performansama sustava, kao što su latencija, stope pogrešaka, korištenje resursa i više. Praćenje metrike u stvarnom vremenu omogućuje promptno reagiranje na promjene performansi, sprječavanje kvarova i iscrpljenosti resursa te osiguravanje visoke dostupnosti i pouzdanosti aplikacije za korisnike.
Integracija s metričkim sustavima za pohranu i vizualizaciju kao što su Prometheus i Grafana olakšava vizualizaciju ovih podataka, značajno pojednostavljujući praćenje.
OpenTelemetry metrički kolektori kompatibilni su s Prometheus i OpenMetrics standardima, omogućujući jednostavan prijelaz na OpenTelemetry rješenja bez značajnih promjena. OpenTelemetry SDK omogućuje izvoz primjera trace_id zajedno s metrikom, što omogućuje korelaciju metrike s primjerima dnevnika i tragovima.
Zajedno, zapisnici, metrika i praćenje stvaraju sveobuhvatan prikaz stanja sustava:
Uz tri osnovne komponente, OpenTelemetry uključuje koncepte upravljanja uzorkom, prtljagom i operativnim kontekstom.
U sustavima s velikim opterećenjem, količina zapisa i tragova postaje ogromna, zahtijevajući značajne resurse za infrastrukturu i pohranu podataka. Kako bi riješili ovaj problem, standardi OpenTelemetry uključuju uzorkovanje signala — mogućnost izvoza samo dijela tragova i zapisa. Na primjer, možete izvesti detaljne signale iz postotka zahtjeva, dugotrajnih zahtjeva ili zahtjeva za pogreške. Ovaj pristup omogućuje dovoljno uzorkovanje za izradu statistike uz uštedu značajnih resursa.
Međutim, ako svaki sustav samostalno odluči koje će zahtjeve detaljno pratiti, na kraju imamo fragmentirani prikaz svakog zahtjeva. Neki sustavi mogu izvoziti detaljne podatke, dok drugi mogu samo djelomično izvoziti ili ih uopće ne izvoziti.
Kako bi riješili ovaj problem, OpenTelemetryjevi mehanizmi širenja konteksta prenose oznaku uzorkovanja zajedno s `trace_id`/`span_id`. Ovo osigurava da će svi ostali sustavi slijediti isti primjer ako početna usluga koja prima korisnički zahtjev odluči da zahtjev treba detaljno pratiti. Inače bi svi sustavi trebali djelomično ili ne izvoziti signale radi očuvanja resursa. Ovaj se pristup naziva "Uzorkovanje glave" — odluka donesena na početku obrade zahtjeva, bilo nasumično ili na temelju nekih ulaznih atributa.
Osim toga, OpenTelemetry podržava "Tail Sampling", gdje sve aplikacije uvijek detaljno izvoze sve signale, ali postoji međuspremnik. Nakon prikupljanja svih podataka, ovaj međuspremnik odlučuje hoće li zadržati sve podatke ili samo djelomični uzorak. Ova metoda omogućuje reprezentativniji uzorak svake kategorije zahtjeva (uspješan/dug/pogreška), ali zahtijeva dodatno postavljanje infrastrukture.
Mehanizam prtljage omogućuje prijenos proizvoljnih parova ključ-vrijednost zajedno s trace_id
/ span_id
, automatski prolazeći između svih mikroservisa tijekom obrade zahtjeva. Ovo je korisno za prijenos dodatnih informacija potrebnih kroz cijeli put zahtjeva—kao što su korisničke informacije ili postavke okruženja za vrijeme izvođenja.
Primjer zaglavlja za prijenos prtljage prema W3C standardu: tracestate: rojo=00f067aa0ba902b7,congo=t61rcWkgMzE,userId=1c30032v5
Evo nekoliko primjera korištenja prtljage:
Prosljeđivanje informacija o poslovnom kontekstu kao što su userId
, productId
ili deviceId
mogu se proslijediti kroz sve mikroservise. Aplikacije mogu automatski zabilježiti ove informacije, omogućujući pretraživanje dnevnika prema korisničkom kontekstu za izvorni zahtjev.
Postavke specifičnih konfiguracijskih parametara za SDK-ove ili infrastrukturu.
Oznake usmjeravanja Oznake koje pomažu balanserima opterećenja donijeti odluke o usmjeravanju. Tijekom testiranja, neki će zahtjevi možda morati biti preusmjereni na lažne pozadine. Budući da se prtljaga automatski prenosi kroz sve usluge, nema potrebe za stvaranjem dodatnih protokola—samo postavite pravilo na balanseru opterećenja.
Imajte na umu da iako je učinak Prtljage na performanse minimalan, pretjerana upotreba može značajno povećati opterećenje mreže i usluge. Pažljivo odaberite koje podatke stvarno trebate proći kroz Prtljagu kako biste izbjegli probleme s izvedbom.
Implementacija OpenTelemetry na razini infrastrukture uključuje integraciju OpenTelemetry pozadine u arhitekturu aplikacije i konfiguriranje infrastrukture za agregaciju podataka.
Proces se sastoji od četiri faze:
Integracija aplikacije U prvoj fazi, OpenTelemetry SDK-ovi su izravno integrirani u aplikacije za prikupljanje metrike, zapisa i tragova, osiguravajući kontinuirani protok podataka o izvedbi svake komponente sustava.
Konfiguriranje programa Exporters Prikupljeni podaci usmjeravaju se od aplikacija preko programa izvoza do vanjskih sustava za daljnju obradu, kao što su bilježenje, praćenje, praćenje ili analitički sustavi, ovisno o vašim potrebama.
Agregacija i pohranjivanje Ova faza može uključivati normalizaciju podataka, njihovo obogaćivanje dodatnim informacijama i spajanje podataka iz različitih izvora kako bi se stvorio jedinstveni prikaz stanja sustava.
Vizualizacija podataka Konačno, obrađeni podaci se prikazuju kao nadzorne ploče u sustavima kao što su Grafana (za metriku i praćenje) ili Kibana (za zapise). To timovima omogućuje brzu procjenu stanja sustava, prepoznavanje problema i trendova te postavljanje upozorenja na temelju generiranih signala.
Za integraciju s aplikacijom morate povezati odgovarajući OpenTelemetry SDK za programski jezik koji se koristi ili koristiti biblioteke i okvire koji izravno podržavaju OpenTelemetry. OpenTelemetry često implementira naširoko korištena sučelja iz poznatih biblioteka, dopuštajući zamjene ubacivanjem. Na primjer, biblioteka Micrometer obično se koristi za prikupljanje metrika u Java ekosustavu. OpenTelemetry SDK pruža svoje implementacije Micrometer sučelja, omogućujući izvoz metrike bez mijenjanja koda glavne aplikacije. Štoviše, OpenTelemetry nudi implementacije starijih OpenTracing i OpenCensus sučelja, olakšavajući glatku migraciju na OpenTelemetry.
U IT sustavima, OpenTelemetry može postati ključ za budućnost pouzdanih i učinkovitih pozadina. Ovaj alat pojednostavljuje otklanjanje pogrešaka i nadzor te također otvara mogućnosti za dublje razumijevanje performansi i optimizacije aplikacija na novoj razini. Pridružite se OpenTelemetry zajednici kako biste pomogli oblikovati budućnost u kojoj je pozadinski razvoj jednostavniji i učinkovitiji!