- Welke bewerking het request heeft gestart.
- Waar het request tijd heeft besteed.
- Welke onderliggende bewerking een fout heeft teruggegeven.
- Welke logs, issues, acties en metrics hetzelfde trace-ID hebben.
- Welke service, omgeving en release elke span heeft verzonden.
Velden van traces en spans
Een rootspan start een trace en heeft geen bovenliggende span. Onderliggende
spans hebben hetzelfde trace-ID, een eigen span-ID en het ID van hun
bovenliggende span. Alleen deze ID’s verbinden bewerkingen. Tijdstempels alleen
doen dat niet. LogBrew telt een span alleen als foutspan als de
status
error is.
Een request over meerdere services
- De webservice start een serverspan voor de checkoutroute.
- Een betaalclient maakt een onderliggende span voor zijn uitgaande HTTP-request.
- De betaalservice zet de trace voort met een eigen serverspan.
- Een databasehelper legt een onderliggende span vast voor de schrijfactie.
- De app verzendt een veilige foutlog binnen de actieve betaalspan.
Context doorgeven
De SDK’s van LogBrew gebruiken W3C-tracecontext. De Node.js-SDK zet bijvoorbeeld een geldige inkomende headertraceparent voort met een nieuwe
request-span. Ontbreekt de header of is hij ongeldig? Dan start de SDK een
nieuwe root. Logs, issues, acties en metrics die binnen dat request worden
vastgelegd, krijgen de trace van het request mee.
Uitgaande instrumentatie schrijft een header traceparent alleen naar de doelen
die je instelt, zoals in tracePropagationTargets. Verzend tracecontext alleen
naar vertrouwde, geïnstrumenteerde services. Een trace-ID correleert
bewerkingen. Het is geen authenticatie.
Ook een queuebericht kan tracecontext bevatten. Roep in Node.js
createLogBrewQueueTraceHeaders() aan in de bewerking van de producer. Die
voegt een header traceparent aan het bericht toe. Geef die header in de
consumer als traceparent door aan queueOperationWithLogBrewSpan(). Zie
Queue-tracing in JavaScript.
De integraties voor requests en uitgaande aanroepen in Node.js en Python leggen
in spans geen request- of responsebody’s, querystrings, willekeurige headers of
de ruwe waarde van traceparent vast. Geef spans de naam van een
routetemplate, niet van een concrete URL. Lees de
handleiding voor SDK-integratie voor de
integraties van jouw runtime.
Vastleggingsspans
LogBrew slaat elke nieuwe log, elk nieuw issue, elke nieuwe actie en elke nieuwe metric op met een trace-ID. Verwijst een signaal niet naar een span in dezelfde aflevering? Dan voegt LogBrew er één vastleggingsspan voor toe:
De
span_id van het signaal identificeert dan de vastleggingsspan. Had het
signaal geen tracecontext? Dan maakt LogBrew er een nieuw trace-ID voor. Die
trace toont dat LogBrew het signaal heeft opgeslagen. Een requestpad toont hij
niet. Lees de vastleggingsspans in één trace niet als één request.
Vastleggingsspans tellen mee in span_count en error_span_count. Daardoor kan
een foutlog ervoor zorgen dat --status error een trace selecteert waarin geen
enkele applicatiebewerking is mislukt. Lees de operation van elke foutspan
voordat je een conclusie trekt.
Een trace lezen
Gebruik een exact trace-ID uit een log, een issue of een lijst met traces:--status error selecteert traces met minstens één foutspan. --status ok
selecteert traces zonder foutspan. --min-duration-ms 500 selecteert traces
die 500 milliseconden of langer duurden.
Lees eerst de duur van de rootspan. Onderzoek daarna de langste onderliggende
spans en de foutstatussen. Houd het project, de service, de omgeving en de
release in beeld, zodat een trace uit staging geen bewijs over productie wordt.
Eén trace toont één uitvoering, geen referentiepunt voor de prestaties.
Vergelijk meerdere traces met de bijbehorende trend in de metric voordat je een
prestatiewijziging voorstelt.
Samenvatting van een trace
GET /api/telemetry/traces/{trace_id}/summary geeft een samenvatting zonder
span-attributen terug:
Heeft
root_span.parent_span_id een waarde? Dan zit de echte rootspan niet in
de trace. Lees root_span in dat geval niet als het begin van het request.
Een trace uitleggen
logbrew explain trace geeft een onderzoek van een trace terug:
analysis.causality is evidence_only. De analyse bewijst geen grondoorzaak.
De CLI vraagt responseversie 3 op. Daarin heeft elk gerelateerd issue, elke
gerelateerde actie en elke gerelateerde metric ook een exacte span_id.
Voer dit uit om één span te onderzoeken met de bovenliggende span, de
onderliggende spans en de servicegrenzen:
topology.parent_chain_status vertelt of de keten van bovenliggende spans
compleet is:
Ontbrekende tracecontext
Niet elk event heeft een trace van zijn request. Lees de status van de trace:not_linked is geen fout. Ook een trace met available kan laten zien dat het
event geen requestcontext had. Heeft de vastleggingsspan van het event geen
parent_span_id? Dan was er geen span actief toen de app het event vastlegde.
Achtergrondwerk buiten een request geeft vaak dit resultaat. Zo vind je een
ontbrekende relatie:
- Lees het project, de service, de omgeving, de release en het tijdstip van het event.
- Controleer of het werk binnen een geïnstrumenteerd request of een geïnstrumenteerde bewerking liep.
- Controleer of de client- en serverintegraties de context over die grens doorgeven.
- Leg na het corrigeren van de instrumentatie een nieuw event vast en lees het.
Tracing plannen voor één project
Begin met één belangrijk request of één belangrijke job, zoals de checkout. Instrumenteer één grens tegelijk:- Maak een span voor het inkomende request of de achtergrondbewerking.
- Voeg onderliggende spans toe voor belangrijke uitgaande aanroepen.
- Zet de W3C-tracecontext voort over vertrouwde servicegrenzen.
- Verzend een veilige log binnen de actieve span.
- Lees die log, open het trace-ID ervan en controleer de root, de onderliggende spans, de service, de omgeving, de release, de status en de duur.
logbrew traces --project "<project_id>" --pagination cursor --json uit
om de namen van spans te controleren. Het object naming_quality telt de
traces op die pagina met een generieke rootnaam (generic_name_traces) of een
niet-herkende route (unmatched_route_traces). Heeft de naamgeving aandacht
nodig? Dan is naming_quality.next_action.code gelijk aan
improve_trace_naming.