Pojďme se zaměřit na OpenTelemetry – standardizovaný přístup k získávání telemetrických dat, který je nezávislý na konkrétním dodavateli.
Zajištění lepší přehlednosti v aplikacích představuje pro každého vývojáře značnou výzvu, neboť je nezbytné shromažďovat telemetrická data z aplikací. Podle Cambridgeského slovníku je telemetrie věda nebo proces sběru informací o vzdálených objektech a jejich elektronického odesílání na určené místo.
Například jediné kliknutí uživatele na webové stránce či jeho celá relace generuje rozsáhlou síť požadavků a sledování napříč sítěmi, mikroslužbami, databázemi a dalšími komponentami.
OpenTelemetry je platforma pro pozorovatelnost, která nabízí soubor pečlivě vytvořených komponent. Tyto komponenty lze využívat společně, nebo individuálně dle potřeby. Vývojáři frameworků a knihoven, které dnes běžně používáme, mají nyní k dispozici standardní metodu, jak do těchto nástrojů integrovat telemetrická data. To koncovým uživatelům umožňuje okamžitý náhled do fungování těchto frameworků.
Pro pochopení OpenTelemetry je klíčové nejprve porozumět konceptu distribuovaného trasování.
Co je to distribuované sledování?
S rostoucí složitostí našich aplikací a zapojením většího počtu služeb do obsluhy uživatelského provozu a dokončování transakcí nabývá na významu schopnost porozumět tomu, jak požadavky procházejí jednotlivými službami a jak každá služba přispívá k celkové latenci. To je přesně to, co distribuované sledování umožňuje. Zaznamenává latenci uživatelských požadavků a dobu, kterou každá mikroslužba na cestě potřebuje k odeslání odpovědi.
Když obdržíme uživatelský požadavek, chceme vytvořit trasování. To je souhrnná informace, která popisuje, jak náš systém na tento požadavek reaguje. Trasování se skládá z rozsahů, kde každý rozsah reprezentuje konkrétní pár požadavku a odpovědi, který se podílí na obsluze uživatelského požadavku. Nadřazený rozsah popisuje latenci, kterou vnímá koncový uživatel. Potomkovský rozsah se využívá pro pochopení způsobu volání konkrétní služby v distribuovaném systému a její odezvy, včetně latence.
Co je OpenTelemetry?
OpenTelemetry je open-source projekt spravovaný CNCF, jehož cílem je poskytovat jednotný způsob pro generování telemetrických dat. Vznikl spojením OpenTracing, což byl standard pro vytváření dat trasování, a OpenCensus, který se zabýval generováním metrických dat.
OpenTelemetry nabízí jednotný soubor API, agentů, sběrných služeb a knihoven pro získávání distribuovaných tras a metrik z vaší aplikace. OpenTelemetry standardizuje způsob, jakým shromažďujeme telemetrická data a posíláme je do zvoleného back-endu. Poskytuje vám cestu k instrumentaci nezávislou na dodavateli, a flexibilitu při změně back-endu bez nutnosti znovu instrumentovat kód.
Vaše aplikace tedy můžete instrumentovat pomocí agenta, který je nezávislý na dodavateli a přesto odesílat metriky a trasování poskytovatelům SaaS služeb, například Datadog. Pokud se rozhodnete změnit poskytovatele (například z Datadog na Dynatrace), můžete tak učinit bez nutnosti jakýchkoliv změn v kódu aplikace.
Projekt OpenTelemetry si klade za cíl nabídnout univerzální sadu knihoven API a agentů pro shromažďování metrik a distribuovaných tras z vašich aplikací. To platí pro mnoho programovacích jazyků a platforem. Součástí projektu OpenTelemetry je i volitelná kolektorová služba a vyhrazené úložiště pro specifikace. Důležité je zdůraznit, že OpenTelemetry není Jaeger nebo Prometheus, což jsou pozorovatelné back-endy. Nicméně OpenTelemetry pomáhá exportovat data do open-source i komerčních back-endů.
Následuje přehled funkcí, které OpenTelemetry nabízí:
- Standardizace sběru telemetrických dat, kterou organizace mohou sledovat, což usnadňuje přechod mezi různými poskytovateli.
- Sémantická konvence pro proces sběru dat, která je nezávislá na dodavateli a je založena na otevřeném standardu.
- Kolektor, který může být nasazen různými způsoby, například jako agent nebo brána.
- Podpora více formátů šíření kontextu pro usnadnění migrace.
- Komplexní řešení pro generování, vysílání, sběr, zpracování a export telemetrických dat.
- Možnost paralelního odesílání dat na různá místa s plnou kontrolou nad celým procesem.
Komponenty OpenTelemetry
Zde jsou klíčové komponenty OpenTelemetry:
- Proto: Tato komponenta slouží k definování typů rozhraní nezávislých na jazyce pro OpenTelemetry, využívaných kolektory, knihovnami pro instrumentaci a dalšími.
- Kolektor: Kolektory slouží k příjmu, zpracování a exportu telemetrických dat. Implementace kolektorů musí být nezávislá na dodavateli. Ve výchozím nastavení jsou veškerá telemetrická data exportována instrumentačními knihovnami právě do tohoto umístění.
- Specifikace: Tato komponenta popisuje požadavky a očekávání pro implementaci v různých jazycích, které zahrnují API, sady SDK a data. API generuje telemetrická data, možnosti zpracování a exportu pro implementaci API, kterou poskytují sady SDK. Data disponují sémantickými konvencemi, které podporují všechny typy dodavatelů, a to bez nutnosti změn v kódu.
- Instrumentační knihovny: Tyto knihovny jsou dostupné v mnoha jazycích jako součást projektu OpenTelemetry. Jsou využívány k zajištění pozorovatelnosti pro další knihovny, aby bylo možné pozorovat všechny aplikace pomocí volání OpenTelemetry API.
Architektura OpenTelemetry
Obrázek převzat z New Relic
V zásadě se OpenTelemetry skládá ze tří hlavních částí:
- Sada API pro instrumentaci aplikací, knihoven a frameworků.
- Sada SDK, která implementuje rozhraní API.
- Volitelný kolektor, který může přijímat, agregovat a exportovat telemetrická data kamkoli je potřeba.
Účelem API je umožnit vytvoření instrumentace pro knihovny a aplikační kód. API má čtyři hlavní části: sledování, měřiče, sdílený kontext a sémantické konvence.
- Tracer API podporuje vytváření, anotování a dokončování úseků.
- Měřicí API se skládá z několika metrických nástrojů. Příkladem těchto nástrojů jsou pozorovatelé, zapisovače hodnot a čítače.
- Můžete sledovat a spouštět kontext rozpětí tím, že povolíte kontextové API a rozšíříte tento kontext uvnitř i vně vašeho systému.
- Všechny pokyny a pravidla pro pojmenování, například pro rozsahy, atributy, štítky a metrické nástroje, jsou obsaženy v sémantických konvencích. Tyto konvence jsou implementovány s cílem zajistit konzistenci v různých jazykových implementacích a pro externí instrumentace.
Ve sdíleném kontextu se nachází implementace kontextu mezi sledovacím zařízením a měřidlem. To umožňuje, aby se všechny metrické záznamy bez pozorovatele vyskytovaly v kontextu prováděcího rozsahu. Funkce, která umožňuje sadám SDK zachytit vzorové rozsahy pro metrické hodnoty. Kontext lze přizpůsobit pomocí propagátorů, které umožňují šíření kontextu rozsahu do a ze systému, což umožňuje skutečné distribuované trasování.
Kolektor je zásadní součástí architektury OpenTelemetry. Jedná se o samostatnou službu, která umí přijímat, zpracovávat a exportovat telemetrická data z různých zdrojů, včetně OpenCensus, Zipkin, Jaeger a protokolu OpenTelemetry. S využitím kolektorů můžete exportovat rozsahy a metriky do více dodavatelů a open source telemetrických systémů.
Architektura OpenTelemetry nabízí kompletní telemetrické řešení, které je dostupné ihned po vybalení. Je však také možné provést přizpůsobení pomocí několika bodů rozšíření, pokud je to nutné.
Jak OpenTelemetry funguje?
Uvnitř každé služby ve vašem nasazení nainstalujte klienta OpenTelemetry. Klientem je SDK; a SDK obsahuje API. Aplikační frameworky a knihovny používají toto instrumentační API k popisu činnosti, kterou vykonávají. SDK následně exportuje shromážděná data do služby pro řetězení dat, která se nazývá Collector.
OpenTelemetry má svůj vlastní datový protokol, OTLP, nicméně kolektor dokáže překládat OTLP do různých formátů, včetně Zipkin, Jaeger a Prometheus. OpenTelemetry primárně neposkytuje vlastní back-end ani analytický nástroj. Důvodem je, že se jedná o snahu o standardizaci. Cílem je vyvinout univerzální jazyk pro popis fungování počítačů v cloudovém prostředí. Cílem není standardizovat, jak se tato data analyzují. Místo toho doufáme, že OpenTelemetry pomůže posunout svět pozorovatelnosti vpřed tím, že umožní rychle vytvářet nové analytické nástroje, bez nutnosti kompletní přestavby celého telemetrického ekosystému.
Při posílání velkého množství dat systémem je třeba vzít v úvahu mnoho faktorů. Naštěstí OpenTelemetry nad těmito aspekty přemýšlel a má řešení pro každou z těchto otázek. OpenTelemetry je flexibilní a zvládá více formátů šíření kontextu. To znamená, že i když existuje standard, stále je v jeho rámci prostor pro volbu. Pokud tedy používáte například kontextový formát trasování w3c nebo šíření b3, jde o různé standardy, které umožňují vašim službám propojit data.
Závěr
OpenTelemetry shromažďuje celou řadu pozorování, přičemž nejdůležitějšími jsou metriky distribuovaného trasování a systémových zdrojů. Namísto toho, aby s nimi zacházel jako se samostatnými signály, je OpenTelemetry vzájemně propojuje a poskytuje indexování a kontext, který vám umožňuje agregovat a křížově indexovat všechny tyto signály v zadní části systému.
Kromě sběru dat poskytuje OpenTelemetry prostředky pro zpracování a řetězení dat. To vám umožňuje měnit formáty dat, manipulovat s daty a využívat všechny nástroje, které potřebujete pro vytvoření robustního telemetrického procesu v moderním systému.
To je vše o OpenTelemetry, neváhejte a vyzkoušejte tento nástroj.