SDK per la tracciabilità completa del framework basato sulla configurazione (.NET )
L'SDK Full Framework Trace di .NET, basato sulla configurazione, consente di specificare in modo dichiarativo gli span e i tag che devono contenere, nonché di crearli eseguendo determinati metodi dell'applicazione.
L'approccio dichiarativo è leggermente più espressivo rispetto all'uso dell'SDK di tracciamento basato sul codice, sebbene non offra tutte le funzionalità.
Prima di implementare il tracciamento personalizzato, leggi le best practice relative al tracciamento.
Dichiarazione di non responsabilità
L'SDK basato sulla configurazione è fragile rispetto alle modifiche nella tua applicazione. È possibile ridenominare una classe o un metodo e improvvisamente la configurazione non corrisponde più e si perdono i dati di traccia. Quando possibile, consigliamo di utilizzare l 'SDK completo del framework .NET, che è molto più resistente alle modifiche del codice e offre più funzionalità per aiutarti a raggiungere i tuoi obiettivi.
Configurazione
La configurazione è specificata nel configuration.yaml file.
1.1.44 CLR o nelle versioni successive. Nelle versioni precedenti a 1.1.47 si tratta di una funzione che deve essere attivata manualmente. Per attivarla, imposta la variabile d'ambiente INSTANA_CLR_SDKCONFIG su 1 . Le versioni >= 1.1.47 non necessitano più di questo parametro.Formato
Il seguente elenco descrive il formato generale della configurazione:
# .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
È possibile definire più destinazioni all'interno della chiave targets , ognuna delle quali specifica un'estensione da creare. L'oggetto match di uno target specifica il metodo a cui applicare la strumentazione. L'oggetto span specifica come creare lo span, compreso il suo nome (utilizzato, ad esempio, in Unbounded Analytics per il call.name filtro) e quali tag devono essere impostati.
Metodi di abbinamento allo strumento
Questo oggetto descrive il punto di codice in cui deve essere eseguita una strumentazione:
type: tipo di codice da strumentare; valori supportati:class, corrispondenza di una classe concreta
name: Nome completo della classe, dell'interfaccia o della classe base da cercare. Per le classi annidate, èa.b.c.OutsideClass$NestedClassrichiesta la notazionemethod: nome del metodo della classe, interfaccia o classe di base fornita di cui deve essere registrato un richiamoarguments: numero di argomenti utilizzati dal metodo (verranno associati solo i sovraccarichi con questo numero di argomenti). 0 se non viene passato alcun argomento.
Specificare l'aspetto delle campate
Questo oggetto descrive le proprietà dell'estensione che verrà creato se viene richiamato il metodo descritto in match :
name: nome estesotype: tipo di span (facoltativo); valori supportati:ENTRY, utilizzato per indicare chiamate "in entrata" da sistemi esterniINTERMEDIATE, utilizzato per catturare chiamate interne a metodi "interessanti" (valore predefinito)EXIT, utilizzato per indicare chiamate "in uscita" a sistemi esterni
tags: elenco di tag / annotazioni da catturare e come ottenerne i valori (facoltativo); valori supportati:constant, cattura un valore costantekind:constantname: nome della tag da crearevalue: valore costante del tag da creare
return, cattura il valore di ritorno del richiamo del metodokind:returnname: nome della tag da creare; il valore sarà il valore dell'oggetto restituito
argument, cattura un valore di argomento specifico del richiamo del metodokind:argumentname: nome della tag da creareindex: indice basato su 0 dell'argomento da catturare come valore della tag
null o Nullable<T> privo di valore, il tag definito non verrà aggiunto. È possibile cercare gli intervalli con tag mancanti in Unbounded Analytics utilizzando is not present l'operatore insieme al call.tag filtro.Intervalli errati
Se un Exception viene propagato al di fuori di un metodo strumentato, lo span verrà automaticamente contrassegnato come errato e il valore di Exception::Message verrà impostato come messaggio di errore, che potrai cercare in Unbounded Analytics tramite il call.error.message tag.
Esempio
Il seguente frammento mostra una configurazione di esempio della modalità di traccia di un'applicazione che gestisce i lavori batch:
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
Per prima cosa, il metodo ExecuteJob nella classe Example.BatchJobStarter viene strumentato per creare le voci con nome BatchJob, l'annotazione endpoint con il valore costante BatchJobe l'annotazione batch.job con il primo argomento come valore.
Inoltre, le chiamate DB in uscita durante l'elaborazione batch, ovvero i richiami del metodo ExecuteQuery in Example.ProprietaryDatabaseClient, creeranno le estrazioni di uscita con nome DatabaseCall e l'annotazione db.connection_string con il valore costante Data Source=SomeServer;Initial Catalog=SomeDB e l'annotazione db.statement con il primo argomento del richiamo del metodo.
L'elaborazione di un nuovo batch con ExecuteJob avvierà una nuova traccia e i successivi aggiornamenti DB con ExecuteQuery verranno elencati come elementi secondari al suo interno. Tutte le funzionalità di Instana, come Unbounded Analytics, possono essere utilizzate esattamente come le tracce create con Instana AutoTrace.
Limitazioni
Le seguenti restrizioni si applicano all'SDK Full Framework Trace di .NET basato sulla configurazione:
- La strumentazione dei costruttori non è supportata.
- L'implementazione di metodi statici non è supportata.
- L'avvio di un'estensione in un metodo e la sua chiusura in un altro metodo non è supportato; ossia, l'SDK basato sulla configurazione non ha un equivalente per
MethodPairInstrumentationutilizzato in autotrace - La cattura di tutti gli argomenti o del valore di ritorno senza la creazione esplicita di un
tagnon è supportata. - La specifica di modelli di nomi per classi o metodi non è supportata.
- Il ripristino di un contesto di traccia prima della creazione di un'estensione non è supportato