Condividi tramite


Analizzare la telemetria di Azure Functions in Application Insights

Le funzioni di Azure si integrano con Application Insights per offrire un monitoraggio migliore delle applicazioni di 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 Che cos'è 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, Il servizio si connette all'host delle Funzioni quando viene caricata la pagina, quindi i log vengono trasmessi direttamente sulla 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 invocazioni 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:

Indagare 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 implementi una telemetria personalizzata.
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, Le metriche includono il numero di chiamate alle funzioni, il tempo di esecuzione e i tassi di successo.
Metriche in tempo reale È possibile visualizzare i dati delle metriche così come vengono creati quasi in tempo reale.

Interrogazione dei 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
tracce Log generati dal runtime, dal controller di scalabilità e dalle tracce dal codice della funzione. Per l'hosting del piano Consumo Flessibile traces include anche i log creati durante la distribuzione del codice.
richieste 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 una telemetria personalizzata per aggiungere dati ad essa.

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.

Invocazioni 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, per qualsiasi tipo, RetainedPercentage è minore di 100, allora quel tipo 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 la registrazione del controller di scalabilità che l'integrazione di Application Insights, è possibile utilizzare la ricerca log di Application Insights per eseguire query sui log del controller di scalabilità emessi. I log del controller di scalabilità vengono salvati nella raccolta traces sotto la categoria ScaleControllerLogs.

La query seguente può essere usata per cercare tutti i log del controller di scala per l'applicazione funzionale 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 di Flex Consumption

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 per il piano di 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:

Data e ora [UTC] nome valore
12/09/2019, 1:05:14.947 a.m. Byte privati 209,932,288
12/09/2019, 01:06:14.994 AM Byte privati 212,189,184
9/12/2019, 1:06:30.010 AM Byte privati 231,714,816
9/12/2019, 1:07:15.040 AM Byte privati 210,591,744
9/12/2019, 1:12:16.285 AM Byte privati 216,285,184
12/09/2019, 1:12:31.376 AM Byte privati 235,806,720

Determinare la durata

Azure Monitor tiene traccia delle metriche a livello di risorsa, che per le Azure Functions è 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
nome averageDurationMilliseconds
QueueTrigger AvgDurationMs 16.087
QueueTrigger MaxDurationMs 90.249
QueueTrigger MinDurationMs 8.522

Passaggi successivi

Altre informazioni sul monitoraggio di Funzioni di Azure: