Tracing — paylanmış sistem vasitəsilə sorğuların axınını müşahidə etmə metodudur, burada emalın hər addımı vaxt damğası ilə ayrıca hadisə kimi qeyd olunur. OpenTelemetry, 2025 məlumatlarına görə, trace sorğunun giriş nöqtəsindən son cavaba qədər tam yolunu birləşdirir, bütün mikroxidmətlər və xarici çağırışlardan keçir. Bu, tərtibatçılara mürəkkəb mobil backend arxitekturalarında dar boğazları, gecikmələri və nasazlıqları aşkar etməyə imkan verir.
Əsas məqamlar
Tracing — paylanmış müşahidə metodudur, burada hər daxil olan sorğu sistemin bütün xidmətləri və komponentləri vasitəsilə izlənir. Ümumi dəyərləri göstərən metrikalardan fərqli olaraq (orta cavab müddəti, səhvlərin sayı), tracing bir konkret sorğun tam kontekstini qoruyur.
Emalın hər addımı — verilənlər bazasına müraciət, başqa mikroxidmətə HTTP sorğu, fon tapşırığının yerinə yetirilməsi — vaxt damğası, status və atributlarla ayrıca vahid kimi qeyd olunur. Google Dapper məlumatlarına görə (2010-cu ilin orijinal nəşri), tracing paylanmış sistemlərdə gecikmələri bir çağırış dəqiqliyi ilə lokalizasiya etməyə imkan verir.
Tracing xüsusilə backend’i onlarla mikroxidmətdən ibarət olan mobil tətbiqlər üçün vacibdir. İstifadəçi hərəkəti — məsələn, hesaba daxil olma — API Gateway, autentifikasiya xidməti, verilənlər bazası və Push xidmətindən keçə bilər. Trace olmadan hansı komponentin cavabı ləngitdiyini müəyyən etmək praktiki olaraq qeyri-mümkündür.
Tracingin əsas vahidi span-dır. Hər span bir məntiqi əməliyyatı təmsil edir: HTTP sorğu, SQL sorğu, gRPC çağırışı, JSON serializasiyası. Span unikal identifikator, valideyn identifikatoru, əməliyyat adı, başlama vaxtı, müddət, status və atributlar dəsti ehtiva edir.
Bir kök sorğu ilə əlaqəli bütün spanlar trace-də birləşir. Kök span (root span) giriş nöqtəsini — mobil müştəridən API-yə HTTP sorğunu təmsil edir. Uşaq spanlar ağac yaradır, burada hər span parent_span_id sahəsi vasitəsilə valideynə istinad edir.
Trace-in müddəti bütün spanların unikal vaxt dövrlərinin məbləğinə bərabərdir. İki uşaq span paralel yerinə yetirilɕrsə, onların vaxtı ümumiləşdirilmir — bu, mikroxidmətlərin paralel çağırışları nəticəsində yaranan gecikmələrin düzgün təhlili üçün kritik əhəmiyyət daşıyır.
Hər span atributlar ehtiva edə bilər — meta-məlumatlı açar-dəyər cütləri: sorğun URL-i, istifadəçi ID-si, API versiyası, host adı. Atributlar trace-lərin filtrasiyası və qruplaşdırılması üçün istifadə olunur. Atributlardan əlavə, span hadisələri dəstəkləyir — mətn təsviri ilə vaxt damğaları, məsələn “keş ötürməsi” və ya “əlaqənin yenidən qurulması cəhdi”.
Distributed tracing müxtəli proseslərdə və maşınlarda yaradılan spanların əlaqələndirilməsi problemini həll edir. Mexanizm kontekst ötürülməsinə əsaslanır: A xidmətindən B xidmətinə zəng edərkən, gedən sorğa cari trace və valideyn span identifikatoru əlavə olunur.
Kontekst ötürülməsi üçün standart protokollar — W3C Trace Context (traceparent və tracestate başlıqları) və Zipkin B3 (X-B3-TraceId, X-B3-SpanId başlıqları). W3C Trace Context 2021-ci ildə W3C konsorsiumu tərəfindən standart kimi qəbul edilmiş və bütün əsas telemetriya provayderləri tərəfindən dəstəklənir.
Sorğu qəbul edərkən B xidməti başlıqdan trace_id çıxarır və bu trace_id ilə uşaq span yaradır. Beləliklə, sorğu tamamlandıqdan sonra müxtəli xidmətlərdən gələn bütün spanlar kollektor tərəfində bir trace-də birləşir. Bunun üçün hər xidmətin eyni tracing kitabxanası ilə instrumentasiya edilməsi tələb olunur.
Mobil inkişafda kontekst ötürülməsi təkcə backend’i deyil, həm də müştəri-server qarşılıqlı əlaqəsini əhatə edir. Mobil tətbiq hər API sorğunun başlığında trace_id göndərə bilər, bu da müştəri hərəkətini server emalı ilə əlaqələndirməyə imkan verir. iOS və Android üçün OpenTelemetry SDK HTTP müştəriləri vasitəsilə trace kontekstinin avtomatik yaradılması və ötürülməsini dəstəkləyir.
import io.opentelemetry.api.trace.Span
import io.opentelemetry.api.trace.Tracer
import io.opentelemetry.context.Context
class TracingInterceptor : Interceptor {
private val tracer: Tracer = OpenTelemetry.getTracer("mobile-app")
override fun intercept(chain: Interceptor.Chain): Response {
val span = tracer.spanBuilder("HTTP POST /api/login")
.setParent(Context.current())
.startSpan()
return chain.proceed(chain.request())
.also { span.end() }
}
}
Təqdim olunan Kotlin interceptor’ı serverə hər HTTP sorğu üçün span yaradır. Valideyn konteksti çağıran koddan Context.current() vasitəsilə ötürülür, bu da müştəri tərəfində olan trace-i server tərəfindəki trace ilə əlaqələndirməyə imkan verir.
OpenTelemetry — trace məlumatlarının toplanması üçün de-fakto standartdır. Spanların yaradılması üçün vahid API, populyar kitabxanaların avtomatik instrumentasiyası və məlumatların müxtəli backend-lərə (Jaeger, Zipkin, Grafana Tempo, Datadog, New Relic) ixracı üçün çevik mexanizm təmin edir.
OpenTelemetry populyar framework-lar üçün spanların avtomatik yaradılmasını dəstəkləyir: Spring Boot, Ktor, Flask, Express, gRPC. Tərtibatçı yalnız layihəyə asılılıq əlavə etməlidir və kitabxana daxil olan və gedən sorğuları müstəqil şəkildə ələ keçirir. Java üçün Auto-instrumentation mənbəni dəyişdirmədən bytecode-u aktiv şəkildə dəyişdirən javaagent istifadə edir.
Mobil platformalar üçün OpenTelemetry Swift SDK və Kotlin SDK təmin edir. Onlar şəbəkə sorğuları (URLSession, OkHttp), verilənlər bazası ilə iş (CoreData, Room) və fon tapşırıqları üçün avtomatik span yaradırlar. Tərtibatçı biznes məntiqi üçün xüsusi spanlar əlavə edə bilər.
Toplanan spanlar OTLP (OpenTelemetry Protocol) protokolu vasitəsilɘ kollektora göndərilir. Kollektor məlumatları buferləşdirə, filtrləyə və bir və ya bir neçɘ saxlama sisteminə yönləndirə bilər. OpenTelemetry sənədlərinə görə, gRPC ixracından istifadə edərkən spanın yaradılmasından panelində göstərilməsinə qədər tipik gecikmə 2–5 saniyə təşkil edir.
import OpenTelemetryApi
import OpenTelemetrySdk
import URLSessionInstrumentation
let instrumentation = URLSessionInstrumentation()
instrumentation.enable()
let tracer = OpenTelemetry.instance.tracerFactory
.get("mobile-monitoring")
let span = tracer.spanBuilder("fetch-user-profile")
.setAttribute(key: "user.id", value: userId)
.startSpan()
span.end()
Swift-dəki kod şəbəkə qatının avtomatik instrumentasiyasını aktivləşdirir və istifadəçi profilinin əldə olunması əməliyyatı üçün xüsusi span yaradır. user.id atributu sonradan trace-ləri müəyyən bir istifadəçiyə görə filtrləməyə imkan verir.
Yüksək yüklü sistemlərdə hər sorğun tracing-i mümkün deyil — bu, yaddaş və şəbəkəyə qəbuledilməz yük yaradır. Nümunəgötürmə bu problemi həll edir, trace-lərin yalnız bir hissəsini saxlayaraq. Strategiyanın seçilməsi məlumatların tamlığına və infrastruktur xərclərinə birbaşa təsir edir.
Trace-in saxlanması haqqında qərar onun yaradılması anında — kök spanda qəbul edilir. Ən sadə və geniş yayılmış yanaşma: sorğuların sabit faizi (məsələn, 5%) saxlanılır, qalanları atılır. Çatışmazlıq — nadir səhvlərin tutulacağına zəmanət yoxdur. OpenTelemetry-də Probability sampler 0.0-dan 1.0-a qədər ehtimalın qurulmasını dəstəkləyir.
Qərar trace-in bütün spanları tamamlanana qədər təxirə salınır. Analizator trace-in səhvlər, vaxt keçməsi və ya maraqlı atributlar ehtiva edib-etmədiyini qiymətləndirir və yalnız bundan sonra onu saxlayır. Bu yanaşma kollektorda bütün spanların buferləşdirilməsini tələb edir ki, bu da yaddaş istehlakını artırır. Grafana Labs məlumatlarına görə, tail-based sampling nadir, lakin kritik səhvləri olan sistemlərdə “faydalı məlumat üçün qiymət” nisbətində 40–60% daha səmərəlidir.
| Strategiya | Üstünlüklər | Çatışmazlıqlar |
|---|---|---|
| Fixed probability | Sadəlik, proqnozlaşdırıla bilən yük | Nadir hadisələri qaçırır |
| Rate limiting | Zəmanətli məlumat həcmi | Qeyri-bərabər əhatə |
| Tail-based | Bütən səhvlərin tutulması | Yüksək yaddaş istehlakı |
| Adaptive | Xərc və əhatə balansı | Quraşdırma mürəkkəbliyi |
Loglama ayrıca hadisələri əhəmiyyət səviyyəsi ilə (İnfo, warn, error) qeyd edir, lakin onları bir sorğun kontekstində əlaqələndirmir. Tracing isə əksinə, bir ucdan-uca sorğa aid olan strukturlaşdırılmış əməliyyat ağacı yaradır. Praktikada bu iki yanaşma bir-birini istisna etmir, əksinə tamamlayır.
Loglar müəyyən bir səhvin ətraflı təhlili üçün effektivdir: tərtibatçı dəqiq mesajı, çağırış izini, dəyişənlərin dəyərlərini görür. Tracing “sorğu niyə 5 saniyə çəkir” sualına cavab verir — hansı mikroxidmətin və ya çağırışın ən çox vaxt apardığını göstərir. Honeycomb (2024) məlumatlarına görə, tracing ilə birlikdə loglamadan istifadə edən komandalar hadisələrin kök səbəbini 2,3 dəfə daha tez tapırlar.
Müasir yanaşma — observability — tracing, metrikalar və logları vahid sistemdə birləşdirir. OpenTelemetry bu üç siqnal arasında korrelyasiyanı dəstəkləyir: hər span əlaqəli loglara istinadlar ehtiva edə bilər, metrikalar isə konkret trace-lərə keçid üçün trace_id ilə etiketlənə bilər.
Tez-tez verilən suallar
Monitorinq sistemin ümumi metrikalarını göstərir — orta cavab müddəti, dəqiqədə səhvlərin sayı, CPU yüklənməsi. Tracing isə bir konkret sorğun bütün komponentlər vasitəsilə yolunu göstərir. Monitorinq “nə baş verir” sualına, tracing — “bu niyə baş verir” sualına cavab verir.
Production sistemləri üçün head-based sampling ilə 1–5% sorğu kifayətdir. Sistem nadir hallarda səhv verirsə, bütün səhv trace-lərini tutmağa yönəlmiş tail-based sampling tövsiyə olunur. Staging mühiti üçün heç bir məhdudiyyət olmadan 100% sorğunun trace edilməsi məqbuldur.
Əsas alətlər: Jaeger (Uber həlli, açıq mənbə), Grafana Tempo (miqyaslana bilən trace yaddaşı), Datadog APM, New Relic Distributed Tracing, AWS X-Ray və Honeycomb. Hamısı məlumatların qəbulu üçün OpenTelemetry standartını dəstəkləyir.
Bəli, yerli tracing bir proses daxilində işləyir. iOS və Android üçün OpenTelemetry SDK yerli əməliyyatlar üçün spanlar yaradır: verilənlər bazasından oxuma, şəkillərin emalı, şəbəkə sorğuları. Bu cür trace-lər paylanmır, lakin müştəri hissəsinin performans diaqnostikası üçün faydalıdır.
Müasir tracing kitabxanaları head-based sampling ilə 1%-dən az əlavə yük əlavə edir. OpenTelemetry əsas axını bloklamayan asinxron məlumat ixracından istifadə edir. Mobil cihazlar üçün span yaratma tezliyini məhdudlaşdırmaq və adaptiv nümunəgötürmə strategiyasından istifadə etmək tövsiyə olunur.
Nəticələr
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun