Monitorare Funzioni di AzureMonitor Azure Functions

Funzioni di Azure offre l'integrazione incorporata con applicazione Azure Insights per monitorare le funzioni.Azure Functions offers built-in integration with Azure Application Insights to monitor functions. Questo articolo illustra come configurare funzioni di Azure per inviare i file di log generati dal sistema a Application Insights.This article shows you how to configure Azure Functions to send system-generated log files to Application Insights.

È consigliabile usare Application Insights perché raccoglie i dati di log, delle prestazioni e degli errori.We recommend using Application Insights because it collects log, performance, and error data. Rileva automaticamente le anomalie delle prestazioni e include potenti strumenti di analisi che consentono di diagnosticare i problemi e di comprendere come vengono usate le funzioni.It automatically detects performance anomalies and includes powerful analytics tools to help you diagnose issues and to understand how your functions are used. Il servizio è progettato per supportare il miglioramento continuo delle prestazioni e dell'usabilità.It's designed to help you continuously improve performance and usability. È anche possibile usare Application Insights durante lo sviluppo del progetto di app per le funzioni locali.You can even use Application Insights during local function app project development. Per ulteriori informazioni, vedere che cos'è Application Insights?.For more information, see What is Application Insights?.

Poiché la strumentazione Application Insights necessaria è incorporata in funzioni di Azure, è sufficiente una chiave di strumentazione valida per connettere l'app per le funzioni a una risorsa Application Insights.As the required Application Insights instrumentation is built into Azure Functions, all you need is a valid instrumentation key to connect your function app to an Application Insights resource.

Prezzi e limiti di Application InsightsApplication Insights pricing and limits

È possibile provare gratuitamente l'integrazione di Application Insights con le app per le funzioni.You can try out Application Insights integration with Function Apps for free. È previsto un limite giornaliero per la quantità di dati che possono essere elaborati gratuitamente.There's a daily limit to how much data can be processed for free. Questo limite può essere raggiunto durante i test.You might hit this limit during testing. Quando il limite giornaliero è quasi raggiunto, Azure invia notifiche tramite il portale e messaggi di posta elettronica.Azure provides portal and email notifications when you're approaching your daily limit. Se si dimenticano tali avvisi e si raggiunge il limite, i nuovi log non verranno visualizzati nelle query Application Insights.If you miss those alerts and hit the limit, new logs won't appear in Application Insights queries. Tenere presente il limite per evitare inutili tempi di risoluzione dei problemi.Be aware of the limit to avoid unnecessary troubleshooting time. Per altre informazioni, vedere Gestire volumi di dati e prezzi in Application Insights.For more information, see Manage pricing and data volume in Application Insights.

L'elenco completo delle funzionalità di Application Insights disponibili per l'app per le funzioni è descritto in Application Insights per le funzionalità supportate di funzioni di Azure.The full list of Application Insights features available to your function app is detailed in Application Insights for Azure Functions supported features.

Abilitare l'integrazione di Application InsightsEnable Application Insights integration

Affinché un'app per le funzioni invii dati ad Application Insights, è necessario conoscere la chiave di strumentazione di una risorsa di Application Insights.For a function app to send data to Application Insights, it needs to know the instrumentation key of an Application Insights resource. La chiave deve essere specificata in un'impostazione dell'app denominata APPINSIGHTS_INSTRUMENTATIONKEY.The key must be in an app setting named APPINSIGHTS_INSTRUMENTATIONKEY.

Nuova app per le funzioni nel portaleNew function app in the portal

Quando si crea l'app per le funzioni nella portale di Azure, Application Insights integrazione è abilitata per impostazione predefinita.When you create your function app in the Azure portal, Application Insights integration is enabled by default. La risorsa Application Insights ha lo stesso nome dell'app per le funzioni e viene creata nella stessa area o nell'area più vicina.The Application Insights resource has the same name as your function app, and it's created either in the same region or in the nearest region.

Per esaminare la risorsa Application Insights creata, selezionarla per espandere la finestra di Application Insights .To review the Application Insights resource being created, select it to expand the Application Insights window. È possibile modificare il nome della nuova risorsa o scegliere un percorso diverso in una geografia di Azure in cui si vogliono archiviare i dati.You can change the New resource name or choose a different Location in an Azure geography where you want to store your data.

Abilitare Application Insights mentre si crea un'app per le funzioni

Quando si sceglie Crea, viene creata una risorsa Application Insights con l'app per le funzioni, che ha il APPINSIGHTS_INSTRUMENTATIONKEY impostato nelle impostazioni dell'applicazione.When you choose Create, an Application Insights resource is created with your function app, which has the APPINSIGHTS_INSTRUMENTATIONKEY set in application settings. Tutto è pronto per iniziare.Everything is ready to go.

Aggiungi a un'app per le funzioni esistenteAdd to an existing function app

Quando si crea un'app per le funzioni usando l'interfaccia della riga di comando di Azure, Visual Studioo Visual Studio Code, è necessario creare la risorsa Application Insights.When you create a function app using the Azure CLI, Visual Studio, or Visual Studio Code, you must create the Application Insights resource. È quindi possibile aggiungere la chiave di strumentazione da tale risorsa come impostazione dell'applicazione nell'app per le funzioni.You can then add the instrumentation key from that resource as an application setting in your function app.

Funzioni semplifica l'aggiunta dell'integrazione di Application Insights a un'app per le funzioni dal portale di Azure.Functions makes it easy to add Application Insights integration to a function app from the Azure portal.

  1. Nel portale selezionare Tutti i servizi > App per le funzioni, selezionare la propria app per le funzioni e quindi il banner Application Insights in alto nella finestraIn the portal, select All services > Function Apps, select your function app, and then select the Application Insights banner at the top of the window

    Abilitare Application Insights nel portale

  2. Creare una risorsa di Application Insights usando le impostazioni specificate nella tabella sotto l'immagine.Create an Application Insights resource by using the settings specified in the table below the image.

    Creare una risorsa di Application Insights

    ImpostazioneSetting Valore consigliatoSuggested value DescrizioneDescription
    NomeName Nome app univocoUnique app name È più facile usare lo stesso nome dell'app per le funzioni, che deve essere univoco nella sottoscrizione.It's easiest to use the same name as your function app, which must be unique in your subscription.
    PosizioneLocation Europa occidentaleWest Europe Se possibile, usare la stessa area dell'app per le funzioni oppure una vicina a tale area.If possible, use the same region as your function app, or one that's close to that region.
  3. Selezionare OK.Select OK. La risorsa di Application Insights viene creata nella stesso gruppo di risorse e nella stessa sottoscrizione dell'app per le funzioni.The Application Insights resource is created in the same resource group and subscription as your function app. Dopo aver creato la risorsa, chiudere la finestra di Application Insights.After the resource is created, close the Application Insights window.

  4. Nell'app per le funzioni selezionare Impostazioni applicazione e scorrere fino a Impostazioni applicazione.Back in your function app, select Application settings, and then scroll down to Application settings. Se viene visualizzata un'impostazione denominata APPINSIGHTS_INSTRUMENTATIONKEY, l'integrazione di Application Insights è abilitata per l'app per le funzioni in esecuzione in Azure.If you see a setting named APPINSIGHTS_INSTRUMENTATIONKEY, Application Insights integration is enabled for your function app running in Azure.

Nelle prime versioni delle funzioni è stato utilizzato il monitoraggio incorporato, che non è più consigliato.Early versions of Functions used built-in monitoring, which is no longer recommended. Quando si Abilita l'integrazione Application Insights per un'app per le funzioni di questo tipo, è necessario disabilitare anche la registrazione incorporata.When enabling Application Insights integration for such a function app, you must also disable built-in logging.

Visualizzare dati di telemetria nella scheda MonitoraggioView telemetry in Monitor tab

Con Application Insights integrazione abilitata, è possibile visualizzare i dati di telemetria nella scheda monitoraggio .With Application Insights integration enabled, you can view telemetry data in the Monitor tab.

  1. Nella pagina app per le funzioni selezionare una funzione che è stata eseguita almeno una volta dopo la configurazione di Application Insights.In the function app page, select a function that has run at least once after Application Insights was configured. Quindi selezionare la scheda monitoraggio .Then select the Monitor tab.

    Selezionare la scheda Monitoraggio

  2. Selezionare Aggiorna periodicamente, fino a quando non viene visualizzato l'elenco di chiamate di funzione.Select Refresh periodically, until the list of function invocations appears.

    Possono essere necessari fino a cinque minuti per la visualizzazione dell'elenco mentre il client di telemetria raggruppa i dati per la trasmissione al server.It can take up to five minutes for the list to appear while the telemetry client batches data for transmission to the server. Il ritardo non si applica al Live Metrics Stream.(The delay doesn't apply to the Live Metrics Stream. Tale servizio si connette all'host di Funzioni quando si carica la pagina, pertanto i log vengono trasmessi direttamente alla pagina.That service connects to the Functions host when you load the page, so logs are streamed directly to the page.)

    Elenco di chiamate

  3. Per visualizzare i log per una chiamata di funzione particolare, selezionare il collegamento alla colonna Dati per tale chiamata.To see the logs for a particular function invocation, select the Date column link for that invocation.

    Collegamento ai dettagli di chiamata

    L'output di registrazione per tale chiamata viene visualizzato in una nuova pagina.The logging output for that invocation appears in a new page.

    Dettagli della chiamata

È possibile osservare che in entrambe le pagine è presente un collegamento Esegui in Application Insights alla query di Application Insights Analytics che recupera i dati.You can see that both pages have a Run in Application Insights link to the Application Insights Analytics query that retrieves the data.

Esecuzione in Application Insights

Viene visualizzata la query seguente.The following query is displayed. È possibile osservare che i risultati della query sono limitati agli ultimi 30 giorni (where timestamp > ago(30d)).You can see that the query results are limited to the last 30 days (where timestamp > ago(30d)). Inoltre, i risultati non mostrano più di 20 righe (take 20).In addition, the results show no more than 20 rows (take 20). Al contrario, l'elenco dei dettagli della chiamata per la funzione è per gli ultimi 30 giorni senza limite.In contrast, the invocation details list for your function is for the last 30 days with no limit.

Elenco di chiamate di analisi di Application Insights

Per altre informazioni, vedere Eseguire query sui dati di telemetria più avanti in questo articolo.For more information, see Query telemetry data later in this article.

Visualizzare i dati di telemetria in Application InsightsView telemetry in Application Insights

Per aprire Application Insights da un'app per le funzioni nella portale di Azure, passare alla pagina Panoramica dell'app per le funzioni.To open Application Insights from a function app in the Azure portal, go to the function app's Overview page. In funzionalità configurateselezionare Application Insights.Under Configured features, select Application Insights.

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.For information about how to use Application Insights, see the Application Insights documentation. Questa sezione mostra alcuni esempi su come visualizzare i dati in Application Insights.This section shows some examples of how to view data in Application Insights. Se si ha già familiarità con Application Insights, è possibile passare direttamente alle sezioni su come configurare e personalizzare i dati di telemetria.If you're already familiar with Application Insights, you can go directly to the sections about how to configure and customize the telemetry data.

Scheda Panoramica Application Insights

Le aree di Application Insights seguenti possono essere utili quando si valutano il comportamento, le prestazioni e gli errori nelle funzioni:The following areas of Application Insights can be helpful when evaluating the behavior, performance, and errors in your functions:

SchedaTab DescriptionDescription
FallimentiFailures Creare grafici e avvisi in base agli errori di funzione e alle eccezioni del server.Create charts and alerts based on function failures and server exceptions. Il nome dell'operazione corrisponde al nome della funzione.The Operation Name is the function name. Gli errori nelle dipendenze non vengono visualizzati, a meno che non si implementino i dati di telemetria personalizzatiFailures in dependencies aren't shown unless you implement custom telemetry for dependencies.
PrestazioniPerformance Analizzare i problemi di prestazioni.Analyze performance issues.
ServerServers Visualizzare l'utilizzo delle risorse e la velocità effettiva per server.View resource utilization and throughput per server. Questi dati possono essere utili negli scenari di debug in cui le funzioni bloccano le risorse sottostanti.This data can be useful for debugging scenarios where functions are bogging down your underlying resources. I server sono denominati Istanze del ruolo del cloud.Servers are referred to as Cloud role instances.
MetricheMetrics Creare grafici e avvisi basati sulle metriche.Create charts and alerts that are based on metrics. Le metriche includono il numero di chiamate di funzione, il tempo di esecuzione e le percentuali di successo.Metrics include the number of function invocations, execution time, and success rates.
Flusso di metriche in tempo realeLive Metrics Stream Visualizza i dati delle metriche così come vengono creati quasi in tempo reale.View metrics data as it's created in near real-time.

Query sui dati di telemetriaQuery telemetry data

Application Insights Analytics consente di accedere a tutti i dati di telemetria sotto forma di tabelle in un database.Application Insights Analytics gives you access to all telemetry data in the form of tables in a database. Analytics offre un linguaggio di query per l'estrazione, la manipolazione e la visualizzazione dei dati.Analytics provides a query language for extracting, manipulating, and visualizing the data.

Selezionare Analytics

Esempio di Analytics

Questo è un esempio che mostra la distribuzione delle richieste per ruolo di lavoro negli ultimi 30 minuti.Here's a query example that shows the distribution of requests per worker over the last 30 minutes.

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

Le tabelle disponibili vengono visualizzate nella scheda schema a sinistra.The tables that are available are shown in the Schema tab on the left. Nelle tabelle seguenti è possibile trovare i dati generati dalle chiamate alla funzione:You can find data generated by function invocations in the following tables:

TabellaTable DescriptionDescription
tracestraces Log creati dal runtime e dal codice della funzione.Logs created by the runtime and by function code.
requestsrequests Una richiesta per ogni chiamata di funzione.One request for each function invocation.
exceptionsexceptions Tutte le eccezioni generate dal runtime.Any exceptions thrown by the runtime.
customMetricscustomMetrics Numero di chiamate con esito positivo e negativo, frequenza di esito positivo e durata.The count of successful and failing invocations, success rate, and duration.
customEventscustomEvents Eventi rilevati dal runtime, ad esempio: richieste HTTP che attivano una funzione.Events tracked by the runtime, for example: HTTP requests that trigger a function.
performanceCountersperformanceCounters Informazioni sulle prestazioni dei server in cui le funzioni sono in esecuzione.Information about the performance of the servers that the functions are running on.

Le altre tabelle sono per i test di disponibilità e i dati di telemetria del client e del browser.The other tables are for availability tests, and client and browser telemetry. È possibile implementare i dati di telemetria personalizzati per aggiungerne altri.You can implement custom telemetry to add data to them.

All'interno di ogni tabella alcuni dati specifici per Funzioni si trovano nel campo customDimensions.Within each table, some of the Functions-specific data is in a customDimensions field. Ad esempio, la query seguente recupera tutte le tracce con livello di registrazione Error.For example, the following query retrieves all traces that have log level Error.

traces 
| where customDimensions.LogLevel == "Error"

Il runtime fornisce i campi customDimensions.LogLevel e customDimensions.Category.The runtime provides the customDimensions.LogLevel and customDimensions.Category fields. È possibile specificare campi aggiuntivi nei log scritti nel codice della funzione.You can provide additional fields in logs that you write in your function code. Vedere la sezione Registrazione strutturata più avanti in questo articolo.See Structured logging later in this article.

Configurare le categorie e i livelli di registrazioneConfigure categories and log levels

È possibile usare Application Insights senza alcuna configurazione personalizzata.You can use Application Insights without any custom configuration. La configurazione predefinita può produrre volumi elevati di dati.The default configuration can result in high volumes of data. Se si usa una sottoscrizione di Azure di Visual Studio, si potrebbe raggiunge il limite d'uso dati per Application Insights.If you're using a Visual Studio Azure subscription, you might hit your data cap for Application Insights. Più avanti in questo articolo si apprenderà come configurare e personalizzare i dati che le funzioni inviano a Application Insights.Later in this article, you learn how to configure and customize the data that your functions send to Application Insights. Per un'app per le funzioni, la registrazione è configurata nel file host. JSON .For a function app, logging is configured in the host.json file.

CategorieCategories

Il logger di Funzioni di Azure include un categoria per ogni log.The Azure Functions logger includes a category for every log. La categoria indica quale parte del codice runtime o del codice funzione è stata scritta dal log.The category indicates which part of the runtime code or your function code wrote the log.

Il runtime di funzioni crea log con una categoria che inizia con "host".The Functions runtime creates logs with a category that begin with "Host." Nella versione 1. x i registri function started, function executede function completed hanno la categoria Host.Executor.In version 1.x, the function started, function executed, and function completed logs have the category Host.Executor. A partire dalla versione 2. x, questi log hanno la categoria Function.<YOUR_FUNCTION_NAME>.Starting in version 2.x, these logs have the category Function.<YOUR_FUNCTION_NAME>.

Se si scrivono log nel codice della funzione, la categoria viene Function nella versione 1. x del runtime di funzioni.If you write logs in your function code, the category is Function in version 1.x of the Functions runtime. Nella versione 2. x, la categoria è Function.<YOUR_FUNCTION_NAME>.User.In version 2.x, the category is Function.<YOUR_FUNCTION_NAME>.User.

Livelli di registrazioneLog levels

Il logger di funzioni di Azure include anche un livello di registrazione con ogni log.The Azure Functions logger also includes a log level with every log. LogLevel è un'enumerazione e il codice integer ne indica la relativa importanza:LogLevel is an enumeration, and the integer code indicates relative importance:

LogLevelLogLevel CodiceCode
TraceTrace 00
DebugDebug 11
InformazioniInformation 22
AvvisoWarning 33
ErroreError 44
CriticoCritical 55
NessunoNone 66

Il livello di registrazione None è illustrato nella sezione successiva.Log level None is explained in the next section.

Configurazione del log in host. JSONLog configuration in host.json

Il file host. JSON configura il numero di registrazioni che un'app per le funzioni invia ad Application Insights.The host.json file configures how much logging a function app sends to Application Insights. Per ogni categoria, si indica il livello di registrazione minimo da inviare.For each category, you indicate the minimum log level to send. Esistono due esempi: il primo esempio è destinato alla versione 2. x e successive del runtime di funzioni (con .NET Core) e il secondo esempio è per il runtime della versione 1. x.There are two examples: the first example targets version 2.x and later of the Functions runtime (with .NET Core), and the second example is for the version 1.x runtime.

Versione 2. x e successiveVersion 2.x and higher

La versione V2. x e le versioni successive del runtime di funzioni usano la gerarchia di filtri per la registrazione di .NET Core.Version v2.x and later versions of the Functions runtime use the .NET Core logging filter hierarchy.

{
  "logging": {
    "fileLoggingMode": "always",
    "logLevel": {
      "default": "Information",
      "Host.Results": "Error",
      "Function": "Error",
      "Host.Aggregator": "Trace"
    }
  }
}

Versione 1.xVersion 1.x

{
  "logger": {
    "categoryFilter": {
      "defaultLevel": "Information",
      "categoryLevels": {
        "Host.Results": "Error",
        "Function": "Error",
        "Host.Aggregator": "Trace"
      }
    }
  }
}

In questo esempio vengono impostate due regole:This example sets up the following rules:

  • Per i log con categoria Host.Results o Function, inviare solo Error livello e superiore a Application Insights.For logs with category Host.Results or Function, send only Error level and above to Application Insights. I log di livello Warning e livelli inferiori vengono ignorati.Logs for Warning level and below are ignored.
  • Per i log con categoria Host.Aggregator, inviare tutti i log ad Application Insights.For logs with category Host.Aggregator, send all logs to Application Insights. Il livello del log Trace corrisponde a quello che alcuni logger chiamano Verbose, ma usano Trace nel file host. JSON.The Trace log level is the same as what some loggers call Verbose, but use Trace in the host.json file.
  • Per tutti gli altri log, inviare ad Application Insights solo i log di livello Information e superiori.For all other logs, send only Information level and above to Application Insights.

Il valore della categoria in host. JSON controlla la registrazione di tutte le categorie che iniziano con lo stesso valore.The category value in host.json controls logging for all categories that begin with the same value. Host in host. JSON controlla la registrazione per Host.General, Host.Executor, Host.Resultse così via.Host in host.json controls logging for Host.General, Host.Executor, Host.Results, and so on.

Se host. JSON include più categorie che iniziano con la stessa stringa, viene rilevata prima la corrispondenza con quelle più lunghe.If host.json includes multiple categories that start with the same string, the longer ones are matched first. Si supponga di voler eseguire tutte le operazioni dal runtime, ad eccezione Host.Aggregator di registrare a livello di Error, ma si vuole che Host.Aggregator log a livello di Information:Suppose you want everything from the runtime except Host.Aggregator to log at Error level, but you want Host.Aggregator to log at the Information level:

Versione 2. x e versioni successiveVersion 2.x and later

{
  "logging": {
    "fileLoggingMode": "always",
    "logLevel": {
      "default": "Information",
      "Host": "Error",
      "Function": "Error",
      "Host.Aggregator": "Information"
    }
  }
}

Versione 1.xVersion 1.x

{
  "logger": {
    "categoryFilter": {
      "defaultLevel": "Information",
      "categoryLevels": {
        "Host": "Error",
        "Function": "Error",
        "Host.Aggregator": "Information"
      }
    }
  }
}

Per eliminare tutti i log di una categoria, è possibile usare il livello di registrazione None.To suppress all logs for a category, you can use log level None. Nessun log viene scritto con tale categoria e non è presente alcun livello di log.No logs are written with that category and there's no log level above it.

Le sezioni seguenti descrivono le categorie principali di log create dal runtime.The following sections describe the main categories of logs that the runtime creates.

Categoria Host.ResultsCategory Host.Results

Questi log vengono visualizzati come "richieste" in Application Insights.These logs show as "requests" in Application Insights. Indicano l'esito positivo o negativo di una funzione.They indicate success or failure of a function.

Grafico delle richieste

Tutti questi log vengono scritti a Information livello.All of these logs are written at Information level. Se si filtra in Warning o versione successiva, non verrà visualizzato alcun dato.If you filter at Warning or above, you won't see any of this data.

Categoria Host.AggregatorCategory Host.Aggregator

Questi log indicano il numero e le medie di chiamate alla funzione in un periodo di tempo configurabile.These logs provide counts and averages of function invocations over a configurable period of time. Il periodo predefinito è 30 secondi o 1000 risultati, ovvero quello che viene prima.The default period is 30 seconds or 1,000 results, whichever comes first.

I log sono disponibili nella tabella customMetrics in Application Insights.The logs are available in the customMetrics table in Application Insights. Esempi sono il numero di esecuzioni, la frequenza di operazioni riuscite e la durata.Examples are the number of runs, success rate, and duration.

query customMetrics

Tutti questi log vengono scritti a Information livello.All of these logs are written at Information level. Se si filtra in Warning o versione successiva, non verrà visualizzato alcun dato.If you filter at Warning or above, you won't see any of this data.

Altre categorieOther categories

Tutti i log per le categorie diverse da quelle già elencate sono disponibili nella tabella tracce in Application Insights.All logs for categories other than the ones already listed are available in the traces table in Application Insights.

query di tracce

Tutti i log con categorie che iniziano con Host vengono scritti dal runtime di funzioni.All logs with categories that begin with Host are written by the Functions runtime. I registri "funzione avviata" e "funzione completata" hanno Host.Executordi categoria.The "Function started" and "Function completed" logs have category Host.Executor. Per le esecuzioni riuscite, questi log sono Information livello.For successful runs, these logs are Information level. Le eccezioni vengono registrate a livello Error.Exceptions are logged at Error level. Il runtime crea anche il livello di registrazione Warning, ad esempio: messaggi di coda inviati alla coda non elaborabile.The runtime also creates Warning level logs, for example: queue messages sent to the poison queue.

I log scritti dal codice della funzione hanno Function di categoria e possono essere di qualsiasi livello di log.Logs written by your function code have category Function and can be any log level.

Configurare l'aggregatoreConfigure the aggregator

Come indicato nella sezione precedente, il runtime aggrega i dati sulle esecuzioni di funzioni in un periodo di tempo.As noted in the previous section, the runtime aggregates data about function executions over a period of time. Il periodo predefinito è 30 secondi o 1000 esecuzioni, ovvero quello che viene prima.The default period is 30 seconds or 1,000 runs, whichever comes first. È possibile configurare questa impostazione nel file host. JSON.You can configure this setting in the host.json file. Ad esempio:Here's an example:

{
    "aggregator": {
      "batchSize": 1000,
      "flushTimeout": "00:00:30"
    }
}

Configurare il campionamentoConfigure sampling

Application Insights dispone di una funzionalità di campionamento che può impedire la produzione di troppi dati di telemetria sulle esecuzioni completate in momenti di picco del carico.Application Insights has a sampling feature that can protect you from producing too much telemetry data on completed executions at times of peak load. Quando la frequenza delle esecuzioni in ingresso supera una soglia specificata, Application Insights inizia a ignorare in modo casuale alcune delle esecuzioni in ingresso.When the rate of incoming executions exceeds a specified threshold, Application Insights starts to randomly ignore some of the incoming executions. L'impostazione predefinita per il numero massimo di esecuzioni al secondo è 20 (cinque nella versione 1. x).The default setting for maximum number of executions per second is 20 (five in version 1.x). È possibile configurare il campionamento nel file host. JSON.You can configure sampling in host.json. Ad esempio:Here's an example:

Versione 2. x e versioni successiveVersion 2.x and later

{
  "logging": {
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "maxTelemetryItemsPerSecond" : 20
      }
    }
  }
}

Versione 1.xVersion 1.x

{
  "applicationInsights": {
    "sampling": {
      "isEnabled": true,
      "maxTelemetryItemsPerSecond" : 5
    }
  }
}

Nota

Il campionamento è abilitato per impostazione predefinita.Sampling is enabled by default. Se risultano mancanti dati, potrebbe essere necessario modificare le impostazioni di campionamento per adattarlo a uno specifico scenario di monitoraggio.If you appear to be missing data, you might need to adjust the sampling settings to fit your particular monitoring scenario.

Scrivere i log nelle funzioni C#Write logs in C# functions

È possibile scrivere log nel codice funzione che vengono visualizzati come tracce in Application Insights.You can write logs in your function code that appear as traces in Application Insights.

ILoggerILogger

Usare il parametro ILogger nelle funzioni anziché il parametro TraceWriter.Use an ILogger parameter in your functions instead of a TraceWriter parameter. I log creati usando TraceWriter passano a Application Insights, ma ILogger consente di eseguire la registrazione strutturata.Logs created by using TraceWriter go to Application Insights, but ILogger lets you do structured logging.

Con un oggetto ILogger è possibile chiamare i metodi di estensione su ILogger Log<level> per creare i log.With an ILogger object, you call Log<level> extension methods on ILogger to create logs. Il codice seguente scrive Information logs con la categoria "function. < YOUR_FUNCTION_NAME >. Utente ".The following code writes Information logs with category "Function.<YOUR_FUNCTION_NAME>.User."

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, ILogger logger)
{
    logger.LogInformation("Request for item with key={itemKey}.", id);

Registrazione strutturataStructured logging

I parametri usati nel messaggio del log sono determinati dall'ordine dei segnaposto, non dai nomi.The order of placeholders, not their names, determines which parameters are used in the log message. Si supponga di avere il codice seguente:Suppose you have the following code:

string partitionKey = "partitionKey";
string rowKey = "rowKey";
logger.LogInformation("partitionKey={partitionKey}, rowKey={rowKey}", partitionKey, rowKey);

Se si mantenere la stessa stringa del messaggio e si inverte l'ordine dei parametri, il testo del messaggio risultante mostrerebbe i valori in maniera errata.If you keep the same message string and reverse the order of the parameters, the resulting message text would have the values in the wrong places.

I segnaposto vengono gestiti in modo da poter eseguire la registrazione strutturata.Placeholders are handled this way so that you can do structured logging. Application Insights archivia le coppie nome/valore del parametro e la stringa del messaggio.Application Insights stores the parameter name-value pairs and the message string. Il risultato è che gli argomenti del messaggio diventano campi su cui è possibile eseguire delle query.The result is that the message arguments become fields that you can query on.

Se la chiamata al metodo del logger ha un aspetto simile all'esempio precedente, è possibile eseguire una query sul campo customDimensions.prop__rowKey.If your logger method call looks like the previous example, you can query the field customDimensions.prop__rowKey. Il prefisso prop__ viene aggiunto per assicurarsi che non ci siano conflitti tra i campi aggiunti dal runtime e i campi aggiunti dal codice della funzione.The prop__ prefix is added to ensure there are no collisions between fields the runtime adds and fields your function code adds.

È anche possibile eseguire query sulla stringa del messaggio originale facendo riferimento al campo customDimensions.prop__{OriginalFormat}.You can also query on the original message string by referencing the field customDimensions.prop__{OriginalFormat}.

Ecco una rappresentazione JSON di esempio dei dati customDimensions:Here's a sample JSON representation of customDimensions data:

{
  customDimensions: {
    "prop__{OriginalFormat}":"C# Queue trigger function processed: {message}",
    "Category":"Function",
    "LogLevel":"Information",
    "prop__message":"c9519cbf-b1e6-4b9b-bf24-cb7d10b1bb89"
  }
}

Registrazione delle metriche personalizzateCustom metrics logging

Nelle funzioni di script C# è possibile usare il metodo di estensione LogMetric su ILogger per creare metriche personalizzate in Application Insights.In C# script functions, you can use the LogMetric extension method on ILogger to create custom metrics in Application Insights. Ecco un esempio di chiamata al metodo:Here's a sample method call:

logger.LogMetric("TestMetric", 1234);

Questo codice è un'alternativa alla chiamata di TrackMetric tramite l'API Application Insights per .NET.This code is an alternative to calling TrackMetric by using the Application Insights API for .NET.

Scrivere i log in funzioni JavaScriptWrite logs in JavaScript functions

Nelle funzioni di Node.js usare context.log per scrivere i log.In Node.js functions, use context.log to write logs. La registrazione strutturata non è abilitata.Structured logging isn't enabled.

context.log('JavaScript HTTP trigger function processed a request.' + context.invocationId);

Registrazione delle metriche personalizzateCustom metrics logging

Quando si esegue la versione 1. x del runtime di funzioni, le funzioni node. js possono usare il metodo context.log.metric per creare metriche personalizzate in Application Insights.When you're running on version 1.x of the Functions runtime, Node.js functions can use the context.log.metric method to create custom metrics in Application Insights. Questo metodo non è attualmente supportato nella versione 2. x e versioni successive.This method isn't currently supported in version 2.x and later. Ecco un esempio di chiamata al metodo:Here's a sample method call:

context.log.metric("TestMetric", 1234);

Questo codice è un'alternativa alla chiamata di trackMetric usando node. js SDK per Application Insights.This code is an alternative to calling trackMetric by using the Node.js SDK for Application Insights.

Registrare i dati di telemetria personalizzati nelle C# funzioniLog custom telemetry in C# functions

È possibile usare il pacchetto NuGet Microsoft.ApplicationInsights per inviare i dati di telemetria personalizzati ad Application Insights.You can use the Microsoft.ApplicationInsights NuGet package to send custom telemetry data to Application Insights. L'esempio C# seguente usa l'API di telemetria personalizzata.The following C# example uses the custom telemetry API. L'esempio fa riferimento a una libreria di classi .NET, ma il codice di Application Insights è lo stesso per lo script C#.The example is for a .NET class library, but the Application Insights code is the same for C# script.

Versione 2. x e versioni successiveVersion 2.x and later

La versione 2. x e le versioni successive del Runtime usano le funzionalità più recenti di Application Insights per correlare automaticamente i dati di telemetria con l'operazione corrente.Version 2.x and later versions of the runtime use newer features in Application Insights to automatically correlate telemetry with the current operation. Non è necessario impostare manualmente i campi Id, ParentIdo Name dell'operazione.There's no need to manually set the operation Id, ParentId, or Name fields.

using System;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.DataContracts;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Extensions.Logging;

namespace functionapp0915
{
    public class HttpTrigger2
    {
        private readonly TelemetryClient telemetryClient;

        /// Using dependency injection will guarantee that you use the same configuration for telemetry collected automatically and manually.
        public HttpTrigger2(TelemetryConfiguration telemetryConfiguration)
        {
            this.telemetryClient = new TelemetryClient(telemetryConfiguration);
        }

        [FunctionName("HttpTrigger2")]
        public Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)]
            HttpRequest req, ExecutionContext context, ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");
            DateTime start = DateTime.UtcNow;

            // Parse query parameter
            string name = req.Query
                .FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0)
                .Value;

            // Track an Event
            var evt = new EventTelemetry("Function called");
            evt.Context.User.Id = name;
            this.telemetryClient.TrackEvent(evt);

            // Track a Metric
            var metric = new MetricTelemetry("Test Metric", DateTime.Now.Millisecond);
            metric.Context.User.Id = name;
            this.telemetryClient.TrackMetric(metric);

            // Track a Dependency
            var dependency = new DependencyTelemetry
            {
                Name = "GET api/planets/1/",
                Target = "swapi.co",
                Data = "https://swapi.co/api/planets/1/",
                Timestamp = start,
                Duration = DateTime.UtcNow - start,
                Success = true
            };
            dependency.Context.User.Id = name;
            this.telemetryClient.TrackDependency(dependency);

            return Task.FromResult<IActionResult>(new OkResult());
        }
    }
}

Versione 1.xVersion 1.x

using System;
using System.Net;
using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.DataContracts;
using Microsoft.ApplicationInsights.Extensibility;
using Microsoft.Azure.WebJobs;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Extensions.Logging;
using System.Linq;

namespace functionapp0915
{
    public static class HttpTrigger2
    {
        private static string key = TelemetryConfiguration.Active.InstrumentationKey = 
            System.Environment.GetEnvironmentVariable(
                "APPINSIGHTS_INSTRUMENTATIONKEY", EnvironmentVariableTarget.Process);

        private static TelemetryClient telemetryClient = 
            new TelemetryClient() { InstrumentationKey = key };

        [FunctionName("HttpTrigger2")]
        public static async Task<HttpResponseMessage> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]
            HttpRequestMessage req, ExecutionContext context, ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");
            DateTime start = DateTime.UtcNow;

            // Parse query parameter
            string name = req.GetQueryNameValuePairs()
                .FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0)
                .Value;

            // Get request body
            dynamic data = await req.Content.ReadAsAsync<object>();

            // Set name to query string or body data
            name = name ?? data?.name;
         
            // Track an Event
            var evt = new EventTelemetry("Function called");
            UpdateTelemetryContext(evt.Context, context, name);
            telemetryClient.TrackEvent(evt);
            
            // Track a Metric
            var metric = new MetricTelemetry("Test Metric", DateTime.Now.Millisecond);
            UpdateTelemetryContext(metric.Context, context, name);
            telemetryClient.TrackMetric(metric);
            
            // Track a Dependency
            var dependency = new DependencyTelemetry
                {
                    Name = "GET api/planets/1/",
                    Target = "swapi.co",
                    Data = "https://swapi.co/api/planets/1/",
                    Timestamp = start,
                    Duration = DateTime.UtcNow - start,
                    Success = true
                };
            UpdateTelemetryContext(dependency.Context, context, name);
            telemetryClient.TrackDependency(dependency);
        }
        
        // Correlate all telemetry with the current Function invocation
        private static void UpdateTelemetryContext(TelemetryContext context, ExecutionContext functionContext, string userName)
        {
            context.Operation.Id = functionContext.InvocationId.ToString();
            context.Operation.ParentId = functionContext.InvocationId.ToString();
            context.Operation.Name = functionContext.FunctionName;
            context.User.Id = userName;
        }
    }    
}

Non chiamare TrackRequest o StartOperation<RequestTelemetry> perché verranno visualizzate richieste duplicate per una chiamata di funzione.Don't call TrackRequest or StartOperation<RequestTelemetry> because you'll see duplicate requests for a function invocation. Il runtime di Funzioni rileva automaticamente le richieste.The Functions runtime automatically tracks requests.

Non impostare telemetryClient.Context.Operation.Id.Don't set telemetryClient.Context.Operation.Id. Questa impostazione globale causa una correlazione errata quando molte funzioni sono in esecuzione simultaneamente.This global setting causes incorrect correlation when many functions are running simultaneously. Creare invece una nuova istanza di telemetria (DependencyTelemetry, EventTelemetry) e modificare la relativa proprietà Context.Instead, create a new telemetry instance (DependencyTelemetry, EventTelemetry) and modify its Context property. Passare quindi l'istanza di telemetria al metodo Track corrispondente su TelemetryClient (TrackDependency(), TrackEvent()``TrackMetric()).Then pass in the telemetry instance to the corresponding Track method on TelemetryClient (TrackDependency(), TrackEvent(), TrackMetric()). Questo metodo assicura che i dati di telemetria abbiano i dettagli di correlazione corretti per la chiamata di funzione corrente.This method ensures that the telemetry has the correct correlation details for the current function invocation.

Registrare i dati di telemetria personalizzati nelle funzioni JavaScriptLog custom telemetry in JavaScript functions

Ecco un frammento di codice di esempio che invia dati di telemetria personalizzati con il Application Insights node. js SDK:Here is a sample code snippet that sends custom telemetry with the Application Insights Node.js SDK:

const appInsights = require("applicationinsights");
appInsights.setup();
const client = appInsights.defaultClient;

module.exports = function (context, req) {
    context.log('JavaScript HTTP trigger function processed a request.');

    client.trackEvent({name: "my custom event", tagOverrides:{"ai.operation.id": context.invocationId}, properties: {customProperty2: "custom property value"}});
    client.trackException({exception: new Error("handled exceptions can be logged with this method"), tagOverrides:{"ai.operation.id": context.invocationId}});
    client.trackMetric({name: "custom metric", value: 3, tagOverrides:{"ai.operation.id": context.invocationId}});
    client.trackTrace({message: "trace message", tagOverrides:{"ai.operation.id": context.invocationId}});
    client.trackDependency({target:"http://dbname", name:"select customers proc", data:"SELECT * FROM Customers", duration:231, resultCode:0, success: true, dependencyTypeName: "ZSQL", tagOverrides:{"ai.operation.id": context.invocationId}});
    client.trackRequest({name:"GET /customers", url:"http://myserver/customers", duration:309, resultCode:200, success:true, tagOverrides:{"ai.operation.id": context.invocationId}});

    context.done();
};

Il parametro tagOverrides imposta l'operation_Id sull'ID di chiamata della funzione.The tagOverrides parameter sets the operation_Id to the function's invocation ID. Questa impostazione consente di correlare tutti i dati di telemetria personalizzati e generati automaticamente per una chiamata di funzione specifica.This setting enables you to correlate all of the automatically generated and custom telemetry for a given function invocation.

DependenciesDependencies

Funzioni V2 raccoglie automaticamente le dipendenze per le richieste HTTP, ServiceBus, EventHub e SQL.Functions v2 automatically collects dependencies for HTTP requests, ServiceBus, EventHub, and SQL.

È possibile scrivere codice personalizzato per visualizzare le dipendenze.You can write custom code to show the dependencies. Per esempi, vedere il codice di esempio nella C# sezione telemetria personalizzata.For examples, see the sample code in the C# custom telemetry section. Il codice di esempio produce una mappa delle applicazioni in Application Insights simile all'immagine seguente:The sample code results in an application map in Application Insights that looks like the following image:

Mappa delle applicazioni

Segnalare i problemiReport issues

Per segnalare un problema con l'integrazione di Application Insights in Funzioni o per inviare un suggerimento o una richiesta, creare un problema in GitHub.To report an issue with Application Insights integration in Functions, or to make a suggestion or request, create an issue in GitHub.

Log in streamingStreaming Logs

Durante lo sviluppo di un'applicazione, è spesso necessario vedere cosa viene scritto nei log quasi in tempo reale durante l'esecuzione in Azure.While developing an application, you often want to see what's being written to the logs in near real-time when running in Azure.

Esistono due modi per visualizzare un flusso di file di log generati dalle esecuzioni di funzioni.There are two ways to view a stream of log files being generated by your function executions.

  • Streaming di log predefinito: la piattaforma del servizio app consente di visualizzare un flusso dei file di log dell'applicazione.Built-in log streaming: the App Service platform lets you view a stream of your application log files. Questa operazione equivale all'output visualizzato quando si esegue il debug delle funzioni durante lo sviluppo locale e quando si usa la scheda test nel portale.This is equivalent to the output seen when you debug your functions during local development and when you use the Test tab in the portal. Vengono visualizzate tutte le informazioni basate su log.All log-based information is displayed. Per altre informazioni, vedere flussi di log.For more information, see Stream logs. Questo metodo di streaming supporta solo una singola istanza e non può essere usato con un'app in esecuzione su Linux in un piano a consumo.This streaming method supports only a single instance, and can't be used with an app running on Linux in a Consumption plan.

  • Live Metrics Stream: quando l'app per le funzioni è connessa a Application Insights, è possibile visualizzare i dati di log e altre metriche quasi in tempo reale nel portale di Azure usando Live Metrics Stream.Live Metrics Stream: when your function app is connected to Application Insights, you can view log data and other metrics in near real-time in the Azure portal using Live Metrics Stream. Usare questo metodo quando si monitorano le funzioni in esecuzione in più istanze o in Linux in un piano a consumo.Use this method when monitoring functions running on multiple-instances or on Linux in a Consumption plan. Questo metodo usa i dati campionati.This method uses sampled data.

I flussi di log possono essere visualizzati sia nel portale che nella maggior parte degli ambienti di sviluppo locali.Log streams can be viewed both in the portal and in most local development environments.

PortalePortal

È possibile visualizzare entrambi i tipi di flussi di log nel portale.You can view both types of log streams in the portal.

Streaming di log predefinitoBuilt-in log streaming

Per visualizzare i log in streaming nel portale, selezionare la scheda funzionalità della piattaforma nell'app per le funzioni.To view streaming logs in the portal, select the Platform features tab in your function app. Quindi, in monitoraggioscegliere flusso di log.Then, under Monitoring, choose Log streaming.

Abilitare i log di streaming nel portale

In questo modo l'app viene connessa al servizio di streaming di log e i log dell'applicazione vengono visualizzati nella finestra.This connects your app to the log streaming service and application logs are displayed in the window. È possibile passare tra i registri applicazioni e i log del server Web.You can toggle between Application logs and Web server logs.

Visualizzare i log in streaming nel portale

Flusso di metriche liveLive Metrics Stream

Per visualizzare i Live Metrics Stream per l'app, selezionare la scheda Panoramica dell'app per le funzioni.To view the Live Metrics Stream for your app, select the Overview tab of your function app. Quando è abilitata la Application Insights, viene visualizzato un collegamento Application Insights in funzionalità configurate.When you have Application Insights enables, you see an Application Insights link under Configured features. Questo collegamento consente di portarsi alla pagina Application Insights per l'app.This link takes you to the Application Insights page for your app.

In Application Insights selezionare Live Metrics Stream.In Application Insights, select Live Metrics Stream. Le voci di log campionate vengono visualizzate sotto la telemetria di esempio.Sampled log entries are displayed under Sample Telemetry.

Visualizzare Live Metrics Stream nel portale

Visual Studio CodeVisual Studio Code

Per attivare i log in streaming per l'app per le funzioni in Azure:To turn on the streaming logs for your function app in Azure:

  1. Selezionare F1 per aprire il riquadro comandi, quindi cercare ed eseguire il comando funzioni di Azure: Avviare i login streaming.Select F1 to open the command palette, and then search for and run the command Azure Functions: Start Streaming Logs.

  2. Selezionare l'app per le funzioni in Azure e quindi selezionare per abilitare la registrazione delle applicazioni per l'app per le funzioni.Select your function app in Azure, and then select Yes to enable application logging for the function app.

  3. Attivare le funzioni in Azure.Trigger your functions in Azure. Si noti che i dati di log vengono visualizzati nella finestra di output in Visual Studio Code.Notice that log data is displayed in the Output window in Visual Studio Code.

  4. Al termine, ricordarsi di eseguire il comando funzioni di Azure: Arrestare i log in streaming per disabilitare la registrazione per l'app per le funzioni.When you're done, remember to run the command Azure Functions: Stop Streaming Logs to disable logging for the function app.

Strumenti di baseCore Tools

Streaming di log predefinitoBuilt-in log streaming

Usare l' logstream opzione per iniziare a ricevere i log in streaming di una specifica app per le funzioni in esecuzione in Azure, come nell'esempio seguente:Use the logstream option to start receiving streaming logs of a specific function app running in Azure, as in the following example:

func azure functionapp logstream <FunctionAppName>

Flusso metriche attiveLive Metrics Stream

È anche possibile visualizzare l' Live Metrics Stream per l'app per le funzioni in una nuova finestra del browser --browser includendo l'opzione, come nell'esempio seguente:You can also view the Live Metrics Stream for your function app in a new browser window by including the --browser option, as in the following example:

func azure functionapp logstream <FunctionAppName> --browser

Interfaccia della riga di comando di AzureAzure CLI

È possibile abilitare i log in streaming usando l'interfaccia della riga di comando di Azure.You can enable streaming logs by using the Azure CLI. Usare i comandi seguenti per accedere, scegliere la sottoscrizione e trasmettere in streaming i file di log:Use the following commands to sign in, choose your subscription, and stream log files:

az login
az account list
az account set --subscription <subscriptionNameOrId>
az webapp log tail --resource-group <RESOURCE_GROUP_NAME> --name <FUNCTION_APP_NAME>

Azure PowerShellAzure PowerShell

È possibile abilitare i log di streaming usando Azure PowerShell.You can enable streaming logs by using Azure PowerShell. Per PowerShell, usare i comandi seguenti per aggiungere l'account di Azure, scegliere la sottoscrizione e trasmettere in streaming i file di log:For PowerShell, use the following commands to add your Azure account, choose your subscription, and stream log files:

Add-AzAccount
Get-AzSubscription
Get-AzSubscription -SubscriptionName "<subscription name>" | Select-AzSubscription
Get-AzWebSiteLog -Name <FUNCTION_APP_NAME> -Tail

Disabilitare la registrazione predefinitaDisable built-in logging

Quando si Abilita Application Insights, disabilitare la registrazione predefinita che usa archiviazione di Azure.When you enable Application Insights, disable the built-in logging that uses Azure Storage. La registrazione incorporata è utile per i test con carichi di lavoro leggeri, ma non è destinata all'uso di produzione a elevato carico.The built-in logging is useful for testing with light workloads, but isn't intended for high-load production use. Per il monitoraggio della produzione, è consigliabile Application Insights.For production monitoring, we recommend Application Insights. Se la registrazione predefinita viene usata nell'ambiente di produzione, il record di registrazione potrebbe essere incompleto a causa della limitazione delle richieste in archiviazione di Azure.If built-in logging is used in production, the logging record might be incomplete because of throttling on Azure Storage.

Per disabilitare la registrazione predefinita, eliminare l'impostazione app AzureWebJobsDashboard.To disable built-in logging, delete the AzureWebJobsDashboard app setting. Per informazioni su come eliminare le impostazioni app nel portale di Azure, vedere la sezione relativa alle impostazioni dell'applicazione in Come gestire un'app per le funzioni nel portale di Azure.For information about how to delete app settings in the Azure portal, see the Application settings section of How to manage a function app. Prima di eliminare l'impostazione dell'app, assicurarsi che nessuna funzione esistente nella stessa app per le funzioni usi l'impostazione per i trigger o le associazioni di archiviazione di Azure.Before you delete the app setting, make sure no existing functions in the same function app use the setting for Azure Storage triggers or bindings.

Passaggi successiviNext steps

Per altre informazioni, vedere le seguenti risorse:For more information, see the following resources: