Låt oss utforska OpenTelemetry – en leverantörsneutral standard för insamling av telemetri.
Att skapa förbättrad insyn i applikationer är en central utmaning för utvecklare. Det kräver effektiv insamling av telemetri. Enligt Cambridge Dictionary definieras telemetri som vetenskapen eller processen att inhämta information om objekt på avstånd och överföra denna information elektroniskt.
Ett enkelt klick från en användare på en webbplats kan generera flertalet förfrågningar och spårningar som sprider sig över nätverk, mikrotjänster och databaser.
OpenTelemetry är en plattform för observerbarhet som består av modulära komponenter. Dessa kan användas individuellt eller i kombination. Utvecklare av ramverk och bibliotek kan använda en standardiserad metod för att integrera telemetri, vilket ger insikt i bibliotekens interna funktioner.
För att förstå OpenTelemetry är det viktigt att först förstå konceptet distribuerad spårning.
Vad är distribuerad spårning?
När applikationer blir mer komplexa och interagerar med fler tjänster, ökar behovet av att förstå hur förfrågningar navigerar genom systemet och hur varje tjänst påverkar den totala svarstiden. Distribuerad spårning möjliggör detta genom att registrera fördröjningar och svartider för varje mikrotjänst.
När en förfrågan tas emot, skapas ett ”spår” som beskriver systemets respons. Spår består av ”spann”, där varje spann representerar ett specifikt förfrågan- och svarsparr. Det överordnade spannet visar den totala svartiden, medan underordnade spann används för att analysera enskilda tjänsters svartider.
Vad är OpenTelemetry?
OpenTelemetry är ett öppen källkodsprojekt från CNCF som tillhandahåller en standard för att generera telemetri. Projektet är en sammanslagning av OpenTracing, en standard för spårningsdata, och OpenCensus, en standard för mätdata.
OpenTelemetry tillhandahåller ett sammanhängande set av API:er, agenter, samlartjänster och bibliotek för att samla in distribuerade spårningar och mätvärden. OpenTelemetry standardiserar hur telemetri insamlas och skickas till önskad backend. Detta gör instrumentering leverantörsneutralt, vilket ger flexibilitet att ändra backend utan att behöva instrumentera om koden.
Genom att använda en leverantörsagnostisk agent kan mätvärden och spårningar skickas till en SaaS-leverantör som Datadog. Om en byte till en annan leverantör, exempelvis Dynatrace, behövs, kan det genomföras utan att koden behöver modifieras.
OpenTelemetry syftar till att skapa ett universellt set av API-bibliotek och agenter för insamling av mätvärden och distribuerade spårningar. Detta fungerar över en mängd olika språk och plattformar. Projektet inkluderar även en valfri samlartjänst och en dedikerad specifikationsförvaring. OpenTelemetry är inte ett verktyg som Jaeger eller Prometheus, utan används för att exportera data till både öppen källkod och kommersiella backend-system.
OpenTelemetry erbjuder följande funktioner:
- Standardisering av telemetriinsamling, vilket underlättar leverantörsbyte.
- En leverantörsagnostisk semantisk konvention för datainsamling.
- Samlare som kan användas som agenter eller gateways.
- Stöd för flera format för kontextspridning.
- En komplett lösning för generering, överföring, insamling, bearbetning och export av telemetridata.
- Möjlighet att parallellt skicka data till olika destinationer med full kontroll.
OpenTelemetry-komponenter
Följande är de centrala komponenterna i OpenTelemetry:
- Proto: Används för att definiera språkoberoende gränssnittstyper för OpenTelemetry, såsom för samlare och instrumenteringsbibliotek.
- Samlare: Används för att ta emot, bearbeta och exportera telemetridata. Implementeringen ska vara leverantörsagnostisk. Telemetridata exporteras som standard via instrumenteringsbibliotek till denna komponent.
- Specifikation: Beskriver kraven och förväntningarna på implementeringen på olika språk, inklusive API:er, SDK:er och data. API:er genererar telemetridata och SDK:er tillhandahåller möjligheter för bearbetning och export. Datadelen innehåller semantiska konventioner för att stödja olika leverantörer utan kodändring.
- Instrumentbibliotek: Tillgängliga på många språk som en del av OpenTelemetry-projektet. Ger observerbarhet till andra bibliotek och applikationer genom anrop till OpenTelemetry API.
OpenTelemetry-arkitektur
Bild från New Relic
På övergripande nivå består OpenTelemetry av tre huvuddelar:
- API:er för instrumentering av applikationer, bibliotek och ramverk.
- SDK som implementerar API:erna.
- En valfri samlare för insamling, aggregering och export av telemetridata.
Syftet med API:et är att underlätta skapandet av instrumentering för bibliotek och applikationskod. API:et är uppdelat i fyra huvudsektioner: spårning, mätare, delad kontext och semantiska konventioner.
- Tracer API stöder skapandet, kommenteringen och avslutandet av spann.
- Mätarens API består av metriska instrument som observatörer, mätare och räknare.
- Kontext-API:et möjliggör spårning och hantering av spannkontext internt och externt.
- De semantiska konventionerna beskriver riktlinjer för namngivning av spann, attribut, etiketter och metriska instrument, vilket säkerställer överensstämmelse mellan olika språkimplementeringar.
I en delad kontext ligger kontextimplementeringen mellan spåraren och mätaren, vilket möjliggör metriska inspelningar inom ramen för ett pågående spann. Detta gör det möjligt för SDK:er att registrera exemplariska spann för metriska värden. Propagatorer används för att anpassa kontexten och sprida spannkontexten in och ut ur systemet, vilket möjliggör distribuerad spårning.
Samlaren är en fristående tjänst som tar emot, bearbetar och exporterar telemetridata från olika källor, inklusive OpenCensus, Zipkin, Jaeger och OpenTelemetry-protokollet. Samlaren möjliggör export av spann och mätvärden till flera leverantörer och telemetrisystem med öppen källkod.
OpenTelemetry-arkitekturen erbjuder en komplett telemetrilösning och kan anpassas efter behov genom flera förlängningspunkter.
Hur fungerar OpenTelemetry?
En OpenTelemetry-klient installeras i varje tjänst i distributionen. Klienten, som är SDK, har ett API. Applikationer och bibliotek använder detta API för att beskriva sitt arbete. SDK:n exporterar sedan de insamlade observationerna till en databearbetningstjänst som kallas Collector.
OpenTelemetry använder sitt eget dataprotokoll, OTLP, men samlaren kan översätta OTLP till olika format, inklusive Zipkin, Jaeger och Prometheus. OpenTelemetry tillhandahåller inte ett eget backend- eller analysverktyg, då fokus ligger på standardisering. Målet är att skapa ett universellt språk för att beskriva hur datorer fungerar i en molnmiljö, snarare än att standardisera dataanalysen. Det förväntas att OpenTelemetry kommer att bidra till framsteg inom observerbarhet genom att möjliggöra snabb utveckling av nya analysverktyg.
OpenTelemetry är flexibelt och hanterar flera format för kontextspridning. Detta innebär att även om det finns en standard, finns det valmöjligheter inom standarden. Till exempel, format som w3c-spårningskontext eller b3-utbredning, gör det möjligt för tjänster att koppla samman olika punkter.
Slutsats
OpenTelemetry samlar in olika typer av observationer, men de viktigaste är distribuerade spårningsmått och systemresurser. Dessa behandlas inte som separata signaler, utan sammanflätas för att ge indexering och sammanhang, vilket möjliggör aggregering och korsindexering.
Utöver datainsamling, tillhandahåller OpenTelemetry databearbetning och pipelining, som tillåter ändring av dataformat, hantering av data och verktyg för att bygga en robust telemetripipeline i moderna system.
Detta är en översikt över OpenTelemetry, så nu är det dags att testa verktyget.