Eventi di telemetria per Microsoft Dataverse
Il flusso dei dati attualmente fornisce dati sulle prestazioni relativi alle chiamate in arrivo dell'API Dataverse, alle chiamate di esecuzione del plug-in Dataverse e alle chiamate dell'SDK Dataverse. Fornisce anche dati relativi a errori nelle operazione dell'SDK Dataverse e del plug-in.
Chiamate in arrivo dell'API Dataverse
Queste sono le chiamate all'API Dataverse. Possono provenire da Unified Interface (UCI), dal client Web legacy, da client personalizzati che utilizzano l'SDK e così via. Si trovano nella tabella richieste di Application Insights, che ha i seguenti campi.
Nome: Tipo di richiesta. Rientrano in due categorie:
- Richiesta API Web: una richiesta all'OData v4 endpoint comunemente utilizzata da Unified Interface e dai client moderni. Questa richiesta viene trasformata in un'operazione comune ad entrambi. L'API Web è un "wrapper" per abilitare il modello di programmazione RESTful, ma dopo la ricezione dei dati, tutto diventa uguale nel server. La risposta restituita viene convertita in JSON se la richiesta proviene dall'API Web.
- Richiesta di servizio organizzazione: una richiesta all'API organizzazione endpoint utilizzata dai client SDK o dal client Web legacy.
Durata: tempo impiegato dal server per rispondere alla richiesta.
Url: URL a cui è stata effettuata la chiamata.
Dimensioni personalizzate:
UserAgent: Application Insights popola automaticamente il campo user agent con PC quando questi registri vengono inviati da un server in un data center. Application Insights non consente l'override del campo agente utente. A volte, il campo dell'agente utente non può essere popolato. L'agente utente da cui è stata effettuata la chiamata può essere visualizzato utilizzando la seguente query:
requests | summarize count() by tostring(customDimensions.userAgent)
Operation_Name: Nome leggibile dell'operazione da visualizzare nelle viste, ad esempio nella vista della transazione end-to-end.
Log delle esecuzioni del plug-in Dataverse
Questi log per i plug-in personalizzati in esecuzione per una determinata operazione si trovano nella tabella dipendenza. Quella che segue è una query di esempio:
dependencies
| where type == "Plugin"
| take 100
- Nome/Destinazione: Nome del tipo completo per il plug-in in esecuzione.
- Durata: tempo impiegato per l'esecuzione del plug-in.
- Dimensioni personalizzate:
- Profondità: la profondità corrente dell'esecuzione nello stack delle chiamate.
- EntityName: Nome dell'entità su cui agisce il plug-in.
- IsolationType: Un valore che indica se il plug-in è in esecuzione nella sandbox:
- 1: Nessuno
- 2: Sandbox
- 3: Esterno
- PluginName: Nome descrittivo del plug-in.
- PluginType: Nome del tipo di plug-in in esecuzione.
- PluginVersion: la versione del plug-in pubblicato. L'intenzione è quella di poter utilizzare queste informazioni per risolvere i problemi relativi agli aggiornamenti di versione.
- Fase: corrisponde ai seguenti valori:
- PreValidation = 10
- PreOperation = 20
- PreOperationBeforeExternalPlugins = 15
- PreOperationAfterExternalPlugins = 25
- MainOperation = 30
- PostOperationBeforeExternalPlugins = 35
- PostOperationAfterExternalPlugins = 45
- PostOperation = 40
- PostOperationDeprecated = 50
- StepName: Nome dell'elaborazione dei messaggi SDK passaggio. Di solito viene generato dallo strumento per la registrazione del plug-in mediante le informazioni PluginName, PluginType e il nome dell'operazione, ad esempio ErrorMessageTest.ThrowException: creazione dell'account.
Telemetria nel codice del plug-in
Per capire cosa sta accadendo all'interno del codice del plug-in, puoi includere dati di telemetria personalizzati all'interno del plug-in utilizzando l'interfaccia .Xrm.Sdk.PluginTelemetry.ILogger nel codice del plug-in per scrivere i dati di telemetria direttamente nella risorsa. Microsoft Application Insights Maggiori informazioni: Scrivere dati di telemetria nella risorsa Application Insights utilizzando ILogger (anteprima)
Log dell'SDK Dataverse
Questi sono i log per le operazioni SDK attivate nell'ambito di una richiesta in entrata. Questi sono registrati nella tabella dipendenza in Application Insights, poiché vengono registrati come dipendenze per la richiesta da eseguire. Sono identificati dal nome del tipo, che inizia con SDK. Quella che segue è una query di esempio:
dependencies
| where type startswith "SDK"
| take 10
- Tipo: tipo di richiesta SDK attivata. Gli esempi includono Retrieve, RetrieveMultiple, FetchXmlToQueryExpression e WhoAmI.
- Nome/Destinazione: questo è il nome dell'entità a cui è destinata l'operazione SDK.
- Dimensioni personalizzate:
- ClientType: Tipo di client da cui proviene la chiamata. Alcuni valori possibili sono Web, UCIClient e OutlookFull.
- EntityId: Identificatore univoco dell'entità utilizzata.
- EntityName: Nome dell'entità utilizzata.
Eccezioni
Verranno visualizzati i dettagli degli errori nelle operazioni SDK e del plug-in in Application Insights. La tabella eccezioni in Application Insights alimenta il pannello Errori. Questi dettagli sull'errore sono correlati al resto degli eventi nelle chiamate del plug-in e dell'SDK nella visualizzazione end-to-end. Tutte le informazioni disponibili vengono aggiunte alle colonne quando possibile e a customDimensions quando non esiste una corrispondenza esatta della colonna.
Noterai che alcuni dei campi nella tabella eccezioni non sono popolati. Questo perché tali campi possono essere impostati solo se l'SDK di Application Insights viene utilizzato per emettere log dall'origine. Questa funzionalità raccoglie i dati di telemetria della piattaforma e ne esegue il push in Application Insights in conformità con lo schema di Application Insights.
exceptions
| take 10
Questa query restituirà tutti i dettagli dell'attributo dalla tabella eccezioni.
- problemId/type: Tipo di eccezione.
- outerMessage: Messaggio di eccezione.
- Dimensionipersonalizzate:
- clientType: Tipo di client da cui proviene la chiamata. Alcuni valori possibili sono Web, UCIClient e OutlookFull.
- exceptionSource: Il plug-in o puntare in cui è stata generata l'eccezione.
- entityName: Nome dell'entità utilizzata.
- pluginName: Nome del plug-in in cui è stata generata l'eccezione.
Se un utente segnala un errore, puoi utilizzare l'ID utente (ID di Microsoft Entra ID) per comprendere i dettagli della tabella eccezioni.
exceptions
| where user_Id == '00aa00aa-bb11-cc22-dd33-44ee44ee44ee'
L'ID entità e il nome dell'entità sono disponibili in customDimensions nella tabella dipendenze.
dependencies
| where type == "SDK Retrieve"
Domande frequenti
Di seguito sono riportate alcune domande frequenti relative agli eventi di telemetria per Dataverse.
Come posso determinare se l'aggiornamento del plug-in ha causato un peggioramento delle prestazioni?
dependencies
| where ['type'] == "Plugin"
| where name startswith "[InsertYourPluginName]"
| summarize avg(duration) by name
Il nome del plug-in deve contenere anche la versione per i plug-in personalizzati.
Quali erano le prestazioni dell'API prima di un problema segnalato, in base all'ora del giorno o al luogo? La degradazione dell'API è stata graduale o improvvisa?
requests
| where url == "https://<URLHere>"
| summarize avg(duration), count() by bin(timestamp, 1h)
| render timechart
In questo grafico, possiamo vedere le prestazioni dell'endpoint API in un periodo di tempo rispetto al numero di richieste effettuate.
Puoi anche impostare un avviso in base alle prestazioni di una particolare API qui in Application Insights.
Posso eseguire il drill-down degli errori in determinati momenti o per utenti specifici per comprendere dello stack di chiamate?
Il pannello Errori fornisce una panoramica degli errori in un determinato periodo di tempo. È quindi possibile visualizzare uno specifico errore in base alla chiamata API o al tipo di dipendenza per visualizzare la visualizzazione end-to-end.
Posso creare dashboard personalizzati?
Sì. Puoi creare dashboard personalizzati con Application Insights.
Posso determinare le prestazioni di utilizzo del plug-in (tempo di risposta) e i tassi di errore durante i picchi di utilizzo?
Sì. Consulta la seguente query di esempio per capire come si comportano i plug-in.
dependencies
| where ['type'] == "Plugin"
| where name == "[Plugin name here]"
| summarize avg(duration) by bin(timestamp, 1h)
| render timechart
Esiste una limitazione per questa telemetria?
Sì. Attualmente vengono forniti i dettagli dell'errore di base 429.
È possibile comprendere i percorsi di esecuzione? Le chiamate effettuate dal plug-in rallentano il plug-in?
Sì. Puoi visualizzare tutti i messaggi e i plug-in eseguiti per qualsiasi richiesta.
Viene registrata la durata di tutti i messaggi e l'esecuzione dei plug-in. Se un plug-in richiede più tempo, puoi identificarlo. Se il plug-in sta effettuando una richiamata a Dataverse, la durata della chiamata viene registrata. Ulteriori informazioni sui plug-in sono previste per distribuzioni future.
Qualsiasi chiamata in uscita effettuata dal plug-in verrà automaticamente registrata come dipendenza.
Posso visualizzare la telemetria per una richiesta specifica?
Dataverse restituisce x-ms-service-requestId nella risposta dell'intestazione a tutte le richieste. Usando questo requestId, puoi eseguire query per tutti i dati di telemetria.
union *
| where operation_ParentId contains <requestId>