paint-brush
OpenTelemetry nədir və O, Backend Keyfiyyətinizi Necə Təkmilləşdirə bilər? tərəfindən@ymatigoosa
39,155 oxunuşlar
39,155 oxunuşlar

OpenTelemetry nədir və O, Backend Keyfiyyətinizi Necə Təkmilləşdirə bilər?

tərəfindən Dmitrii Pakhomov8m2024/06/19
Read on Terminal Reader
Read this story w/o Javascript

Çox uzun; Oxumaq

OpenTelemetry müasir backend sistemlərinin monitorinqi və sazlanması üçün güclü alətlər dəstidir. O, tətbiqin performansı və etibarlılığının vahid görünüşünü təmin edərək, izləmə, giriş və ölçülər kolleksiyasını birləşdirir. Bu bələdçi onun tarixini, əsas konsepsiyalarını və tətbiqini araşdırır və onu mikroservislərin və paylanmış sistemlərin optimallaşdırılması üçün vacib edir.

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - OpenTelemetry nədir və O, Backend Keyfiyyətinizi Necə Təkmilləşdirə bilər?
Dmitrii Pakhomov HackerNoon profile picture
0-item

Keçmişdə, biz backend haqqında danışarkən, adətən, tək, böyük verilənlər bazası olan bir böyük proqrama istinad edirdik və giriş monitorinq üçün kifayət idi. İndi Kubernetes kimi texnologiyalar sayəsində mikroservislər standart halına gəldi. Tətbiqlər daha çox və paylanmışdır və ənənəvi giriş artıq tətbiqlərimizdəki problemlərin aradan qaldırılması və diaqnostikası üçün kifayət deyil.

Monitorinqin təşkili üçün əla həll OpenTelemetry - paylanmış sistemlərin sazlanması və performans təhlili üçün istifadə edilə bilən müasir alətlər dəstidir.


Bu məqalə backend optimallaşdırması sahəsində biliklərini genişləndirmək istəyən İT mütəxəssisləri üçün nəzərdə tutulub. Aşağıda biz OpenTelemetry-nin nə olduğunu, onun əsas anlayışlarını və həll etməyə kömək etdiyi problemləri ətraflı izah edəcəyik. OpenTelemetry-nin arxa sistem sistemlərinin monitorinqi və sazlanmasına yanaşmanızı necə dəyişdirə biləcəyi, onların etibarlılığını və səmərəliliyini artırması ilə maraqlanırsınızsa, oxuyun.


OpenTelemetry-nin Qısa Tarixi

Böyük texnoloji şirkətlər ilk dəfə 2000-ci illərin sonlarında paylanmış giriş və izləmə problemi ilə qarşılaşdılar. 2010-cu ildə Google bir məqalə dərc etdi, Dapper, Böyük Ölçekli Paylanmış Sistemlərin İzləmə İnfrastrukturudur , Twitter-in 2012-ci ildə buraxılmış Zipkin izləmə alətinin əsasını qoyan.


2014-cü ildə mikroservislərin və digər buludla paylanmış sistemlərin inkişafını əhəmiyyətli dərəcədə sadələşdirən Kubernetes ortaya çıxdı. Bu, bir çox şirkətin mikroservislərdə paylanmış giriş və izləmə ilə bağlı problemlərlə qarşılaşmasına səbəb oldu. Paylanmış izləməni standartlaşdırmaq üçün CNCF tərəfindən qəbul edilmiş OpenTracing standartı və Google-un OpenCensus layihəsi yaradılmışdır.


2019-cu ildə OpenTracing və OpenCensus layihələri OpenTelemetry adı altında birləşmə elan etdi. Bu platforma uzun illər ərzində toplanmış ən yaxşı təcrübələri özündə birləşdirir və mürəkkəbliyindən asılı olmayaraq izləmə, giriş və ölçüləri istənilən sistemə mükəmməl inteqrasiya etməyə imkan verir.


Bu gün OpenTelemetry sadəcə bir layihə deyil; telemetriya məlumatlarının toplanması və ötürülməsi üçün sənaye standartıdır. O, mütəxəssislər icması və Google və Microsoft kimi bazarda aparıcı şirkətlər tərəfindən işlənib hazırlanır və dəstəklənir. Layihə inteqrasiya və istifadə prosesini sadələşdirmək üçün yeni imkanlar əldə edərək inkişaf etməyə davam edir.


İçəridə nə var?

OpenTelemetry, tətbiqin xarici dünya ilə qarşılıqlı əlaqədə olmaq üçün hansı siqnalları yarada biləcəyini və proqramların və bütövlükdə sistemin vəziyyətini izləmək üçün bu siqnalların necə toplanacağını və vizuallaşdırıla biləcəyini müəyyən edən hərtərəfli təcrübə və alətlər toplusudur. Siqnalların üç əsas növü izləmə, girişmetriklərin toplanmasıdır .


**Hər bir komponentə daha yaxından nəzər salaq: \

Kontekstlər

OpenTelemetry əməliyyat kontekstləri konsepsiyasını təqdim edir. Kontekstə ilk növbədə `trace_id` (cari əməliyyat üçün identifikator) və `span_id` (alt sorğu üçün identifikator, subsorğunun hər təkrar cəhdi unikal `span_id` ) kimi atributları ehtiva edir.


Əlavə olaraq, kontekstdə tətbiqin yerləşdirildiyi qovşaq adı və ya mühit adı (prod/qa) kimi statik məlumat ola bilər. OpenTelemetry terminologiyasında resurslar kimi tanınan bu sahələr daha asan axtarış üçün hər jurnala, metrikaya və ya izə əlavə olunur. Kontekstlərə həmçinin cari son nöqtənin identifikatoru ( `http_path: "GET /user/:id/info"` ) kimi dinamik data daxil ola bilər ki, bunlar seçici olaraq qeydlər, ölçülər və ya izlər qruplarına əlavə oluna bilər.


OpenTelemetry kontekstləri kontekstlərin yayılması protokollarından istifadə edərək müxtəlif proqramlar arasında ötürülə bilər. Bu protokollar hər HTTP və ya gRPC sorğusuna əlavə edilən başlıq dəstlərindən və ya növbələr üçün mesajların başlıqlarından ibarətdir. Bu, aşağı axın tətbiqlərinə bu başlıqlardan əməliyyat kontekstini yenidən qurmağa imkan verir.


Budur kontekstlərin yayılmasının bəzi nümunələri:

  1. B3-Yayılma Bu, əvvəlcə Zipkin izləmə sistemi üçün hazırlanmış başlıqlar dəstidir ( x-b3-* ). O, OpenTracing-ə uyğunlaşdırılmış və bir çox alətlər və kitabxanalar tərəfindən istifadə edilmişdir. B3-Yayılma trace_id / span_id və nümunə götürmənin zəruri olub olmadığını göstərən bir bayraq daşıyır.


  2. W3C İz Konteksti W3C işçi qrupu tərəfindən hazırlanmış bu standart müxtəlif kontekstlərin yayılması yanaşmalarını vahid standartda birləşdirir və OpenTelemetry-də defoltdur. Bu standartların tətbiqinin yaxşı nümunəsi, monitorinq və sazlama dəqiqliyinə xələl gətirmədən müxtəlif texnologiyalarla həyata keçirilən mikroservislərdən keçən sorğunun icrasını izləməkdir.

İzləmə

İzləmə çoxsaylı mikroservislər vasitəsilə sorğunun yolunun qrafikinin qeydə alınması və sonradan vizuallaşdırılması prosesidir.


[şəkil mənbəyi: https://opentelemetry.io/docs/demo/screenshots/]


Vizuallaşdırmada hər bir çubuq "span" adlanır və unikal "span_id"-ə malikdir. Kök aralığına "iz" deyilir və bütün sorğu üçün identifikator kimi xidmət edən "trace_id" var.


Bu cür vizuallaşdırma sizə imkan verir:

  • Optimallaşdırmaya ehtiyacı olan darboğazları müəyyən etmək üçün müxtəlif sistemlər və verilənlər bazaları üzrə sorğuların icra müddətini təhlil edin.
  • Xidmətlər arasında tsiklik asılılıqları aşkar edin.
  • Dublikat sorğuları tapın. İzləmə məlumatlarından istifadə edərək, siz həmçinin mikroxidmətlər xəritəsi yaratmaq və ya əməliyyatın işlənməsi zamanı müxtəlif sistemlər arasında vaxtı paylamaq kimi əlavə analitika qura bilərsiniz. Zaman qrafiklərini vizuallaşdırmaq üçün iz məlumatlarından istifadə etməsəniz belə, OpenTelemetry yenə də digər siqnallarda istifadə üçün trace_idspan_id yaradır.


Qeydlər

Görünən sadəliyinə baxmayaraq, giriş problemlərin diaqnostikası üçün ən güclü vasitələrdən biri olaraq qalır. OpenTelemetry kontekst məlumatı əlavə etməklə ənənəvi girişi gücləndirir. Xüsusilə, aktiv iz mövcuddursa, `trace_id` və `span_id` atributları avtomatik olaraq qeydlərə əlavə edilir və onları iz qrafiki ilə əlaqələndirir. Bundan əlavə, log atributlarına qovşaq identifikatoru kimi OpenTelemetry kontekstindən statik məlumat, həmçinin cari HTTP son nöqtə identifikatoru (`http_path: "GET /user/:id"`) kimi dinamik məlumat daxil ola bilər.


`trace_id` istifadə edərək, siz cari sorğu ilə əlaqəli bütün mikroservislərdən qeydləri tapa bilərsiniz, `span_id` isə alt sorğular arasında fərq qoymağa imkan verir. Məsələn, təkrar cəhdlər zamanı müxtəlif cəhdlərin qeydlərində fərqli `span_id` olacaq. Bu identifikatorların istifadəsi real vaxt rejimində bütün sistemin davranışını tez təhlil etməyə imkan verir, problemin diaqnozunu sürətləndirir və sabitliyi və etibarlılığı artırır.


Metriklər

Metriklərin toplanması gecikmə, səhv dərəcələri, resurs istifadəsi və s. kimi sistem performansına dair kəmiyyət məlumatları təqdim edir. Metriklərin real vaxt rejimində monitorinqi performans dəyişikliklərinə operativ reaksiya verməyə, nasazlıqların və resursların tükənməsinin qarşısını almağa, istifadəçilər üçün tətbiqin yüksək əlçatanlığını və etibarlılığını təmin etməyə imkan verir.


Prometheus və Grafana kimi metrik saxlama və vizuallaşdırma sistemləri ilə inteqrasiya bu məlumatların vizuallaşdırılmasını asanlaşdırır, monitorinqi əhəmiyyətli dərəcədə sadələşdirir.


[şəkil mənbəyi: https://grafana.com/blog/2021/06/22/grafana-dashboard-showcase-visualizations-for-prometheus-home-energy-usage-github-and-more/]


Metrik kollektorlar

OpenTelemetry metrik kollektorları Prometheus və OpenMetrics standartlarına uyğundur və əhəmiyyətli dəyişikliklər olmadan OpenTelemetry həllərinə asan keçid imkanı verir. OpenTelemetry SDK trace_id nümunələrini metriklərlə birlikdə ixrac etməyə imkan verir ki, bu da metrikləri jurnal nümunələri və izləri ilə əlaqələndirməyə imkan verir.


Siqnal korrelyasiya

Qeydlər, ölçülər və izləmə birlikdə sistemin vəziyyətinin hərtərəfli görünüşünü yaradır:

  • Qeydlər sistem hadisələri haqqında məlumat verir, səhvləri tez müəyyən etməyə və həll etməyə imkan verir.
  • Metriklər sistemin keyfiyyət və kəmiyyət göstəricilərini əks etdirir, məsələn, cavab müddəti və ya səhv dərəcələri.
  • İzləmə müxtəlif sistem komponentləri vasitəsilə sorğunun icra yolunu göstərməklə, onların qarşılıqlı əlaqəsini başa düşməyə kömək etməklə bu baxışı tamamlayır. Qeydlər, izlər və ölçülər arasında aydın korrelyasiya OpenTelemetry-nin fərqli xüsusiyyətidir. Məsələn, Grafana istifadəçilərə loga baxarkən müvafiq izi və sorğu göstəricilərini görməyə imkan verir ki, bu da platformanın yararlılığını və səmərəliliyini xeyli artırır.



[şəkil mənbəyi: https://grafana.com/blog/2020/03/31/how-to-successfully-correlate-metrics-logs-and-traces-in-grafana/]


Üç əsas komponentə əlavə olaraq, OpenTelemetry Nümunə götürmə, Baqaj və əməliyyat kontekstinin idarə edilməsi konsepsiyalarını ehtiva edir.


Nümunə götürmə

Yüksək yüklü sistemlərdə qeydlərin və izlərin həcmi nəhəng olur ki, bu da infrastruktur və məlumatların saxlanması üçün əhəmiyyətli resurslar tələb edir. Bu problemi həll etmək üçün OpenTelemetry standartlarına siqnal seçmə daxildir - izlərin və qeydlərin yalnız bir hissəsini ixrac etmək imkanı. Məsələn, sorğuların faizindən, uzun müddət davam edən sorğulardan və ya səhv sorğularından ətraflı siqnalları ixrac edə bilərsiniz. Bu yanaşma əhəmiyyətli resurslara qənaət etməklə yanaşı, statistika yaratmaq üçün kifayət qədər nümunə götürməyə imkan verir.


Bununla belə, hər bir sistem müstəqil olaraq hansı sorğuların təfərrüatlı şəkildə izlənilməsinə qərar verirsə, biz hər bir sorğunun parçalanmış görünüşü ilə nəticələnirik. Bəzi sistemlər təfərrüatlı məlumatları ixrac edə bilər, digərləri isə yalnız qismən ixrac edə bilər və ya ümumiyyətlə ixrac edə bilməz.


Bu problemi həll etmək üçün OpenTelemetry kontekstinin yayılması mexanizmləri `trace_id`/`span_id` ilə birlikdə seçmə bayrağını ötürür. Bu, istifadəçi sorğusunu qəbul edən ilkin xidmət sorğunun təfərrüatlı şəkildə izlənilməsinə qərar verərsə, bütün digər sistemlərin buna əməl edəcəyini təmin edir. Əks halda, bütün sistemlər resursları qorumaq üçün siqnalları qismən və ya ixrac etməməlidir. Bu yanaşma "Head Sampling" adlanır - sorğunun işlənməsinin əvvəlində təsadüfi və ya bəzi giriş atributlarına əsaslanan qərar.


Bundan əlavə, OpenTelemetry "Tail Sampling"i dəstəkləyir, burada bütün proqramlar həmişə bütün siqnalları ətraflı şəkildə ixrac edir, lakin aralıq bufer mövcuddur. Bütün məlumatları topladıqdan sonra bu bufer tam məlumatı saxlamağa və ya yalnız qismən nümunəni saxlamağa qərar verir. Bu üsul hər bir sorğu kateqoriyasının (uğurlu/uzun/səhv) daha nümayəndəli nümunəsinə imkan verir, lakin əlavə infrastrukturun qurulmasını tələb edir.


Baqaj

Baqaj mexanizmi sorğunun işlənməsi zamanı avtomatik olaraq bütün mikroservislər arasında keçid edərək trace_id / span_id ilə birlikdə ixtiyari açar-dəyər cütlərinin ötürülməsinə imkan verir. Bu, istifadəçi məlumatı və ya iş vaxtı mühiti parametrləri kimi sorğu yolu boyunca lazım olan əlavə məlumatı ötürmək üçün faydalıdır.

W3C standartına uyğun baqajın ötürülməsi üçün başlıq nümunəsi: tracestate: rojo=00f067aa0ba902b7,congo=t61rcWkgMzE,userId=1c30032v5

Baqajdan istifadəyə dair bəzi nümunələr bunlardır:

  • userId , productId və ya deviceId kimi Biznes Kontekst Məlumatının ötürülməsi bütün mikroservislər vasitəsilə ötürülə bilər. Tətbiqlər bu məlumatı avtomatik olaraq daxil edə bilər və bu, orijinal sorğu üçün istifadəçi kontekstinə görə jurnal axtarışlarına imkan verir.

  • SDK və ya infrastruktur üçün Xüsusi Konfiqurasiya Parametrləri Parametrlər.

  • Marşrut Bayraqları Yük balanslaşdırıcılarına marşrut qərarları qəbul etməyə kömək edən bayraqlar. Sınaq zamanı bəzi sorğuların istehzalı arxa uçlara yönləndirilməsi tələb oluna bilər. Baqaj bütün xidmətlər vasitəsilə avtomatik ötürüldüyü üçün əlavə protokollar yaratmağa ehtiyac yoxdur - sadəcə yük balanslaşdırıcısında qayda qurun.


Qeyd edək ki, Baqajın performansa təsiri minimal olsa da, həddindən artıq istifadə şəbəkə və xidmət yükünü əhəmiyyətli dərəcədə artıra bilər. Performansla bağlı problemlərin qarşısını almaq üçün həqiqətən hansı məlumatları Baqajdan keçirməli olduğunuzu diqqətlə seçin.

İnfrastrukturun həyata keçirilməsi

OpenTelemetry-nin infrastruktur səviyyəsində tətbiqi OpenTelemetry backendlərini proqram arxitekturasına inteqrasiyanı və verilənlərin birləşdirilməsi üçün infrastrukturun konfiqurasiyasını nəzərdə tutur.


Proses dörd mərhələdən ibarətdir:


  1. Tətbiq İnteqrasiyası Birinci mərhələdə, OpenTelemetry SDK-ları hər bir sistem komponentinin performansı haqqında davamlı məlumat axınını təmin edərək, ölçüləri, qeydləri və izləri toplamaq üçün birbaşa tətbiqlərə inteqrasiya olunur.


  2. İxracatçıların konfiqurasiyası Toplanmış məlumat ehtiyaclarınızdan asılı olaraq əlavə emal üçün, məsələn, giriş, monitorinq, izləmə və ya analitik sistemlər üçün ixracatçılar vasitəsilə tətbiqlərdən kənar sistemlərə yönləndirilir.


  3. Aqreqasiya və Saxlama Bu mərhələ verilənlərin normallaşdırılmasını, əlavə məlumatlarla zənginləşdirilməsini və sistemin vəziyyətinin vahid görünüşünü yaratmaq üçün müxtəlif mənbələrdən verilənlərin birləşdirilməsini əhatə edə bilər.


  4. Məlumatların vizuallaşdırılması Nəhayət, işlənmiş məlumatlar Grafana (ölçülər və izlər üçün) və ya Kibana (loglar üçün) kimi sistemlərdə idarə panelləri kimi təqdim olunur. Bu, komandalara sistemin sağlamlığını cəld qiymətləndirməyə, problemləri və meylləri müəyyən etməyə və yaradılan siqnallar əsasında xəbərdarlıqlar qurmağa imkan verir.


Tətbiqin həyata keçirilməsi

Tətbiqlə inteqrasiya etmək üçün istifadə olunan proqramlaşdırma dili üçün uyğun OpenTelemetry SDK-nı qoşmalı və ya OpenTelemetry-ni birbaşa dəstəkləyən kitabxanalar və çərçivələri işə salmalısınız. OpenTelemetry tez-tez məlum kitabxanalardan geniş istifadə olunan interfeysləri tətbiq edir və bu, dəyişdirmələrin dəyişdirilməsinə imkan verir. Məsələn, Mikrometr kitabxanası adətən Java ekosistemində ölçülərin toplanması üçün istifadə olunur. OpenTelemetry SDK, əsas proqram kodunu dəyişmədən metrik ixrac etməyə imkan verən Mikrometr interfeyslərinin tətbiqlərini təmin edir. Üstəlik, OpenTelemetry köhnə OpenTracing və OpenCensus interfeyslərinin tətbiqlərini təklif edir, OpenTelemetry-ə rahat miqrasiyanı asanlaşdırır.

Nəticə

İT sistemlərində OpenTelemetry etibarlı və səmərəli backendlərin gələcəyinin açarı ola bilər. Bu alət sazlama və monitorinqi asanlaşdırır, həmçinin yeni səviyyədə tətbiqin performansını və optimallaşdırılmasını dərindən başa düşmək üçün imkanlar açır. Backend inkişafının daha sadə və effektiv olduğu gələcəyin formalaşmasına kömək etmək üçün OpenTelemetry icmasına qoşulun!