Tracing: mi ez, elvek és adatgyűjtés

Szerző: IT Sectr Megjelenés: 2026-05-29 Olvasási idő: 8 perc

A tracing egy módszer a kérések áramlásának megfigyelésére egy elosztott rendszeren keresztül, ahol a feldolgozás minden lépése külön eseményként kerül rögzítésre időbélyeggel. A OpenTelemetry, 2025 adatai szerint a trace egyesíti a kérés teljes útvonalát a belépési ponttól a végső válaszig, áthaladva az összes mikroszolgáltatáson és külső híváson. Ez lehetővé teszi a fejlesztők számára a szűk keresztmetszetek, késleltetések és hibák azonosítását az összetett mobil backend architektúrákban.

Főbb pontok

  • Tracing — a kérés útvonalának rögzítése az elosztott rendszer összes komponensén keresztül, minden lépés idejének rögzítésével.
  • Span — a tracing alapegysége, amely egyetlen műveletet reprezentál a kezdés és befejezés időpontjának megadásával.
  • Distributed tracing — mechanizmus, amely különböző szolgáltatásokból származó spánokat köt össze egyetlen trace lánccá kontextus átadásával.
  • OpenTelemetry — telemetriagyűjtési szabvány, amely támogatja a tracinget az összes népszerű nyelv és platform számára.
  • Sampling — stratégia a kérések egy részének kiválasztására a tracinghez, lehetővé téve az adatmennyiség és a tárolási költségek szabályozását.

Mi az a tracing a monitorozásban

A tracing egy elosztott megfigyelési módszer, ahol minden beérkező kérés követve van a rendszer összes szolgáltatásán és komponensén keresztül. A metrikáktól eltérően, amelyek összesített értékeket mutatnak (átlagos válaszidő, hibák száma), a tracing megtartja egy adott kérés teljes kontextusát.

A feldolgozás minden lépése — adatbázis-hívás, HTTP kérés egy másik mikroszolgáltatáshoz, háttérfeladat végrehajtása — külön egységként kerül rögzítésre időbélyeggel, állapottal és attribútumokkal. A Google Dapper adatai szerint (eredeti publikáció 2010-ből), a tracing lehetővé teszi a késleltetések lokalizálását elosztott rendszerekben egyetlen hívás pontosságával.

A tracing különösen fontos a mobilalkalmazások számára, ahol a backend több tucat mikroszolgáltatásból áll. Egy felhasználói művelet — például bejelentkezés a fiókba — áthaladhat az API Gateway-en, a hitelesítési szolgáltatáson, az adatbázison és a Push szolgáltatáson. Trace nélkül gyakorlatilag lehetetlen meghatározni, hogy melyik komponens lassítja a választ.

Spánok és trace-ek: alapvető adatstruktúra

A tracing alapegysége a span. Minden span egyetlen logikai műveletet reprezentál: HTTP kérés, SQL lekérdezés, gRPC hívás, JSON szerializáció. A span tartalmaz egy egyedi azonosítót, szülő azonosítót, művelet nevet, kezdési időt, időtartamot, állapotot és attribútumok halmazát.

Spánok hierarchiája egy trace-ben

Az egy gyökérkéréshez tartozó összes span egy trace-ben egyesül. A gyökér span (root span) a belépési pontot reprezentálja — egy HTTP kérést a mobil klienstől az API-hoz. A gyermek spánok egy fát alkotnak, ahol minden span a parent_span_id mezőn keresztül hivatkozik a szülőre.

Egy trace időtartama megegyezik az összes span egyedi időszegmenseinek összegével. Ha két gyermek span párhuzamosan hajtódik végre, az idejük nem adódik össze — ez kritikus a mikroszolgáltatások párhuzamos hívásai által okozott késleltetések helyes elemzéséhez.

Span attribútumok és események

Minden span tartalmazhat attribútumokat — kulcs-érték párokat metainformációkkal: kérés URL-je, felhasználó ID, API verzió, hoszt név. Az attribútumokat a trace-ek szűrésére és csoportosítására használják. Az attribútumok mellett a span támogatja az eseményeket — időbélyegeket szöveges leírással, például „gyorsítótár kihagyás” vagy „kapcsolat újrapróbálkozása”.

Hogyan működik a distributed tracing

A distributed tracing megoldja a különböző folyamatokban és különböző gépeken létrehozott spánok összekapcsolásának problémáját. A mechanizmus kontextus átadáson alapul: a B szolgáltatás A szolgáltatásból történő hívásakor a kimenő kéréshez egy fejléc kerül hozzáadásra az aktuális trace és a szülő span azonosítójával.

A kontextus átadás szabványos protokolljai — W3C Trace Context (traceparent és tracestate fejlécek) és Zipkin B3 (X-B3-TraceId, X-B3-SpanId fejlécek). A W3C Trace Context-et a W3C konzorcium 2021-ben fogadta el szabványként, és az összes fő telemetriai szolgáltató támogatja.

A kérés fogadásakor a B szolgáltatás kinyeri a trace_id-t a fejlécből, és létrehoz egy gyermek spant ezzel a trace_id-val. Így a kérés befejezése után az összes spán a különböző szolgáltatásokból egyetlen trace-ben egyesül a gyűjtő oldalán. Ehhez minden szolgáltatásnak ugyanazzal a tracing könyvtárral kell instrumentáltnak lennie.

Kontextus átadás mikroszolgáltatásokban

A mobilfejlesztésben a kontextus átadás nem csak a backendet fedi le, hanem a kliens-szerver interakciót is. A mobilalkalmazás trace_id-t küldhet minden API kérés fejlécében, lehetővé téve a kliens művelet és a szerveroldali feldolgozás összekapcsolását. Az iOS és Android OpenTelemetry SDK-ja támogatja a trace kontextus automatikus létrehozását és továbbítását HTTP klienseken keresztül.

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() }
    }
}

A bemutatott Kotlin interceptor minden HTTP kéréshez létrehoz egy spant a szerver felé. A szülő kontextus a hívó kódból kerül továbbításra a Context.current() segítségével, ami lehetővé teszi a kliens oldali trace és a szerver oldali trace összekapcsolását.

A tracing megvalósítása OpenTelemetry-n keresztül

Az OpenTelemetry a trace adatok gyűjtésének de facto szabványa. Egységes API-t biztosít a spánok generálásához, a népszerű könyvtárak automatikus instrumentálását és egy rugalmas adatexportáló mechanizmust különböző backendekhez: Jaeger, Zipkin, Grafana Tempo, Datadog, New Relic.

Automatikus instrumentálás

Az OpenTelemetry támogatja a spánok automatikus létrehozását népszerű keretrendszerekhez: Spring Boot, Ktor, Flask, Express, gRPC. A fejlesztőnek csak egy függőséget kell hozzáadnia a projekthez, és a könyvtár önállóan elfogja a beérkező és kimenő kéréseket. A Java Auto-instrumentation egy javaagent-et használ, amely menet közben módosítja a bytecode-ot anélkül, hogy a forráskódot megváltoztatná.

Mobil platformokhoz az OpenTelemetry Swift SDK-t és Kotlin SDK-t biztosít. Ezek automatikusan létrehoznak spánokat hálózati kérésekhez (URLSession, OkHttp), adatbázis munkához (CoreData, Room) és háttérfeladatokhoz. A fejlesztő egyedi spánokat adhat hozzá az üzleti logikához.

Adatok exportálása

A összegyűjtött spánok az OTLP (OpenTelemetry Protocol) protokollon keresztül kerülnek a gyűjtőbe. A gyűjtő pufferelheti, szűrheti és továbbíthatja az adatokat egy vagy több tárolórendszerbe. Az OpenTelemetry dokumentációja szerint a tipikus késleltetés a span létrehozásától a dashboardon való megjelenésig 2–5 másodperc gRPC exportálás használata esetén.

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()

A Swift kód aktiválja a hálózati réteg automatikus instrumentálását, és létrehoz egy egyedi spant a felhasználói profil lekérésének műveletéhez. A user.id attribútum lehetővé teszi a trace-ek későbbi szűrését egy adott felhasználó szerint.

Trace-ek mintavételezési stratégiái

Magasan terhelt rendszerekben lehetetlen minden kérést trace-elni — ez elfogadhatatlan terhelést okozna a tárolón és a hálózaton. A mintavételezés megoldja ezt a problémát azzal, hogy csak a trace-ek egy részét menti el. A stratégia választása közvetlenül befolyásolja az adatok teljességét és az infrastruktúra költségeit.

Head-based sampling

A trace mentéséről szóló döntés a létrehozás pillanatában történik — a gyökér spanban. A legegyszerűbb és legelterjedtebb megközelítés: a kérések rögzített százaléka (például 5%) kerül mentésre, a többi eldobásra kerül. Hátránya — nem garantálható, hogy a ritka hibák rögzítésre kerülnek. Az OpenTelemetry Probability sampler-je támogatja a valószínűség beállítását 0.0 és 1.0 között.

Tail-based sampling

A döntés elhalasztásra kerül a trace összes spánjának befejeződéséig. Az elemző kiértékeli, hogy a trace tartalmaz-e hibákat, időtúllépést vagy érdekes attribútumokat, és csak azután menti el. Ez a megközelítés az összes span pufferelését igényli a gyűjtőben, ami növeli a memóriafogyasztást. A Grafana Labs adatai szerint a tail-based sampling 40–60%-kal hatékonyabb az „ár a hasznos adatokért” arány tekintetében a ritka, de kritikus hibákkal rendelkező rendszerekben.

StratégiaElőnyökHátrányok
Fixed probabilityEgyszerűség, kiszámítható terhelésRitka események kihagyása
Rate limitingGarantált adatmennyiségEgyenetlen lefedettség
Tail-basedAz összes hiba rögzítéseMagas memóriafogyasztás
AdaptiveKöltség és lefedettség egyensúyaBeállítás összetettsége

Különbség a tracing és a naplózás között

A naplózás különálló eseményeket rögzít fontossági szinttel (info, warn, error), de nem köti össze őket egyetlen kérés kontextusában. A tracing ezzel szemben strukturált műveleti fát hoz létre, amely egy végpontok közötti kéréshez tartozik. A gyakorlatban ez a két megközelítés nem zárja ki egymást, hanem kiegészíti.

A naplók hatékonyak egy adott hiba részletes elemzéséhez: a fejlesztő látja a pontos üzenetet, a veremkiírást, a változók értékeit. A tracing válaszol arra a kérdésre, hogy „miért tart a kérés 5 másodpercig” — megmutatja, melyik mikroszolgáltatás vagy hívás vett igénybe a legtöbb időt. A Honeycomb (2024) adatai szerint a tracinget naplózással együtt használó csapatok 2,3-szor gyorsabban találják meg az incidensek kiváltó okát.

A modern megközelítés — observability — egyesíti a trace-eket, metrikákat és naplókat egyetlen rendszerben. Az OpenTelemetry támogatja a korrelációt e három jel között: minden span tartalmazhat hivatkozásokat kapcsolódó naplókra, és a metrikák trace_id-vel jelölhetők a konkrét trace-ekhez való navigáláshoz.

Gyakran Ismételt Kérdések

Miben különbözik a tracing a monitorozástól?

A monitorozás összesített metrikákat mutat a rendszerről — átlagos válaszidő, hibák száma percenként, CPU-terhelés. A tracing egy adott kérés útvonalát mutatja az összes komponensen keresztül. A monitorozás a „mi történik” kérdésre válaszol, a tracing — „miért történik”.

A kérések hány százalékát kell trace-elni?

Production rendszerek esetén 1–5% kérés elegendő head-based sampling esetén. Ha a rendszer ritkán ad hibákat, a tail-based sampling ajánlott, amely az összes hibás trace rögzítésére összpontosít. Staging környezetben a kérések 100%-os trace-elése megengedett korlátozás nélkül.

Milyen eszközök támogatják a distributed tracinget?

A fő eszközök: Jaeger (Uber megoldás, nyílt forráskódú), Grafana Tempo (skálázható trace tároló), Datadog APM, New Relic Distributed Tracing, AWS X-Ray és Honeycomb. Mindegyik támogatja az OpenTelemetry szabványt az adatok fogadásához.

Lehet-e mobilalkalmazást trace-elni backend nélkül?

Igen, a helyi tracing egyetlen folyamaton belül működik. Az iOS és Android OpenTelemetry SDK spánokat hoz létre helyi műveletekhez: adatbázis olvasás, képfeldolgozás, hálózati kérések. Az ilyen trace-ek nem elosztottak, de hasznosak a kliens oldali teljesítmény diagnosztizálásához.

Hogyan befolyásolja a tracing az alkalmazás teljesítményét?

A modern tracing könyvtárak kevesebb mint 1%-os többletterhelést adnak head-based sampling esetén. Az OpenTelemetry aszinkron adatexportálást használ, ami nem blokkolja a fő szálat. Mobileszközök esetén javasolt a spánok létrehozásának gyakoriságát korlátozni és adaptív mintavételezési stratégiát használni.

Összefoglalás

  • Tracing — megfigyelési módszer, amely rögzíti minden kérés útvonalát az elosztott rendszer összes komponensén keresztül az egyes műveletek pontosságával.
  • Span — a trace elemi egysége, amely tartalmazza a művelet nevét, időtartamát, állapotát és attribútumait.
  • Distributed tracing — mechanizmus, amely különböző szolgáltatásokból származó spánokat köt össze a trace_id kontextusának átadásával.
  • OpenTelemetry — trace adatok gyűjtésének szabványa automatizált instrumentálás és több backend támogatásával.
  • Mintavételezés lehetővé teszi a mentett trace-ek mennyiségének szabályozását — head-based az egyszerűségért, tail-based a ritka hibák rögzítéséhez.
  • Tracing naplózással és metrikákkal kombinálva teljes képet ad a rendszer megfigyelhetőségéről.
  • A distributed tracing bevezetését a kritikus forgatókönyvekkel érdemes kezdeni — hitelesítés, fizetések, adatbetöltés — és fokozatosan kiterjeszteni az összes szolgáltatásra.

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is