Увод у ОпенТелеметри за почетнике

U ovom članku, osvrnućemo se na OpenTelemetry, standardizovani pristup prikupljanju telemetrijskih podataka, koji ne zavisi od konkretnog proizvođača.

Poboljšanje vidljivosti unutar aplikacije predstavlja značajan izazov za svakog programera, s obzirom na potrebu da se prikupe telemetrijski podaci aplikacije. Prema definiciji Kembridž rečnika, telemetrija je naučna disciplina ili proces prikupljanja informacija o udaljenim objektima i njihovog elektronskog prenosa.

Na primer, jedan klik korisnika ili sesija na web sajtu rezultira generisanjem velikog broja zahteva i podataka o praćenju koji cirkulišu kroz mreže, mikroservise, baze podataka i slično.

OpenTelemetry predstavlja platformu za posmatranje, skup sofisticiranih komponenti koje se mogu koristiti zajedno ili pojedinačno. Štaviše, razvojni programeri okvira i biblioteka koje svakodnevno koristimo sada imaju standardizovan način za integrisanje telemetrijskih podataka u te biblioteke i okvire, pružajući krajnjim korisnicima bogat uvid u funkcionisanje tih okvira „ispod haube“.

Da bismo u potpunosti razumeli OpenTelemetry, neophodno je prvo razjasniti koncept distribuiranog praćenja.

Šta je distribuirano praćenje?

Kako aplikacije postaju sve složenije i uključuju sve više servisa u obradi korisničkog saobraćaja i finalizaciji transakcija, sve je važnije razumeti kako zahtevi prolaze kroz naše servise i kako svaki servis doprinosi ukupnom kašnjenju. Distribuirano praćenje upravo to i omogućava. Ono beleži kašnjenje korisničkih zahteva i vreme koje je potrebno svakom mikroservisu na putanji da vrati odgovor.

Kada stigne korisnički zahtev, želimo da kreiramo „trag“, odnosno sveobuhvatne informacije koje opisuju kako naš sistem reaguje na taj zahtev. Tragovi se sastoje od „raspona“, gde svaki raspon označava specifičan par zahteva i odgovora koji su uključeni u obradu korisničkog zahteva. Roditeljski raspon opisuje kašnjenje kako ga vidi krajnji korisnik. Dok se dečiji raspon koristi da se razume kako je određen servis pozvan u okviru distribuiranog sistema i odgovorio, sa svojim informacijama o kašnjenju.

Šta je OpenTelemetry?

OpenTelemetry je projekat otvorenog koda, pod okriljem CNCF-a, koji pruža standardni pristup za generisanje telemetrijskih podataka. Nastao je spajanjem OpenTracing standarda za generisanje podataka o tragovima i OpenCensus standarda za generisanje metričkih podataka.

OpenTelemetry nudi jedinstven skup API-ja, agenata, usluga za prikupljanje i biblioteka za snimanje distribuiranih tragova i metrika iz vaše aplikacije. On standardizuje način prikupljanja telemetrijskih podataka i njihovog slanja na backend po vašem izboru. Ovo vam pruža neutralan put ka instrumentaciji i omogućava fleksibilnost promene backenda bez potrebe za ponovnom instrumentacijom koda.

Dakle, možete instrumentirati svoje aplikacije koristeći agenta koji je nezavisan od dobavljača, dok i dalje šaljete metrike i tragove SaaS dobavljaču kao što je Datadog. Ako kasnije odlučite da promenite dobavljača (npr. sa Datadog-a na Dynatrace), možete to učiniti bez izmene koda aplikacije.

Projekat OpenTelemetry ima za cilj da obezbedi jedinstven skup biblioteka API-ja i agenata za prikupljanje metrika i distribuiranih tragova iz vaših aplikacija. Ovo važi za mnoge programske jezike i platforme. Projekat OpenTelemetry takođe uključuje opcionalnu uslugu za prikupljanje podataka i ima posebnu repozitorijum za specifikacije. Važno je napomenuti da OpenTelemetry nije Jaeger ili Prometheus, koji su backendovi za vizualizaciju podataka. On pomaže pri izvozu podataka u open-source i komercijalne pozadine.

Ispod su navedene funkcionalnosti koje OpenTelemetry pruža:

  • Standardizacija prikupljanja telemetrijskih podataka koje organizacije mogu pratiti, što olakšava prelazak između dobavljača.
  • Semantička konvencija otvorenog standarda koja je nezavisna od dobavljača za proces prikupljanja podataka.
  • Kolektor koji se može primeniti kao agent ili gateway ili na više različitih načina.
  • Podrška za više formata za širenje konteksta radi migracije.
  • Kompletno rešenje za generisanje, emitovanje, prikupljanje, obradu i izvoz podataka telemetrije.
  • Mogućnost paralelnog slanja podataka na različite destinacije uz potpunu kontrolu.

Komponente OpenTelemetry

U nastavku su navedene osnovne komponente OpenTelemetry:

  • Proto: Ova komponenta se koristi za definisanje kolektora, biblioteka za instrumentaciju, itd. koji predstavljaju tipove interfejsa nezavisnih od programskog jezika za OpenTelemetry.
  • Kolektor: Kolektori se koriste za prijem, obradu i izvoz telemetrijskih podataka. Ova implementacija kolektora mora biti nezavisna od dobavljača. Po defaultu, sve telemetrijske podatke biblioteke za instrumentaciju izvoze na ovu lokaciju.
  • Specifikacija: Ova komponenta opisuje zahteve i očekivanja implementacije na različitim jezicima, a uključuje API-je, SDK-ove i podatke. API generiše telemetrijske podatke, uz mogućnost obrade i izvoza za implementaciju API-ja koje pružaju SDK-ovi. Podaci imaju semantičke konvencije za podršku svih tipova dobavljača bez izmene koda.
  • Biblioteke za instrumentaciju: One su dostupne na više programskih jezika kao deo OpenTelemetry projekta. Ove biblioteke se koriste kako bi se obezbedila vidljivost za druge biblioteke, tako da sve aplikacije koje se posmatraju upućuju pozive OpenTelemetry API-ju.

Arhitektura OpenTelemetry

Slika preuzeta sa New Relic

Na visokom nivou, OpenTelemetry se sastoji od tri glavna dela:

  • Skup API-ja za instrumentiranje aplikacija, biblioteka i okvira.
  • SDK implementira API-je.
  • Opcioni kolektor može da unese, agregira i izveze telemetrijske podatke gde god su vam potrebni.

Svrha API-ja je da omogući kreiranje instrumentacije za biblioteke i kod aplikacije. API ima četiri glavna odeljka: praćenje, metrike, zajednički kontekst i semantičke konvencije.

  • Tracer API podržava kreiranje, označavanje i dovršavanje raspona.
  • Merač API se sastoji od više metričkih instrumenata. Primeri ovih instrumenata su posmatrači, registratori vrednosti, brojači.
  • Možete pratiti i izvršavati raspon kontekst omogućavanjem kontekstualnog API-ja i propagiranjem tog konteksta unutar i izvan vašeg sistema.
  • Sva uputstva i pravila za imenovanje, kao što su imenovanje raspona, atributa, oznaka i metričkih instrumenata, nalaze se u semantičkim konvencijama. Ove konvencije se primenjuju da bi se osigurala konzistentnost u različitim implementacijama jezika i za spoljne instrumente.

U zajedničkom kontekstu, implementacija konteksta leži između tragača i merača i omogućava da se sva metrička očitavanja, koja nisu posmatrači, odvijaju u kontekstu izvršnog raspona. Funkcija koja omogućava paketima za razvoj softvera da snimaju primerene raspone za metričke vrednosti. Možete prilagoditi kontekst uz pomoć propagatora, koji omogućavaju širenje konteksta raspona u okviru sistema i izvan njega, čime se postiže istinsko distribuirano praćenje.

Kolektor je suštinski deo OpenTelemetry arhitekture. To je samostalna usluga koja može da prima, obrađuje i izvozi telemetrijske podatke iz različitih izvora, uključujući OpenCensus, Zipkin, Jaeger i OpenTelemetry protokol. Korišćenjem kolektora, možete da izvezete raspone i metrike kod više dobavljača i telemetrijskih sistema otvorenog koda.

Arhitektura OpenTelemetry nudi kompletno rešenje za telemetriju. Takođe možete izvršiti prilagođavanja koristeći više tačaka proširenja prema potrebi.

Kako funkcioniše OpenTelemetry?

Instalirajte OpenTelemetry klijenta unutar svakog servisa u vašoj implementaciji. Klijent je SDK; SDK, zauzvrat, ima API. Vaši okviri aplikacija i biblioteke koriste ovaj API za instrumentaciju da opišu posao koji obavljaju. SDK zatim izvozi prikupljena opažanja u servis za isporuku podataka pod nazivom Kolektor.

OpenTelemetry ima svoj protokol podataka, OTLP, ali kolektor može da prevede OTLP u različite formate, uključujući Zipkin, Jaeger i Prometheus. Značajno je da OpenTelemetry ne pruža sopstveni backend alat ili alat za analizu; to je zato što je to napor standardizacije u srcu OpenTelemetry. Cilj je da se dođe do univerzalnog jezika za opisivanje operacija računara u okruženju oblaka. Cilj nije da standardizujemo način na koji analiziramo te podatke. Umesto toga, nadamo se da će OpenTelemetry pomoći da se svet posmatranja unapredi tako što će omogućiti novim alatima za analizu da brzo počnu bez obnavljanja čitavog ekosistema softvera za telemetriju.

Kada šaljete mnogo podataka širom sistema, mnogo toga treba razmotriti. Srećom, OpenTelemetry je razmislio o svim tim pitanjima i ima rešenja za svako od njih. Prvo i najvažnije, OpenTelemetry je fleksibilan i podržava više formata za širenje konteksta. To znači da, iako postoji standard, ipak postoji mogućnost izbora unutar tog standarda. Dakle, ako koristite nešto poput w3c formata konteksta praćenja ili b3 propagacije, ovo su različiti standardi unutar standarda koji omogućavaju vašim servisima da povežu tačke.

Zaključak

OpenTelemetry prikuplja različita opažanja, a distribuirane metrike praćenja i sistemski resursi su najvažniji. Umesto da ih tretira kao zasebne signale, OpenTelemetry ih spaja i obezbeđuje indeksiranje i kontekst koji vam omogućava da agregirate i unakrsno indeksirate sve ove signale na backendu.

Pored prikupljanja podataka, OpenTelemetry pruža mogućnost obrade podataka i cevovoda koji vam omogućavaju da menjate formate podataka, manipulišete podacima i imate sve alate koji su vam potrebni za izgradnju robusnog telemetrijskog cevovoda u modernom sistemu.

Dakle, to je bilo sve o OpenTelemetry, samo napred i isprobajte ovaj alat.