Kit SDK .NET Full Framework Trace basé sur la configuration
Le kit SDK .NET Full Framework Trace basé sur la configuration permet une spécification déclarative des spans, et des balises qu'elles doivent porter, et de les créer en exécutant certaines méthodes de votre application.
L'approche déclarative est légèrement plus expressive que l'utilisation du SDK de traçage basé sur le code, même si elle n'offre pas toutes les fonctionnalités.
Avant de mettre en place un traçage personnalisé, consultez les bonnes pratiques en matière de traçage.
Limitation de responsabilité
Le kit SDK basé sur la configuration est fragile face aux modifications de votre application. Vous pouvez renommer une classe ou une méthode, et soudainement, la configuration ne correspond plus, et vous perdez vos données de traçage. Dans la mesure du possible, nous vous recommandons d'utiliser le SDK complet du framework « .NET », qui s'adapte bien mieux aux modifications du code et offre davantage de fonctionnalités pour vous aider à atteindre vos objectifs.
Configuration
La configuration est définie dans le configuration.yaml fichier.
1.1.44 CLR ou une version ultérieure. Avec les versions antérieures à la version 1.1.47, il s'agit d'une fonction optionnelle. Pour l'activer, définissez la variable d'environnement INSTANA_CLR_SDKCONFIG sur 1 afin de l'activer. La version >= 1.1.47 n'a plus besoin de ce commutateur.Format
La liste suivante décrit le format général de la configuration :
# .NET Full Framework Tracing
com.instana.plugin.clr:
instrumentation:
sdk:
targets:
- match:
type: class
class: '<type-name>'
method: '<method-name>'
arguments: <number of arguments>
span:
name: '<span-name>'
type: 'ENTRY' | 'EXIT' | 'INTERMEDIATE'
tags:
- name: '<name of tag>'
kind: argument
index: <0-based index of the method's argument>
- name: '<name of tag>'
kind: constant
value: '<constant value>'
- name: '<name of tag>'
kind: return
Plusieurs cibles peuvent être définies dans la clé targets, chacune indiquant un span à créer. L'objet match d'une méthode target permet de déterminer à quelle méthode l'instrumentation doit s'appliquer. L'objet span indique comment générer le span, y compris son nom (qui est utilisé, par exemple, dans Analyse illimitée pour le filtre call.name), ainsi que les balises qui doivent être définies.
Correspondance des méthodes à instrumenter
Cet objet décrit le point de code auquel une instrumentation doit avoir lieu :
type: type du code à instrumenter. Valeurs prises en charge :class, correspondance avec une classe concrète
name: Nom complet de la classe, de l'interface ou de la classe de base à rechercher. Pour les classes imbriquées, la notationa.b.c.OutsideClass$NestedClassest requisemethod: nom de la méthode de la classe, de l'interface ou de la classe de base spécifiée dont un appel doit être enregistréarguments: nombre d'arguments admis par la méthode (seules les surcharges avec ce nombre d'arguments seront mises en correspondance). 0 si aucun argument n'est transmis.
Spécification de la présentation des spans
Cet objet décrit les propriétés du span qui sera créé si la méthode décrite dans match est appelée :
name: nom du spantype: type de span. Valeurs prises en charge :ENTRY, utilisé pour indiquer les appels « entrants » depuis les systèmes externesINTERMEDIATE, utilisé pour capturer les appels internes aux méthodes « intéressantes » (par défaut)EXIT, utilisé pour indiquer les appels « sortants » vers les systèmes externes
tags: liste des balises/annotations à capturer et comment obtenir leurs valeurs (facultatif). Valeurs prises en charge :constant, capture une valeur constantekind:constantname: nom de la balise à créervalue: valeur constante de la balise à créer
return, capture la valeur de retour de l'appel de méthodekind:returnname: nom de la balise à créer. La valeur est la valeur de l'objet renvoyé
argument, capture une valeur d'argument spécifique de l'appel de méthodekind:argumentname: nom de la balise à créerindex: index basé sur 0 de l'argument à capturer en tant que valeur de la balise
null ou Nullable<T> sans valeur, la balise définie ne sera pas ajoutée. Les périodes pour lesquelles il manque des balises peuvent être recherchées dans Unbounded Analytics à l'aide de is not present l'opérateur associé au call.tag filtre.Spans erronés
Si une valeur Exception sort du cadre d'une méthode instrumentée, la plage sera automatiquement signalée comme erronée, et la valeur de Exception::Message sera définie comme message d'erreur, que vous pourrez rechercher dans Unbounded Analytics à l'aide de la call.error.message balise.
Exemple
L'extrait de code suivant montre un exemple de configuration de la façon dont une application traitant des travaux par lots peut être tracée :
com.instana.plugin.clr:
instrumentation:
sdk:
targets:
- match:
type: class
class: Example.BatchJobStarter
method: ExecuteJob
arguments: 1
span:
name: BatchJob
type: ENTRY
tags:
- name: endpoint
kind: constant
value: BatchJob
- name: batch.job
kind: argument
index: 0
- match:
type: class
class: Example.ProprietaryDatabaseClient
method: ExecuteQuery
arguments: 1
span:
name: DatabaseCall
type: EXIT
tags:
- name: db.connection_string
kind: constant
value: 'Data Source=SomeServer;Initial Catalog=SomeDB'
- name: db.statement
kind: argument
index: 0
Tout d'abord, la méthode ExecuteJob dans la classe Example.BatchJobStarter est instrumentée pour créer des spans d'entrée avec le nom BatchJob, l'annotation endpoint avec la valeur constante BatchJob et l'annotation batch.job avec le premier argument comme valeur.
En outre, les appels de base de données sortants pendant le traitement par lots, c'est-à-dire les appels de la méthode ExecuteQuery dans Example.ProprietaryDatabaseClient, créeront des spans de sortie portant le nom DatabaseCall et l'annotation db.connection_string avec la valeur constante Data Source=SomeServer;Initial Catalog=SomeDB et l'annotation db.statement avec le premier argument de l'appel de méthode.
Le traitement d'un nouveau lot avec ExecuteJob démarrera une nouvelle trace, et les mises à jour ultérieures de la base de données avec ExecuteQuery y seront répertoriées en tant que spans enfants. Toutes les fonctions Instana, comme l'Analyse illimitée, peuvent être utilisées de la même manière que les traces créées avec Instana AutoTrace.
Limitations
Les restrictions suivantes s'appliquent au kit SDK .NET Full Framework Trace basé sur la configuration :
- L'instrumentation des constructeurs n'est pas prise en charge.
- L'instrumentation des méthodes statiques n'est pas prise en charge.
- Le démarrage d'un span dans une méthode et sa fermeture dans une autre ne sont pas pris en charge, c'est-à-dire que le kit SDK basé sur la configuration n'a pas d'équivalent pour
MethodPairInstrumentationutilisé dans l'autotrace. - La capture de tous les arguments ou de la valeur de retour sans la création explicite d'un
tagn'est pas prise en charge. - La spécification de modèles de noms pour les classes ou les méthodes n'est pas prise en charge.
- La restauration d'un contexte de trace avant la création d'un span n'est pas prise en charge.