La oss utforske OpenTelemetry, en leverandøruavhengig tilnærming til innsamling av telemetridata.
Det er en betydelig utfordring for alle utviklere å forbedre observerbarheten i en applikasjon, da dette krever innhenting av telemetridata. Telemetri, ifølge Cambridge Dictionary, er vitenskapen eller prosessen med å innhente informasjon om objekter på avstand og sende den elektronisk til et bestemt sted.
Et enkelt brukerklick eller en sesjon på et nettsted genererer for eksempel en rekke forespørsler og sporinger som strømmer gjennom nettverk, mikrotjenester og databaser.
OpenTelemetry er en observerbarhetsplattform, bestående av et sett med velfungerende komponenter som kan brukes enten samlet eller enkeltvis. Utviklere av rammeverk og biblioteker som vi benytter daglig, har nå en standardmetode for å integrere telemetridata i disse ressursene. Dette gir brukerne en direkte innsikt i funksjonen under overflaten av disse rammeverkene.
For å forstå OpenTelemetry, er det nødvendig å først forstå begrepet distribuert sporing.
Hva betyr distribuert sporing?
Ettersom applikasjonene våre blir mer komplekse og avhengige av flere tjenester for å håndtere brukertrafikk og gjennomføre transaksjoner, blir det stadig viktigere å forstå hvordan forespørsler beveger seg gjennom tjenestene og hvordan hver tjeneste påvirker den totale ventetiden. Dette er essensen av distribuert sporing. Det fanger opp ventetiden ved brukerforespørsler og tidsforbruket for hver mikrotjeneste i prosessen for å returnere et svar.
Når en brukerforespørsel mottas, ønsker vi å generere et spor, som er en komplett oversikt over systemets respons på forespørselen. Et spor består av spenn, og hver spenn representerer et spesifikt forespørsels- og svarpar som er involvert i behandlingen av brukerforespørselen. Den overordnede spennen beskriver ventetiden sett av sluttbrukeren, mens underordnede spenn benyttes for å forstå hvordan en spesifikk tjeneste i det distribuerte systemet ble kalt og svarte, inkludert informasjon om ventetiden.
Hva er OpenTelemetry?
OpenTelemetry er et åpen kildekode-prosjekt, initiert av CNCF, som tilbyr en standardisert metode for å generere telemetridata. Det ble skapt ved sammenslåing av OpenTracing, en standard for å generere sporingsdata, og OpenCensus, som var en standard for generering av metrikkdata.
OpenTelemetry gir et forenklet sett med API-er, agenter, samletjenester og biblioteker for å fange opp distribuerte spor og beregninger fra applikasjonen din. OpenTelemetry standardiserer hvordan vi samler inn telemetridata og sender dem til en backend etter eget valg. Dette gir deg en leverandøruavhengig vei til instrumentering og gir deg fleksibiliteten til å bytte backend uten å måtte instrumentere koden på nytt.
Dermed kan du instrumentere applikasjonene dine med en leverandøruavhengig agent, mens du likevel sender dine beregninger og spor til en SaaS-leverandør, som Datadog. Hvis du senere ønsker å bytte leverandør, for eksempel fra Datadog til Dynatrace, kan du gjøre dette uten å måtte endre applikasjonskoden.
Målet med OpenTelemetry-prosjektet er å levere et enkelt sett med API-biblioteker og agenter for å fange opp beregninger og distribuerte spor fra applikasjonene dine, uavhengig av språk og plattform. Prosjektet inkluderer også en valgfri samlertjeneste og et eget depot for spesifikasjoner. OpenTelemetry er ikke det samme som Jaeger eller Prometheus, som er observerbare backend-løsninger. Derimot bidrar det til eksport av data til både åpen kildekode og kommersielle backends.
Her er noen av funksjonene OpenTelemetry tilbyr:
- Standardisering av innsamling av telemetridata som organisasjoner kan følge, noe som forenkler overgangen mellom leverandører.
- En leverandøruavhengig, åpen standard for semantiske konvensjoner for datainnsamlingsprosessen.
- En samler som kan distribueres som en agent, gateway eller på andre ulike måter.
- Støtte for flere kontekstformidlingsformater for migrasjon.
- En helhetlig løsning for å generere, sende ut, samle inn, behandle og eksportere telemetridata.
- Mulighet for å sende data til ulike destinasjoner parallelt, med full kontroll.
OpenTelemetry-komponenter
Dette er kjernekomponentene i OpenTelemetry:
- Proto: Denne komponenten definerer språkuavhengige grensesnitttyper for OpenTelemetry, brukt av samlere, instrumenteringsbiblioteker, osv.
- Samler: Samlere mottar, behandler og eksporterer telemetridata. Denne implementeringen skal være leverandøruavhengig. Alle telemetridata eksporteres som standard fra instrumenteringsbibliotekene til dette punktet.
- Spesifikasjon: Denne komponenten beskriver krav og forventninger til implementeringen på forskjellige språk, inkludert API-er, SDK-er og data. API-er genererer telemetridata, og SDK-er implementerer API-ene med funksjoner for prosessering og eksport. Dataene inneholder de semantiske konvensjonene for å støtte alle typer leverandører uten å endre kode.
- Instrumenteringsbiblioteker: Disse bibliotekene er tilgjengelige på flere språk som en del av OpenTelemetry-prosjektet. De brukes til å legge til observerbarhet i andre biblioteker, slik at alle applikasjoner kan observeres ved å kalle OpenTelemetry API-et.
OpenTelemetry-arkitektur
Bilde fra New Relic
I sin enkleste form består OpenTelemetry av tre hovedelementer:
- Et sett API-er for instrumentering av applikasjoner, biblioteker og rammeverk.
- En SDK som implementerer API-ene.
- En valgfri samler som kan ta inn, samle og eksportere telemetridata dit du trenger det.
API-et er designet for å muliggjøre oppretting av instrumentering for både biblioteker og applikasjonskode. API-et består av fire hoveddeler: sporing, målere, en felles kontekst og semantiske konvensjoner.
- Tracer API støtter opprettelse, merknader og fullføring av spenn.
- Meter API består av ulike metriske instrumenter, som observatører, verdiopptakere og tellere.
- Du kan spore og håndtere spennkontekst gjennom Context API, slik at du kan spre konteksten både internt og eksternt i systemet.
- Semantiske konvensjoner inneholder retningslinjer og regler for navngivning, som spenn, attributter, etiketter og metriske instrumenter. Disse konvensjonene sikrer konsistens på tvers av ulike språkimplementeringer og eksterne instrumenter.
Kontekstimplementeringen i felles kontekst knytter sporeren og måleren sammen, og gjør det mulig å registrere metriske verdier uten observatør i forbindelse med en spenn. Dette gjør det mulig for SDK-er å fange opp eksemplariske spenn for metriske verdier. Du kan tilpasse konteksten med hjelp av propagatorer, som muliggjør spredning av spennkonteksten inn og ut av systemet, og dermed muliggjør ekte distribuert sporing.
Samleren er en viktig komponent i OpenTelemetry-arkitekturen. Det er en selvstendig tjeneste som kan motta, behandle og eksportere telemetridata fra ulike kilder, inkludert OpenCensus, Zipkin, Jaeger og OpenTelemetry-protokollen. Samlere lar deg eksportere spenn og beregninger til flere leverandører og telemetrisystemer med åpen kildekode.
OpenTelemetry-arkitekturen tilbyr en komplett telemetriløsning uten videre konfigurasjon. Du kan også tilpasse løsningen ved å bruke flere utvidelsespunkter etter behov.
Hvordan virker OpenTelemetry?
Installer OpenTelemetry-klienten i hver tjeneste i distribusjonen din. Klienten er en SDK, som i sin tur har et API. Applikasjonsrammeverket og bibliotekene dine bruker dette instrumenterings-API-et for å beskrive arbeidet de utfører. SDK-en eksporterer deretter de innsamlede observasjonene til en databehandlingstjeneste som heter Collector.
OpenTelemetry har sin egen dataregler, OTLP, men samleren kan oversette OTLP til ulike formater, som Zipkin, Jaeger og Prometheus. OpenTelemetry tilbyr ikke sin egen backend eller analyseverktøy, fordi det er en standardiseringsinnsats. Målet er å utvikle et universelt språk for å beskrive driften av datamaskiner i et skymiljø, ikke å standardisere analysen av dataene. Det er et håp om at OpenTelemetry vil bidra til å fremme observerbarhet ved å la nye analyseverktøy starte raskt, uten å måtte gjenoppbygge hele telemetriprogramvare-økosystemet.
Når du overfører store mengder data mellom systemer, er det mange faktorer å vurdere. Heldigvis har OpenTelemetry tatt hensyn til alle disse aspektene og har løsninger på dem. For det første er OpenTelemetry fleksibel og håndterer flere kontekstformidlingsformater. Selv om det finnes en standard, gir den valgmuligheter innenfor standarden. Hvis du bruker W3C-sporingskontekstformatet eller B3-spredning, er dette ulike standarder som hjelper tjenestene dine med å koble sammen punktene.
Konklusjon
OpenTelemetry samler opp ulike observasjoner, som distribuerte sporingsmålinger og systemressurser. Istedenfor å behandle disse som separate signaler, fletter OpenTelemetry dem sammen og gir indeksering og kontekst som lar deg samle og krysseindeksere alle disse signalene på backend.
I tillegg til datainnsamlingen tilbyr OpenTelemetry en databehandlings- og pipelining-funksjon som lar deg endre dataformater, manipulere dataene dine og tilpasse alle verktøyene du trenger for å bygge en robust telemetripipeline i et moderne system.
Det var alt om OpenTelemetry, prøv det gjerne!