🛟 Aarzel niet om contact met ons op te nemen als u problemen tegenkomt
bij het implementeren van aangepaste instrumentaties. We helpen u graag!
Installatie
Om de helperfuncties van AppSignal in uw instrumentatie te gebruiken, moet u eerstopentelemetry importeren en een tracer-object definiëren. Afhankelijk van uw instrumentatie moet u mogelijk ook aanvullende spans aanmaken.
Onze Voorbeelden van use cases laten zien hoe u tracers, spans en helpers kunt gebruiken om uw aangepaste instrumentatie te maken.
OpenTelemetry importeren en tracer definiëren
De AppSignal-integratie voor Node.js gebruikt OpenTelemetry tracer-objecten. Deze tracers bevatten diverse functies voor het maken van aangepaste instrumentaties. De Tracer biedt functies voor het aanmaken en creëren van nieuwe spans. Deze documentatie beschrijft hoe u tracers en spans kunt gebruiken om uw aangepaste integratie te implementeren. U moet eerst het trace-object importeren uit@opentelemetry/api voordat u met tracers en spans gaat werken. Door de functie getTracer op het trace-object aan te roepen, kan een nieuw tracer-object worden aangemaakt. U moet uw tracer-object in deze functie een naam geven, zoals te zien in het onderstaande voorbeeld, waar de functie getTracer wordt gebruikt om een tracer met de naam "my interesting app" te definiëren.
Spans
Een span is de naam van het object dat we gebruiken om gegevens vast te leggen over de prestaties van uw applicatie, eventuele fouten en de omringende context. Een span maakt deel uit van een bredere trace, een hiërarchische weergave van de datastroom door uw applicatie. Spans houden de start- en eindtijd van een gebeurtenis bij, samen met andere informatie zoals de naam of andere gerelateerde gegevens. U kunt meer lezen over spans in de OpenTelemetry Tracing-documentatie.Een actieve span aanmaken
Nieuwe spans kunnen worden aangeroepen via het trace-object. Code die binnen een Express- of Koa-handler wordt geïnstrumenteerd, bevindt zich al binnen een span. U kunt nieuwe spans aanmaken door de functiestartActiveSpan() op het tracer-object aan te roepen. Nieuw aangemaakte spans worden het kind van de span waarin ze zijn aangemaakt, als die bestaat. U kunt onderliggende spans gebruiken om de prestaties te meten van taken die binnen een bovenliggende span worden uitgevoerd.
Geef uw span een naam die het doel duidelijk maakt. Voer alle taken die u wilt monitoren uit binnen de functie startActiveSpan(), zoals in het onderstaande voorbeeld.
span.end()
Voorbeelden van use cases
Bij het implementeren van aangepaste instrumentatie kunt u nieuwsgierig zijn naar het gedrag van bepaalde functies, bijvoorbeeld hoe lang het duurt om ze uit te voeren.Helpers gebruiken
In het onderstaande voorbeeld zijn we nieuwsgierig naar de prestaties van ons “order-coffee” GET-endpoint voor verschillende koffiebrandingen. Om dit te onderzoeken gebruiken we de functiesetAttribute om een tag met de naam flavor aan te maken, waarvan we de waarde uit de request parameters halen.
Let op: Omdat dit zich binnen een Express request handler bevindt, is er al een root-span aangemaakt.
"picking coffee beans" die in de functie pickCoffeeBeans is gedefinieerd.
Zodra het attribuut is toegewezen en alle functies zijn uitgevoerd, beëindigen we de span met .end() om te garanderen dat AppSignal de start- en eindtijd en de door ons toegekende attributen ontvangt:

Actieve spans
Hoewel tags nuttig zijn om prestatieverschillen op dezelfde functie te analyseren, geven ze geen inzicht in de prestaties van eventuele functies die vanuit onze functie worden aangeroepen. Om ons meer inzicht te geven in wat er binnenpickCoffeeBeans() gebeurt, maken we een nieuwe activeSpan aan en geven deze de naam “picking coffee beans”. Alle logica die we willen volgen, wordt uitgevoerd binnen een async-functie.
We await de promise die door retrieveDrinkTypes() wordt teruggegeven, zodat we de prestaties ervan kunnen volgen als onderliggende span van de span "picking coffee beans" die we in pickCoffeeBeans() hebben aangemaakt.
pickCoffeeBeans(), met inbegrip van de prestatiegegevens van de functie retrieveDrinkTypes(), waardoor u meer inzicht krijgt in welke factoren de algehele prestaties van een functie beïnvloeden.
Helpers
Om helperfuncties te gebruiken, moet u ze eerst importeren uit@appsignal/nodejs. In het onderstaande voorbeeld wordt de namespace waarin de code wordt uitgevoerd aan AppSignal gerapporteerd. Alle beschikbare helperfuncties worden beschreven in de onderstaande documentatie.
Helperfuncties
- Namespace
- Tag
- Request Parameters
- Set Session Data
- Request Headers
- Root Name
- Custom Data
- Helpers voor onderliggende spans:
Namespace
Stelt de stringwaarde in van de namespace van de root-span.Tag
Stelt een tag in, bijvoorbeeld op basis van een request parameter, die als filter kan worden gebruikt binnen de AppSignal-applicatie. In het onderstaande voorbeeld maken we een tag met de naam color en de waarde blue. U kunt tags configureren met namen die relevant zijn voor de context van uw applicatie.Request Parameters
Een object dat serialiseerbaar is naar JSON. Binnenkomende request parameters, request body en query parameters.Set Session Data
Een object dat serialiseerbaar is naar JSON.Request Headers
Een string die de headerwaarde bevat.Root Name
Stelt u in staat om de naam van de trace in te stellen. Samples worden op basis van hun trace-naam in acties gegroepeerd.Voorbeeld-use case
Uw applicatie heeft een endpoint genaamdGET /coffee.
GET /coffee, maar uw endpoint handelt meerdere acties af: coffee?action=buy en coffee?action=sell.

GET /coffee gebruiken, zijn ze conceptueel zeer verschillend en dus zou het logisch zijn ze in AppSignal apart te groeperen in plaats van in hetzelfde GET /coffee-sample. Hiervoor kunt u de helper setRootName() gebruiken:
setRootName te gebruiken, verandert de naam van de root-span, waardoor de samples voor de requests coffee?action=buy en coffee?action=sell in afzonderlijke acties worden gegroepeerd:

Custom Data
Een object dat serialiseerbaar is naar JSON.Helpers voor onderliggende spans
De volgende helpers zijn alleen van toepassing op onderliggende spans. Om een onderliggende span aan te maken, moet u een nieuwe actieve span creëren. Nieuwe spans zijn automatisch kinderen van hun bovenliggende span.Category
Een string die de categorie van de onderliggende span bevat. De naam moet. gebruiken om de hiërarchische overerving van de categorie uit te drukken. Bijvoorbeeld: cafe.coffee.cupsize
Name
Een string die de titel van de onderliggende span in de event timeline bevat.Body
De body van de span kan aanvullende informatie over de gebeurtenis bevatten, zoals het HTTP-request, de verbonden host, enz. Zorg ervoor dat u de informatie schoont voordat u deze aan de span toevoegt, zodat er geen persoonlijk identificeerbare informatie naar AppSignal wordt verstuurd. Deze informatie is voor de span zichtbaar wanneer u over de event timeline beweegt. Om SQL-queries in de body van de span op te slaan, gebruikt u in plaats hiervan desetSqlBody-helper.
SQL body
Stel een SQL-query in als de body van de span zoals deze verschijnt in de event timeline van prestatie-events in de detailweergave van het incident-sample. Dit is vergelijkbaar met desetBody-helper, maar is gespecialiseerd voor SQL-queries. Elke SQL-query die met dit attribuut als body wordt ingesteld, wordt geschoond om te voorkomen dat PII-gegevens (persoonlijk identificeerbare informatie) naar onze servers worden verzonden.
Zie de setBody-helper voor meer details over hoe het body-attribuut werkt.
Wanneer zowel de setBody- als de setSqlBody-helper op dezelfde span worden aangeroepen, is de waarde van de setSqlBody-helper leidend en wordt de waarde van de setBody-helper genegeerd.