![Search icon](https://hackernoon.imgix.net/search-new.png?w=19&h=19)
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.
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,
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.
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ş və metriklərin toplanmasıdır .
**Hər bir komponentə daha yaxından nəzər salaq: \
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:
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.
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ə çoxsaylı mikroservislər vasitəsilə sorğunun yolunun qrafikinin qeydə alınması və sonradan vizuallaşdırılması prosesidir.
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:
trace_id
və span_id
yaradı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ə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.
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.
Qeydlər, ölçülər və izləmə birlikdə sistemin vəziyyətinin hərtərəfli görünüşünü yaradır:
Üç əsas komponentə əlavə olaraq, OpenTelemetry Nümunə götürmə, Baqaj və əməliyyat kontekstinin idarə edilməsi konsepsiyalarını ehtiva edir.
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 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.
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:
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.
İ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.
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.
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ə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.
İ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!