![Search icon](https://hackernoon.imgix.net/search-new.png?w=19&h=19)
Iraganean, backend-ari buruz hitz egiten genuenean, normalean datu-base bakar eta handi batekin aplikazio handi bat aipatzen genuen, eta saioa egitea nahikoa zen monitorizazioa egiteko. Orain, Kubernetes bezalako teknologiei esker, mikrozerbitzuak estandar bihurtu dira. Aplikazioak ugariagoak eta banatuagoak dira, eta ohiko erregistroa ez da nahikoa gure aplikazioetako arazoak arazketa eta diagnostikatzeko.
Monitorizazioa antolatzeko irtenbide bikaina OpenTelemetry da, sistema banatuen arazketa eta errendimendua aztertzeko erabil daitekeen tresna-kit modernoa.
Artikulu hau backend optimizazioan ezagutzak zabaldu nahi dituzten IT profesionalei zuzenduta dago. Jarraian, OpenTelemetry zer den, bere funtsezko kontzeptuak eta konpontzen laguntzen duen arazoak zehaztuko ditugu. OpenTelemetry-k backend sistemak monitorizatzeko eta arazketarako zure ikuspegia nola alda dezakeen interesatzen bazaizu, haien fidagarritasuna eta eraginkortasuna areagotuz, jarraitu irakurri.
Enpresa teknologiko handiek 2000ko hamarkadaren amaieran aurre egin zioten lehen aldiz banatutako erregistro eta trazaduraren erronkari. 2010ean, Google-k paper bat argitaratu zuen,
2014an, Kubernetes sortu zen, mikrozerbitzuen eta hodeian banatutako beste sistema batzuen garapena nabarmen erraztuz. Horrek enpresa askok mikrozerbitzuetan banatutako erregistroa eta trazadura arazoak topatzea ekarri zuen. Banatutako trazamendua estandarizatzeko, CNCFk onartutako OpenTracing estandarra eta Google-ren OpenCensus proiektua sortu ziren.
2019an, OpenTracing eta OpenCensus proiektuek bat-egite bat iragarri zuten OpenTelemetry izenarekin. Plataforma honek urte askotan pilatutako jardunbide onenak konbinatzen ditu, trazadura, erregistroa eta neurketak edozein sistematan integratzea ahalbidetuz, haien konplexutasuna edozein dela ere.
Gaur egun, OpenTelemetry ez da soilik proiektu bat; telemetria datuak biltzeko eta transmititzeko industria estandarra da. Espezialisten eta merkatuan lider diren enpresen komunitate batek garatu eta onartzen du Google eta Microsoft bezalakoak. Proiektuak eboluzionatzen jarraitzen du, integrazio eta erabilera prozesua errazteko gaitasun berriak lortuz.
OpenTelemetry praktiken eta tresnen multzo oso bat da, aplikazio batek kanpoko munduarekin elkarreragiteko zein seinale sor ditzakeen definitzen duena, eta seinale horiek nola bildu eta ikus daitezkeen aplikazioen eta sistema osoaren egoera kontrolatzeko. Hiru seinale mota nagusiak trazadura, erregistroa eta metrika bilketa dira.
** Ikus ditzagun osagai bakoitza gertutik: \
OpenTelemetry operazio testuinguruen kontzeptua aurkezten du. Testuinguru batek `trace_id`
(uneko eragiketaren identifikatzailea) eta `span_id`
(azpi-eskaera baten identifikatzailea, azpi-eskaera baten berriro saiakera bakoitzak `span_id`
esklusibo bat duelarik) bezalako atributuak biltzen ditu batez ere.
Gainera, testuinguru batek informazio estatikoa izan dezake, hala nola aplikazioa inplementatzen den nodoaren izena edo ingurunearen izena (prod/qa). Eremu hauek, OpenTelemetry terminologian baliabide gisa ezagutzen direnak, erregistro, metrika edo arrasto bakoitzari eransten zaizkio bilaketa errazteko. Testuinguruek datu dinamikoak ere izan ditzakete, uneko amaierako puntuaren identifikatzailea adibidez ( `http_path: "GET /user/:id/info"`
), zeinak erregistro, metrika edo arrastoen taldeei selektiboki erantsi ahal izateko.
OpenTelemetry testuinguruak aplikazio ezberdinen artean pasa daitezke testuingurua hedatzeko protokoloak erabiliz. Protokolo hauek HTTP edo gRPC eskaera guztietan edo ilarentzako mezuen goiburuetan gehitzen diren goiburu multzoek osatzen dute. Horri esker, beherako aplikazioek goiburu horietatik eragiketa-testuingurua berreraiki dezakete.
Hona hemen testuinguruaren hedapenaren adibide batzuk:
B3-Propagazioa Hau goiburu multzo bat da ( x-b3-*
) jatorriz Zipkin trazatze sistemarako garatua. OpenTracing-era egokitu zen eta tresna eta liburutegi askok erabili zuten. B3-Propagazioak trace_id
/ span_id
eta laginketa beharrezkoa den ala ez adierazten duen bandera darama.
W3C Trace Context W3C lan-taldeak garatua, estandar honek testuinguruaren hedapeneko hainbat ikuspegi estandar bakar batean bateratzen ditu eta lehenetsia da OpenTelemetry-n. Estandar hauek aplikatzearen adibide on bat teknologia ezberdinekin inplementatutako mikrozerbitzuetatik igarotzen den eskaera baten exekuzioaren jarraipena egitea da, monitorizazioa eta arazketa zehaztasuna arriskuan jarri gabe.
Trazapena mikrozerbitzu anitzen bidez eskaera baten ibilbidearen denbora-lerroa grabatzeko eta, ondoren, bistaratzeko prozesua da.
Bistaratzean, barra bakoitzari "span" deitzen zaio eta "span_id" bakarra du. Erro-tartea "arrastoa" deitzen zaio eta "trace_id" bat du, eskaera osoaren identifikatzaile gisa balio duena.
Ikuspegi mota honek aukera ematen dizu:
trace_id
eta span_id
sortzen ditu beste seinale batzuetan erabiltzeko.
Itxurazko sinpletasuna izan arren, erregistroak arazoak diagnostikatzeko tresnarik indartsuenetako bat izaten jarraitzen du. OpenTelemetry-k ohiko erregistroa hobetzen du testuinguruko informazioa gehituz. Zehazki, arrasto aktibo bat badago, `trace_id` eta `span_id` atributuak automatikoki gehitzen dira erregistroetan, trazako denbora-lerroarekin lotuz. Gainera, erregistro-atributuek OpenTelemetry testuinguruko informazio estatikoa izan dezakete, hala nola nodoaren identifikatzailea, baita informazio dinamikoa ere, uneko HTTP amaierako puntuaren identifikatzailea (`http_path: "GET /user/:id"`).
`trace_id` erabiliz, uneko eskaerarekin lotutako mikrozerbitzu guztietako erregistroak aurki ditzakezu, eta `span_id`-ek azpi-eskaerak bereizteko aukera ematen dizu. Adibidez, berriro saiakeren kasuan, saiakera ezberdinetako erregistroek `span_id`s desberdinak izango dituzte. Identifikatzaile hauek erabiltzeak sistema osoaren portaera azkar aztertzea ahalbidetzen du denbora errealean, arazoen diagnostikoa bizkortuz eta egonkortasuna eta fidagarritasuna hobetuz.
Neurri-bilketak sistemaren errendimenduari buruzko datu kuantitatiboak eskaintzen ditu, hala nola latentzia, errore-tasak, baliabideen erabilera eta abar. Neurrien denbora errealeko monitorizazioak errendimendu-aldaketei berehala erantzuteko aukera ematen du, hutsegiteak eta baliabideak agortzea saihesteko eta erabiltzaileentzako aplikazioaren erabilgarritasun eta fidagarritasun handia bermatzeko.
Prometheus eta Grafana bezalako biltegiratze- eta bistaratze-sistem metrikoekin integratzeak datu hauek bistaratzea errazten du, monitorizazioa nabarmen erraztuz.
OpenTelemetry metrika-biltzaileak Prometheus eta OpenMetrics estandarrekin bateragarriak dira, eta OpenTelemetry soluzioetarako trantsizio erraza ahalbidetzen dute aldaketa garrantzitsurik gabe. OpenTelemetry SDK-k trace_id adibideak metrikekin batera esportatzeko aukera ematen du, metrikak log-adibideekin eta arrastoekin erlazionatzea posible eginez.
Elkarrekin, erregistroek, metrikek eta trazatzeak sistemaren egoeraren ikuspegi osoa sortzen dute:
Oinarrizko hiru osagaiez gain, OpenTelemetry-k Sampling, Baggage eta eragiketa testuinguruaren kudeaketa kontzeptuak barne hartzen ditu.
Karga handiko sistemetan, erregistroen eta arrastoen bolumena izugarria bihurtzen da, eta azpiegiturarako eta datuak biltegiratzeko baliabide handiak behar dira. Arazo honi aurre egiteko, OpenTelemetry estandarrek seinaleen laginketa barne hartzen dute: arrastoen eta erregistroen zati bat soilik esportatzeko gaitasuna. Adibidez, seinale zehatzak esporta ditzakezu eskaeren, iraupen luzeko eskaeren edo akatsen eskaeren ehuneko batetik. Ikuspegi honek laginketa nahikoa ahalbidetzen du estatistikak eraikitzeko baliabide garrantzitsuak aurrezten diren bitartean.
Hala ere, sistema bakoitzak modu independentean erabakitzen badu zehatz-mehatz kontrolatu beharreko eskaerak, eskaera bakoitzaren ikuspegi zatikatua lortzen dugu. Sistema batzuek datu zehatzak esporta ditzakete, eta beste batzuek partzialki esportatu edo ez esportatu.
Arazo hau konpontzeko, OpenTelemetry-ren testuingurua hedatzeko mekanismoek laginketa-bandera bat igortzen dute `trace_id`/`span_id`-ekin batera. Horrek bermatzen du erabiltzailearen eskaera jasotzen duen hasierako zerbitzuak eskaera zehatz-mehatz kontrolatu behar dela erabakitzen badu, gainerako sistema guztiek berdin jarraituko dutela. Bestela, sistema guztiek partzialki edo ez esportatu beharko lituzkete seinaleak baliabideak kontserbatzeko. Ikuspegi honi "Buruaren laginketa" deritzo; eskaera prozesatzeko hasieran hartutako erabakia, ausaz edo sarrerako atributu batzuetan oinarrituta.
Gainera, OpenTelemetry-k "Tail Sampling" onartzen du, non aplikazio guztiek beti seinale guztiak zehatz-mehatz esportatzen dituzten, baina tarteko buffer bat dagoen. Datu guztiak bildu ondoren, buffer honek erabakitzen du datu osoa gorde edo lagin partziala bakarrik gorde. Metodo honek eskaera-kategoria bakoitzaren lagin adierazgarriagoa ahalbidetzen du (arrakastatsua/luzea/errorea), baina azpiegitura osagarriak konfiguratu behar ditu.
Baggage mekanismoari esker, gako-balio bikote arbitrarioak trace_id
/ span_id
ekin batera transmititu daitezke, eskaera prozesatzen bitartean mikrozerbitzu guztien artean automatikoki pasatuz. Hau erabilgarria da eskaera-bidean zehar beharrezkoa den informazio gehigarria transmititzeko, hala nola erabiltzailearen informazioa edo exekuzio-ingurunearen ezarpenak.
W3C estandarraren arabera ekipajea transmititzeko goiburu baten adibidea: tracestate: rojo=00f067aa0ba902b7,congo=t61rcWkgMzE,userId=1c30032v5
Hona hemen Ekipajearen erabileraren adibide batzuk:
Negozio-testuinguruaren informazioa, hala nola userId
, productId
edo deviceId
mikrozerbitzu guztietatik pasa daiteke. Aplikazioek automatikoki erregistratu dezakete informazio hori, jatorrizko eskaera erabiltzailearen testuinguruaren arabera erregistro bilaketak egiteko aukera emanez.
Konfigurazio-parametro espezifikoak SDK edo azpiegituren ezarpenak.
Bideratze-markak Karga-orekatzaileei bideratze-erabakiak hartzen laguntzen dieten banderak. Probetan zehar, baliteke eskaera batzuk backend simulazioetara bideratu behar izatea. Ekipajea zerbitzu guztietatik automatikoki transmititzen denez, ez dago protokolo gehigarririk sortu beharrik, karga-orekatzailean arau bat konfiguratu besterik ez dago.
Kontuan izan Ekipajearen errendimenduaren eragina txikia den arren, gehiegizko erabilerak sarearen eta zerbitzuen karga nabarmen handitu dezakeela. Aukeratu arretaz Bagajetik benetan zer datu pasatu behar dituzun errendimendu-arazoak saihesteko.
OpenTelemetry azpiegitura mailan ezartzeak OpenTelemetry backend-ak aplikazioen arkitekturan integratzea eta datuak batzeko azpiegitura konfiguratzea dakar.
Prozesua lau fase ditu:
Aplikazioen integrazioa Lehenengo fasean, OpenTelemetry SDK-ak aplikazioetan zuzenean integratzen dira neurketak, erregistroak eta arrastoak biltzeko, sistemaren osagai bakoitzaren errendimenduari buruzko datu-fluxu etengabea bermatuz.
Esportatzaileak konfiguratzea Bildutako datuak aplikazioetatik esportatzaileen bidez kanpoko sistemetara bideratzen dira gehiago prozesatzeko, hala nola erregistroa, jarraipena, jarraipena edo analisi-sistemetara, zure beharren arabera.
Agregazioa eta biltegiratzea Etapa honek datuak normalizatzea, informazio gehigarriarekin aberastea eta iturri ezberdinetako datuak bateratzea izan daiteke, sistemaren egoeraren ikuspegi bateratua sortzeko.
Datuen bistaratzea Azkenik, prozesatutako datuak aginte-panel gisa aurkezten dira Grafana (neurrietarako eta arrastoetarako) edo Kibana (erregistroetarako) bezalako sistemetan. Horri esker, taldeek sistemaren osasuna azkar ebaluatu dezakete, arazoak eta joerak identifikatu eta sortutako seinaleetan oinarritutako alertak konfigura ditzakete.
Aplikazio batekin integratzeko, OpenTelemetry SDK egokia konektatu behar duzu erabiltzen ari den programazio-lengoairako edo OpenTelemetry zuzenean onartzen duten liburutegiak eta markoak erabili behar dituzu. OpenTelemetry-k askotan erabiltzen diren liburutegi ezagunetako interfazeak inplementatzen ditu, ordezkapenak ahalbidetuz. Adibidez, Mikrometro liburutegia Java ekosistemako metrika biltzeko erabiltzen da normalean. OpenTelemetry SDK-k Micrometer interfazeen inplementazioak eskaintzen ditu, eta esportazio metrikoa ahalbidetzen du aplikazioaren kode nagusia aldatu gabe. Gainera, OpenTelemetry-k OpenTracing eta OpenCensus interfaze zaharragoen inplementazioak eskaintzen ditu, OpenTelemetry-ra migrazio arin bat erraztuz.
IT sistemetan, OpenTelemetry backend fidagarri eta eraginkorren etorkizuneko giltza bihur daiteke. Tresna honek arazketa eta monitorizazioa errazten ditu eta aplikazioen errendimendua eta optimizazioa maila berrian sakon ulertzeko aukerak ere irekitzen ditu. Sartu OpenTelemetry komunitatean backend garapena sinpleagoa eta eraginkorragoa den etorkizuna osatzen laguntzeko!