Tracing: bu nədir, prinsiplər və məlumat toplama

Müəllif: IT Sectr Dərc olunub: 2026-05-29 Oxuma vaxtı: 8 dəq

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ış sistemin bütün komponentləri vasitəsilə sorğun yolunun hər addımın vaxtını qeyd etməklə yazılması.
  • Span — tracingin əsas vahidi, başlama və bitmə vaxtını göstərən bir əməliyyatı təmsil edir.
  • Distributed tracing — müxtəli xidmətlərdən spanları kontekst ötürülməsi vasitəsilə vahid trace zəncirinə birləşdirən mexanizm.
  • OpenTelemetry — bütün populyar dillər və platformalar üçün tracingi dəstəkləyən telemetriya toplama standartı.
  • Sampling — məlumatların həcminə və saxlama xərclərinə nəzarət etməyə imkan verən sorğuların bir hissəsinin tracing üçün seçilmə strategiyası.

Monitorinqdə tracing nədir

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.

Spanlar və traces: əsas məlumat strukturu

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.

Trace daxilində spanların iyerarxiyası

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.

Span atributları və hadisələ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 necə işləyir

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.

Mikroxidmətlərdə kontekst ötürülməsi

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.

kotlin
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 vasitəsilə tracingin tətbiqi

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.

Avtomatik instrumentasiya

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.

Məlumatların ixracı

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.

swift
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.

Trace nümunəgötürmə strategiyaları

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.

Head-based sampling

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.

Tail-based sampling

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 probabilitySadəlik, proqnozlaşdırıla bilən yükNadir hadisələri qaçırır
Rate limitingZəmanətli məlumat həcmiQeyri-bərabər əhatə
Tail-basedBütən səhvlərin tutulmasıYüksək yaddaş istehlakı
AdaptiveXərc və əhatə balansıQuraşdırma mürəkkəbliyi

Tracing və loglama arasındakı fərq

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

Tracing monitorinqdən nə ilə fərqlənir?

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.

Sorğuların neçə faizini trace etmək lazımdır?

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.

Hansı alətlər distributed tracing-i dəstəkləyir?

Ə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-RayHoneycomb. Hamısı məlumatların qəbulu üçün OpenTelemetry standartını dəstəkləyir.

Mobil tətbiqi backend olmadan trace etmək olarmı?

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.

Tracing tətbiqin performansına necə təsir edir?

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

  • Tracing — ayrıca əməliyyata qədər dəqiqliklə paylanmış sistemin bütün komponentləri vasitəsilə hər sorğun yolunu qeyd edən müşahidə metodudur.
  • Span — əməliyyat adı, müddət, status və atributları ehtiva edən trace-in elementar vahididir.
  • Distributed tracing — trace_id kontekstinin ötürülməsi vasitəsilə müxtəli xidmətlərdən spanları birləşdirən mexanizm.
  • OpenTelemetry — avtomatik instrumentasiya və çoxsaylı backend-lərə dəstəklə trace məlumatlarının toplanması standartıdır.
  • Nümunəgötürmə saxlanılan trace-lərin həcminə nəzarət etməyə imkan verir — sadəlik üçün head-based, nadir səhvləri tutmaq üçün tail-based.
  • Tracing loglama və metrikalarla birlikdə sistemin observability tam mənzərəsini verir.
  • Distributed tracing-in tətbiqinə kritik ssenarilərdən başlamaq tövsiyə olunur — autentifikasiya, ödənişlər, məlumat yükləmə — və tədricən bütün xidmətlərə genişləndirilməlidir.

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.

Layihəni müzakirə et

Həm də oxuyun