Introducere în OpenTelemetry pentru începători

Să explorăm împreună OpenTelemetry, o metodă standard și neutră, independentă de furnizori, pentru a aduna date telemetrice.

Îmbunătățirea vizibilității într-o aplicație reprezintă o provocare semnificativă pentru dezvoltatori, deoarece presupune capturarea datelor de telemetrie ale aplicației. Conform definiției din Dicționarul Cambridge, telemetria este procesul sau știința colectării de informații despre obiecte aflate la distanță și transmiterea electronică a acestor date către o destinație.

Un singur click sau o sesiune a unui utilizator pe un site web, de exemplu, generează un volum mare de solicitări și de urmăriri care circulă între rețele, microservicii și baze de date.

OpenTelemetry este o platformă de observabilitate, un ansamblu de componente bine structurate, care pot fi utilizate individual sau în combinație. În plus, dezvoltatorii de framework-uri și biblioteci pe care le folosim zilnic au acum o modalitate standard de a integra datele telemetrice în aceste resurse, oferind utilizatorilor finali o perspectivă instantanee asupra funcționării interne a acestor framework-uri.

Pentru a înțelege OpenTelemetry, este esențial să cunoaștem mai întâi conceptul de urmărire distribuită.

Ce reprezintă urmărirea distribuită?

Odată cu creșterea complexității aplicațiilor și implicarea mai multor servicii în gestionarea solicitărilor utilizatorilor și finalizarea tranzacțiilor, devine din ce în ce mai important să înțelegem modul în care solicitările navighează între servicii și cum fiecare serviciu contribuie la latența generală. Acesta este scopul urmăririi distribuite. Ea capturează latența solicitărilor utilizatorilor și timpul necesar fiecărui microserviciu implicat pentru a furniza un răspuns.

Când apare o solicitare din partea unui utilizator, se creează o urmă, care reprezintă totalitatea informațiilor ce descriu modul în care sistemul răspunde la acea solicitare. Urmele sunt alcătuite din intervale, fiecare interval reprezentând o pereche specifică de solicitare și răspuns implicate în procesarea cererii utilizatorului. Intervalul părinte descrie latența percepută de utilizatorul final, iar intervalele copil oferă informații despre modul în care un anumit serviciu a fost apelat în cadrul sistemului distribuit și datele de latență corespunzătoare.

Ce este OpenTelemetry?

OpenTelemetry este un proiect open-source, găzduit de CNCF, care oferă o metodă standardizată de a genera date telemetrice. El a rezultat din fuziunea dintre OpenTracing, un standard pentru crearea datelor de urmărire, și OpenCensus, un standard pentru generarea datelor de tip metrică.

OpenTelemetry oferă un set unic de API-uri, agenți, servicii de colectare și biblioteci pentru a captura urme și metrici distribuite din aplicația dvs. Standardizează modalitatea de colectare a datelor telemetrice și de trimitere a acestora către un backend ales de utilizator. Aceasta oferă o cale de instrumentare neutră față de furnizor și permite flexibilitatea de a schimba backend-ul fără a fi necesară o nouă instrumentare a codului.

Astfel, puteți instrumenta aplicațiile utilizând un agent independent de furnizor, trimițând în același timp metricile și urmele către un furnizor SaaS, cum ar fi Datadog. Dacă doriți ulterior să schimbați furnizorul (de exemplu, de la Datadog la Dynatrace), puteți face acest lucru fără a modifica codul aplicației.

Proiectul OpenTelemetry își propune să ofere un set unitar de API-uri, biblioteci și agenți pentru a captura metrici și urme distribuite din aplicațiile dvs. Acest lucru se aplică în multe limbaje și pe diverse platforme. Proiectul OpenTelemetry include și un serviciu de colectare opțional, precum și un depozit dedicat pentru specificații. Este important de reținut că OpenTelemetry nu este similar cu Jaeger sau Prometheus, care sunt backend-uri observabile, ci facilitează exportul de date către backend-uri open-source și comerciale.

Caracteristicile oferite de OpenTelemetry includ:

  • Standardizare în colectarea datelor telemetrice, permițând organizațiilor să treacă ușor de la un furnizor la altul.
  • O convenție semantică open-source, independentă de furnizor, pentru procesul de colectare a datelor.
  • Un colector care poate fi implementat ca agent, gateway sau în diverse alte moduri.
  • Suport pentru mai multe formate de propagare a contextului, facilitând migrarea.
  • O soluție completă pentru generarea, transmiterea, colectarea, procesarea și exportul datelor telemetrice.
  • Abilitatea de a trimite date către diverse destinații în paralel, cu un control deplin asupra procesului.

Componentele OpenTelemetry

Componentele de bază ale OpenTelemetry sunt:

  • Proto: Această componentă este utilizată pentru a defini interfețe independente de limbaj pentru OpenTelemetry, utilizate de colectori, biblioteci de instrumente, etc.
  • Colector: Colectorii sunt utilizați pentru a primi, procesa și exporta date telemetrice. Această implementare trebuie să fie independentă de furnizor. În mod implicit, toate datele sunt exportate de bibliotecile de instrumente din acest loc.
  • Specificația: Această componentă definește cerințele și așteptările pentru implementarea în diferite limbi, incluzând API-uri, SDK-uri și date. API-ul generează datele telemetrice, iar SDK-urile oferă capacitățile de procesare și export. Datele conțin convenții semantice pentru a asigura compatibilitatea cu diverși furnizori fără modificări ale codului.
  • Bibliotecile de instrumente: Acestea sunt disponibile în mai multe limbi, ca parte a proiectului OpenTelemetry. Sunt utilizate pentru a oferi observabilitate altor biblioteci și aplicații, prin apeluri la API-ul OpenTelemetry.

Arhitectura OpenTelemetry

În esență, OpenTelemetry constă din trei elemente principale:

  • Un set de API-uri pentru instrumentarea aplicațiilor, bibliotecilor și framework-urilor.
  • SDK-ul, care implementează aceste API-uri.
  • Un colector opțional, care poate prelua, agrega și exporta date telemetrice către destinația dorită.

Scopul API-ului este de a permite instrumentarea bibliotecilor și codului aplicației. API-ul are patru secțiuni majore: urmărire, contoare, un context partajat și convenții semantice.

  • API-ul Tracer oferă suport pentru crearea, adnotarea și finalizarea intervalelor.
  • API-ul contorului include diverse instrumente metrice, cum ar fi observatoarele, înregistratoarele de valori și contoarele.
  • API-ul de context permite urmărirea și execuția contextului span, propagându-l atât în interiorul, cât și în exteriorul sistemului.
  • Convențiile semantice definesc reguli și standarde pentru denumirea elementelor precum intervale, atribute, etichete și instrumente metrice, asigurând coerența între implementările în diferite limbi și cu instrumente externe.

În cadrul unui context partajat, implementarea contextului se află între trasor și contor, permițând înregistrărilor de metrice non-observatoare să se desfășoare în contextul unui interval de execuție. O funcție importantă este capacitatea SDK-urilor de a captura intervale exemplare pentru valorile măsurătorilor. Puteți personaliza contextul folosind propagatoare, care permit propagarea contextului span în interiorul și exteriorul sistemului, activând urmărirea distribuită completă.

Colectorul este o parte vitală a arhitecturii OpenTelemetry. Acesta este un serviciu independent care primește, procesează și exportă date telemetrice din diferite surse, inclusiv OpenCensus, Zipkin, Jaeger și protocolul OpenTelemetry. Folosind colectori, puteți exporta intervale și metrici către mai mulți furnizori și sisteme de telemetrie open-source.

Arhitectura OpenTelemetry oferă o soluție completă de telemetrie, gata de utilizare. Totodată, oferă personalizare prin utilizarea multiplelor puncte de extensie, adaptându-se la diverse necesități.

Cum funcționează OpenTelemetry?

În fiecare serviciu din implementarea dvs., se instalează clientul OpenTelemetry, reprezentat de SDK, care, la rândul său, dispune de un API. Cadrele și bibliotecile aplicației folosesc acest API de instrumentare pentru a descrie operațiunile pe care le efectuează. SDK-ul exportă observațiile colectate către un serviciu de pipeline de date numit Colector.

OpenTelemetry are propriul protocol de date, OTLP, dar colectorul poate converti datele OTLP în diferite formate, inclusiv Zipkin, Jaeger și Prometheus. Este important de menționat că OpenTelemetry nu oferă un backend propriu sau instrument de analiză; acest aspect este intenționat, fiind un efort de standardizare. Scopul este de a crea un limbaj universal pentru descrierea operațiunilor computerelor într-un mediu cloud, nu de a standardiza modul în care aceste date sunt analizate. Se speră ca OpenTelemetry va contribui la dezvoltarea domeniului observabilității, permițând noilor instrumente de analiză să apară rapid, fără a fi necesară reconstruirea întregului ecosistem software de telemetrie.

Atunci când se trimit multe date către un sistem, există multe aspecte de luat în considerare. Din fericire, OpenTelemetry are soluții la toate aceste aspecte. În primul rând, este flexibil și compatibil cu mai multe formate de propagare a contextului, ceea ce oferă posibilitatea de a alege chiar și în cadrul unui standard. De exemplu, dacă folosiți formatul context de urmărire w3c sau propagarea b3, acestea sunt standarde distincte care permit serviciilor dvs. să conecteze punctele.

Concluzie

OpenTelemetry adună o varietate de observații, dintre care cele mai importante sunt valorile de urmărire distribuite și resursele sistemului. În loc să le trateze ca semnale separate, OpenTelemetry le integrează și oferă indexare și context, permițându-vă să agregați și să indexați încrucișat toate aceste semnale.

Pe lângă colectarea datelor, OpenTelemetry oferă facilități de procesare și pipeline de date, care vă permit să schimbați formatele, să manipulați datele și să aveți toate instrumentele necesare pentru a construi o conductă robustă de telemetrie într-un sistem modern.

Acestea fiind spuse despre OpenTelemetry, nu ezitați să îl încercați.