Analizzare i dati di telemetria di Funzioni di Azure in Application Insights

Funzioni di Azure si integra con Application Insights per offrire un monitoraggio migliore delle app per le funzioni. Application Insights raccoglie i dati di telemetria generati dall'app per le funzioni, incluse le informazioni che l'app scrive nei log. L'integrazione di Application Insights viene in genere abilitata quando viene creata l'app per le funzioni. Se l'app per le funzioni non dispone del set di chiavi di strumentazione, è prima necessario abilitare l'integrazione di Application Insights.

Per impostazione predefinita, i dati raccolti dall'app per le funzioni vengono archiviati in Application Insights. Nel portale di Azure, Application Insights offre un set completo di visualizzazioni dei dati di telemetria. È possibile esaminare i log degli errori e eseguire query su eventi e metriche. Questo articolo fornisce esempi di base su come visualizzare ed eseguire query sui dati raccolti. Per altre informazioni sull'esplorazione dei dati dell'app per le funzioni in Application Insights, vedere Informazioni su Application Insights.

Per poter visualizzare i dati di Application Insights da un'app per le funzioni, è necessario disporre almeno delle autorizzazioni di ruolo Collaboratore per l'app per le funzioni. È anche necessario disporre dell'autorizzazione Lettore di monitoraggio per l'istanza di Application Insights. Queste autorizzazioni sono disponibili per impostazione predefinita per qualsiasi app per le funzioni e per l'istanza di Application Insights creata.

Per altre informazioni sulla conservazione dei dati e sui potenziali costi di archiviazione, vedere Raccolta, conservazione e archiviazione dei dati in Application Insights.

Visualizzazione dei dati di telemetria nella scheda Monitoraggio

Con l'integrazione di Application Insights abilitata, è possibile visualizzare i dati di telemetria nella scheda Monitor.

  1. Nella pagina dell'app per le funzioni selezionare una funzione eseguita almeno una volta dopo la configurazione di Application Insights, quindi selezionare Monitor nel riquadro a sinistra. Selezionare Aggiorna periodicamente fino a quando non viene visualizzato l'elenco di chiamate di funzione.

    Elenco di chiamate

    Nota

    La visualizzazione dell'elenco può richiedere fino a 5 minuti, il tempo necessario al client di telemetria di configurare in batch i dati da trasmettere al server. Questo ritardo non si applica al servizio Live Metrics Stream, che si connette all'host di Funzioni mentre si carica la pagina e, quindi, i log vengono trasmessi direttamente alla pagina.

  2. Per visualizzare i log per una chiamata di funzione particolare, selezionare il collegamento alla colonna Data (UTC) per la chiamata. L'output di registrazione per tale chiamata viene visualizzato in una nuova pagina.

    Dettagli della chiamata

  3. Scegliere Esegui in Application Insights per visualizzare l'origine della query che recupera i dati di log di Monitoraggio di Azure nel log di Azure. Se è la prima volta che si usa Azure Log Analytics nella propria sottoscrizione, viene chiesto di abilitarlo.

  4. Dopo aver abilitato Log Analytics, viene visualizzata la query seguente. È possibile notare che i risultati della query sono limitati agli ultimi 30 giorni (where timestamp > ago(30d)) e i risultati non mostrano più di 20 righe (take 20). Al contrario, l'elenco dei dettagli delle chiamate alla funzione è relativo agli ultimi 30 giorni senza alcun limite.

    Elenco di chiamate di analisi di Application Insights

Per altre informazioni, vedere Eseguire query sui dati di telemetria più avanti in questo articolo.

Visualizzare i dati di telemetria in Application Insights

Per aprire Application Insights da un'app per le funzioni nel portale di Azure:

  1. Passare all'app per le funzioni nel portale.

  2. Selezionare Application Insights in Impostazioni nella pagina a sinistra.

  3. Se è la prima volta che si usa Application Insights con la sottoscrizione, verrà richiesto di abilitarlo. A tale scopo, selezionare Attiva Application Insights e quindi selezionare Applica nella pagina successiva.

Aprire Application Insights dalla pagina di panoramica dell'app per le funzioni

Per informazioni su come usare Application Insights, vedere la documentazione su Application Insights. Questa sezione mostra alcuni esempi su come visualizzare i dati in Application Insights. Se si ha già familiarità con Application Insights, è possibile passare direttamente alle sezioni sulla configurazione e la personalizzazione dei dati di telemetria.

Scheda di panoramica di Application Insights

Le aree di Application Insights seguenti possono essere utili durante la valutazione del comportamento, delle prestazioni e degli errori delle funzioni:

Indagine Descrizione
Errori È possibile creare grafici e avvisi in base agli errori di funzione e alle eccezioni del server. Il nome dell'operazione corrisponde al nome della funzione. Gli errori nelle dipendenze non vengono mostrati a meno che non si implementino i dati di telemetria personalizzati per le dipendenze.
Prestazioni È possibile analizzare i problemi di prestazioni visualizzando l'utilizzo delle risorse e la velocità effettiva per le Istanze del ruolo del cloud. Questi dati sulle prestazioni possono essere utili negli scenari di debug in cui le funzioni bloccano le risorse sottostanti.
Metriche È possibile creare grafici e avvisi basati sulle metriche, che includono il numero di chiamate di funzione, il tempo di esecuzione e le percentuali di riuscita.
Metriche attive È possibile visualizzare i dati delle metriche così come vengono creati quasi in tempo reale.

Query sui dati di telemetria

Analytics di Application Insights consente di accedere a tutti i dati di telemetria sotto forma di tabelle in un database. Analytics offre un linguaggio di query per l'estrazione, la manipolazione e la visualizzazione dei dati.

Scegliere Log per esplorare o eseguire una query in merito agli eventi registrati.

Esempio di Analytics

Questo è un esempio che mostra la distribuzione delle richieste per ruolo di lavoro negli ultimi 30 minuti.

requests
| where timestamp > ago(30m) 
| summarize count() by cloud_RoleInstance, bin(timestamp, 1m)
| render timechart

Le tabelle disponibili vengono mostrate nella scheda Schema a sinistra. Nelle tabelle seguenti è possibile trovare i dati generati dalle chiamate alla funzione:

Tabella Descrizione
traces Log creati dal runtime, dal controller di scalabilità e dalle tracce dal codice della funzione. Per l'hosting del piano a consumo Flex, traces include anche i log creati durante la distribuzione del codice.
requests una richiesta per ogni chiamata alla funzione.
exceptions tutte le eccezioni generate dal runtime.
customMetrics numero di chiamate con esito positivo e negativo, percentuale di riuscita, durata.
customEvents Eventi rilevati dal runtime, ad esempio richieste HTTP che attivano una funzione.
performanceCounters informazioni sulle prestazioni dei server su cui sono in esecuzione le funzioni.

Le altre tabelle sono riservate ai test di disponibilità e ai dati di telemetria del browser e del client. È possibile implementare i dati di telemetria personalizzati per aggiungerne altri.

All'interno di ogni tabella alcuni dati specifici per Funzioni si trovano nel campo customDimensions. Ad esempio, la query seguente recupera tutte le tracce con livello di registrazione Error.

traces 
| where customDimensions.LogLevel == "Error"

Il runtime fornisce i campi customDimensions.LogLevel e customDimensions.Category. È possibile specificare campi aggiuntivi nei log in cui si scrive il codice funzione. lPer un esempio in C#, vedere la registrazione strutturata nella Guida per sviluppatori della libreria di classi .NET.

Chiamate di funzione di query

A ogni chiamata di funzione viene assegnato un ID univoco. InvocationId è incluso nella dimensione personalizzata e può essere usato per correlare tutti i log di una determinata esecuzione di una funzione.

traces
| project customDimensions["InvocationId"], message

Correlazione di dati di telemetria

È possibile correlare i log di funzioni diverse usando operation_Id. Usare la query seguente per restituire tutti i log per un'operazione logica specifica.

traces
| where operation_Id == '45fa5c4f8097239efe14a2388f8b4e29'
| project timestamp, customDimensions["InvocationId"], message
| order by timestamp

Percentuale di campionamento

È possibile usare la configurazione di campionamento per ridurre il volume dei dati di telemetria. Usare la query seguente per determinare se il campionamento è operativo o meno. Se si nota che RetainedPercentage per qualsiasi tipo è minore di 100, il tipo di dati di telemetria è sottoposto a campionamento.

union requests,dependencies,pageViews,browserTimings,exceptions,traces
| where timestamp > ago(1d)
| summarize RetainedPercentage = 100/avg(itemCount) by bin(timestamp, 1h), itemType

Eseguire query sui log del controller di scalabilità

Questa funzionalità è in anteprima.

Dopo aver abilitato sia registrazione del controller di scalabilità che integrazione di Application Insights, è possibile usare la ricerca log di Application Insights per eseguire query sui log del controller di scalabilità generati. I log del controller di scalabilità vengono salvati nella raccolta nella traces categoria ScaleControllerLogs.

La query seguente può essere usata per cercare tutti i log del controller di scalabilità per l'app per le funzioni corrente entro il periodo di tempo specificato:

traces 
| extend CustomDimensions = todynamic(tostring(customDimensions))
| where CustomDimensions.Category == "ScaleControllerLogs"

La query seguente si espande sulla query precedente per mostrare come ottenere solo i log che indicano una modifica della scalabilità:

traces 
| extend CustomDimensions = todynamic(tostring(customDimensions))
| where CustomDimensions.Category == "ScaleControllerLogs"
| where message == "Instance count changed"
| extend Reason = CustomDimensions.Reason
| extend PreviousInstanceCount = CustomDimensions.PreviousInstanceCount
| extend NewInstanceCount = CustomDimensions.CurrentInstanceCount

Eseguire query sui log di distribuzione del codice Flex Consumption

Importante

Il piano Flex Consumption è attualmente in anteprima.

La query seguente può essere usata per cercare tutti i log di distribuzione del codice per l'app per le funzioni corrente entro il periodo di tempo specificato:

traces
| extend deploymentId = customDimensions.deploymentId
| where deploymentId != ''
| project timestamp, deploymentId, message, severityLevel, customDimensions, appName

Metriche specifiche del piano a consumo

Quando viene eseguito in un piano a consumo, il costo di esecuzione di una singola esecuzione di funzione viene misurata in GB-secondi. Il costo di esecuzione viene calcolato combinando l'utilizzo della memoria con il tempo di esecuzione. Per altre informazioni, vedere Stima dei costi del piano a consumo.

Le query di telemetria seguenti sono specifiche delle metriche che influiscono sul costo di esecuzione delle funzioni nel piano a consumo.

Determinare l'utilizzo della memoria

In Monitoraggio, selezionare log (analisi), quindi copiare la query di telemetria seguente e incollarla nella finestra di query e selezionare Esegui. Questa query restituisce l'utilizzo totale della memoria in ogni momento campionato.

performanceCounters
| where name == "Private Bytes"
| project timestamp, name, value

I risultati sono simili all'esempio seguente:

timestamp [UTC] name value
12/09/2019, 1:05:14.947 Byte privati 209,932,288
12/09/2019, 1:06:14.994 Byte privati 212,189,184
12/09/2019, 1:06:30.010 Byte privati 231,714,816
12/09/2019, 1:07:15.040 Byte privati 210,591,744
12/09/2019, 1:12:16.285 Byte privati 216,285,184
12/09/2019, 1:12:31.376 Byte privati 235,806,720

Determinare la durata

Monitoraggio di Azure tiene traccia delle metriche a livello di risorsa, che per Funzioni è l'app per le funzioni. L'integrazione di Application Insights genera metriche per ogni funzione. Ecco una query di analisi di esempio per ottenere la durata media di una funzione:

customMetrics
| where name contains "Duration"
| extend averageDuration = valueSum / valueCount
| summarize averageDurationMilliseconds=avg(averageDuration) by name
name averageDurationMilliseconds
QueueTrigger AvgDurationMs 16.087
QueueTrigger MaxDurationMs 90.249
QueueTrigger MinDurationMs 8.522

Passaggi successivi

Altre informazioni sul monitoraggio di Funzioni di Azure: