Monitorare Funzioni di AzureMonitor Azure Functions

PanoramicaOverview

Funzioni di Azure offre l'integrazione predefinita con Azure Application Insights per il monitoraggio delle funzioni.Azure Functions offers built-in integration with Azure Application Insights for monitoring functions. Questo articolo illustra come configurare Funzioni per inviare i dati di telemetria ad Application Insights.This article shows how to configure Functions to send telemetry data to Application Insights.

Esplora metriche di Application Insights

Funzioni dispone anche di funzionalità di monitoraggio incorporate che non usano Application Insights.Functions also has built-in monitoring that doesn't use Application Insights. Si consiglia di usare Application Insights perché offre un numero maggiore di dati e modalità di analisi dei dati migliori.We recommend Application Insights because it offers more data and better ways to analyze the data. Per informazioni sul monitoraggio predefinito, vedere l'ultima sezione di questo articolo.For information about the built-in monitoring, see the last section of this article.

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 un'istanza di Application Insights.For a function app to send data to Application Insights, it needs to know the instrumentation key of an Application Insights instance. Esistono due modi per realizzare tale connessione nel portale di Azure:There are two ways to make that connection in the Azure portal:

Nuova app per le funzioniNew function app

Abilitare Application Insights nella pagina Crea dell'app per le funzioni:Enable Application Insights on the Function App Create page:

  1. Impostare l'interruttore di Application Insights su On (Attivo).Set the Application Insights switch On.

  2. Selezionare una Località di Application Insights.Select an Application Insights Location.

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

App per le funzioni esistenteExisting function app

Ottenere la chiave di strumentazione e salvarla in un'app per le funzioni:Get the instrumentation key and save it in a function app:

  1. Creare l'istanza di Application Insights.Create the Application Insights instance. Impostare il tipo di applicazione su Generale.Set application type to General.

    Creare un'istanza di Application Insights di tipo Generale

  2. Copiare la chiave di strumentazione dalla pagina Informazioni di base dell'istanza di Application Insights.Copy the instrumentation key from the Essentials page of the Application Insights instance. Passare il mouse sulla parte finale del valore della chiave visualizzata per far comparire il pulsante Fare clic per copiare.Hover over the end of the displayed key value to get a Click to copy button.

    Copiare la chiave di strumentazione di Application Insights

  3. Nella pagina Impostazioni applicazione dell'app per le funzioni aggiungere un'impostazione applicazione facendo clic su Aggiungi nuova impostazione.In the function app's Application settings page, add an app setting by clicking Add new setting. Denominare la nuova impostazione APPINSIGHTS_INSTRUMENTATIONKEY e incollare la chiave di strumentazione copiata.Name the new setting APPINSIGHTS_INSTRUMENTATIONKEY and paste the copied instrumentation key.

    Aggiungere la chiave di strumentazione alle impostazioni dell'app

  4. Fare clic su Salva.Click Save.

Visualizzare i dati di telemetriaView telemetry data

Per passare da un'app per le funzioni nel portale all'istanza connessa di Application Insights, selezionare il collegamento Application Insights nella pagina Panoramica dell'app per le funzioni.To navigate to the connected Application Insights instance from a function app in the portal, select the Application Insights link on the function app's Overview page.

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 sulla configurazione e la personalizzazione dei dati di telemetria.If you are already familiar with Application Insights, you can go directly to the sections about configuring and customizing the telemetry data.

In Esplora metriche è possibile creare grafici e avvisi in base alle metriche ad esempio numero di chiamate alla funzione, tempo di esecuzione e percentuale di successo.In Metrics Explorer, you can create charts and alerts based on metrics such as number of function invocations, execution time, and success rate.

Esplora metriche

Nella scheda Errori è possibile creare grafici e avvisi in base agli errori di funzione e alle eccezioni del server.On the Failures tab, you can 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 mostrati a meno che non si implementino i dati di telemetria personalizzati per le dipendenze.Failures in dependencies are not shown unless you implement custom telemetry for dependencies.

Errori

Nella scheda Prestazioni è possibile analizzare i problemi di prestazioni.On the Performance tab, you can analyze performance issues.

Prestazioni

La scheda Server mostra l'uso delle risorse e la velocità effettiva per ogni server.The Servers tab shows 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.

Server

La scheda Live Metrics Stream mostra i dati delle metriche man mano che vengono creati in tempo reale.The Live Metrics Stream tab shows metrics data as it is created in real time.

Live stream

Query sui dati di telemetriaQuery telemetry data

Analytics di Application Insights consente di accedere a tutti i dati di telemetria sotto forma di tabelle in un database.Application Insights Analytics gives you access to all of the 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

Di seguito è riportato un esempio di query,Here's a query example. che mostra la distribuzione delle richieste per ruolo di lavoro negli ultimi 30 minuti.This one 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 mostrate nella scheda Schema del riquadro a sinistra.The tables that are available are shown in the Schema tab of the left pane. Nelle tabelle seguenti è possibile trovare i dati generati dalle chiamate alla funzione:You can find data generated by function invocations in the following tables:

  • tracce: log creato dal runtime e dal codice della funzione.traces - Logs created by the runtime and by function code.
  • richieste: uno per ogni chiamata alla funzione.requests - One for each function invocation.
  • eccezioni: tutte le eccezioni generate dal runtime.exceptions - Any exceptions thrown by the runtime.
  • customMetrics: numero di chiamate con esito positivo e negativo, percentuale di successo, durata.customMetrics - Count of successful and failing invocations, success rate, duration.
  • customEvents: eventi rilevati dal runtime, ad esempio richieste HTTP che attivano una funzione.customEvents - Events tracked by the runtime, for example: HTTP requests that trigger a function.
  • performanceCounters: informazioni sulle prestazioni dei server su cui sono in esecuzione le funzioni.performanceCounters - Info about the performance of the servers that the functions are running on.

Le altre tabelle sono riservate ai test di disponibilità e ai dati di telemetria del browser o del client.The other tables are for availability tests and client/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 indica customDimensions.LogLevel e customDimensions.Category.The runtime provides customDimensions.LogLevel and customDimensions.Category. È possibile specificare campi aggiuntivi nei log in cui si scrive il codice funzione.You can provide additional fields in logs 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 una configurazione personalizzata, ma la configurazione predefinita può creare volumi elevati di dati.You can use Application Insights without any custom configuration, but 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. La parte rstante di questo articolo illustra come configurare e personalizzare i dati inviati dalle funzioni ad Application Insights.The remainder of this article shows how to configure and customize the data that your functions send to Application Insights.

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 that have a category beginning with "Host". Ad esempio i log "funzione avviata," "funzione eseguita" e "funzione completata" rientrano nella categoria "Host.Executor".For example, the "function started," "function executed," and "function completed" logs have category "Host.Executor".

Se si scrivono i log nel codice funzione, la categoria è "Function".If you write logs in your function code, their category is "Function".

Livelli di registrazioneLog levels

Il logger delle funzioni di Azure include anche un livello di registrazione per 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.

Configurare la registrazione nel file host.jsonConfigure logging 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. Ad esempio:Here's an example:

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

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

  1. Per i log con categoria "Host.Results" o "Function", inviare ad Application Insights solo i log di livello Error e livelli superiori.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.
  2. Per i log con categoria Host.For logs with category Host. Aggregator, inviare ad Application Insights solo i log di livello Information e superiori.Aggregator, send only Information level and above to Application Insights. I log di livello Debug e livelli inferiori vengono ignorati.Logs for Debug level and below are ignored.
  3. 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. Ad esempio, "Host" in host.json controlla la registrazione di "Host.General", "Host.Executor", "Host.Results" e così via.For example, "Host" in host.json controls logging for "Host.General", "Host.Executor", "Host.Results", and so forth.

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. Ad esempio, si supponga di volere che tutti gli elementi dalla fase di runtime, ad eccezione di "Host.Aggregator", siano registrati al livello Error mentre i log "Host.Aggregator" vengono registrati al livello Information:For example, suppose you want everything from the runtime except "Host.Aggregator" to log at Error level, while "Host.Aggregator" logs at Information level:

{
  "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 quella categoria e non vi è alcun livello di registrazione superiore.No logs are written with that category and there is 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 al livello Information, pertanto se si applica un filtro al livello Warning o superiore, questi dati non verranno visualizzati.All of these logs are written at Information level, so 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. Gli esempi indicano il numero di esecuzioni, la percentuale di successo e la durata.Examples are number of runs, success rate, and duration.

query customMetrics

Tutti questi log vengono scritti al livello Information, pertanto se si applica un filtro al livello Warning o superiore, questi dati non verranno visualizzati.All of these logs are written at Information level, so 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 le 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 log "Funzione avviata e "Funzione completata" rientrano nella categoria "Host.Executor".The "Function started" and "Function completed" logs have category "Host.Executor". Affinché vengano eseguiti correttamente, questi log devono avere il livello Information, mentre le eccezioni vengono registrate al livello Error.For successful runs, these logs are Information level; 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 funzione rientrano nella categoria "Function" e possono avere qualsiasi livello di registrazione.Logs written by your function code have category "Function" and may 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 ha una funzionalità di campionamento che consente di evitare la produzione di un numero eccessivo di dati di telemetria nei picchi di carico.Application Insights has a sampling feature that can protect you from producing too much telemetry data at times of peak load. Quando il numero degli elementi di telemetria supera una frequenza specificata, Application Insights inizia a ignorare in modo casuale alcuni degli elementi in ingresso.When the number of telemetry items exceeds a specified rate, Application Insights starts to randomly ignore some of the incoming items. È possibile configurare il campionamento nel file host.json.You can configure sampling in host.json. Ad esempio:Here's an example:

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

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 con TraceWriter passano in Application Insights, ma ILogger consente di eseguire una registrazione strutturata.Logs created by using TraceWriter do go to Application Insights, but ILogger lets you do structured logging.

Con un oggetto ILogger è possibile chiamare i metodi di estensione ILogger Log<level> per creare i log.With an ILogger object you call Log<level> extension methods on ILogger to create logs. Ad esempio, il codice seguente scrive i log Information con la categoria "Function".For example, the following code writes Information logs with category "Function".

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. Ad esempio, si supponga di disporre del codice seguente:For example, 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. Oltre alla stringa del messaggio, Application Insights archivia le coppie nome-valore del parametro.Application Insights stores the parameter name-value pairs in addition to 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.

Ad esempio, se la chiamata al metodo del logger è simile all'esempio precedente, è possibile eseguire una query per il campo customDimensions.prop__rowKey.For example, if your logger method call looks like the previous example, you could query the field customDimensions.prop__rowKey. Il prefisso prop__ viene aggiunto per verificare che non ci siano conflitti tra i campi aggiunti dal runtime e i campi aggiunti dal codice funzione.The prop__ prefix is added to ensure that 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 personalizzateLogging custom metrics

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 con l'API di Application Insights per .NET.This code is an alternative to calling TrackMetric 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 is not enabled.

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

Registrazione delle metriche personalizzateLogging custom metrics

Nelle funzioni Node.js è possibile usare il metodo di estensione context.log.metric per creare metriche personalizzate in Application Insights.In Node.js functions, you can use the context.log.metric method to create custom metrics in Application Insights. 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 con l'SDK di Node.js per Application Insights.This code is an alternative to calling trackMetric using the Node.js SDK for Application Insights.

Dati di telemetria personalizzata nelle funzioni C#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.

Di seguito è riportato un esempio di codice C# che usa l'API di telemetria personalizzata.Here's an example of C# code that 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.

using System;
using System.Net;
using Microsoft.ApplicationInsights;
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 telemetry = 
            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;

            telemetry.Context.Operation.Id = context.InvocationId.ToString();
            telemetry.Context.Operation.Name = "cs-http";
            if (!String.IsNullOrEmpty(name))
            {
                telemetry.Context.User.Id = name;
            }
            telemetry.TrackEvent("Function called");
            telemetry.TrackMetric("Test Metric", DateTime.Now.Millisecond);
            telemetry.TrackDependency("Test Dependency", 
                "swapi.co/api/planets/1/", 
                start, DateTime.UtcNow - start, true);

            return name == null
                ? req.CreateResponse(HttpStatusCode.BadRequest, 
                    "Please pass a name on the query string or in the request body")
                : req.CreateResponse(HttpStatusCode.OK, "Hello " + name);
        }
    }
}

Non chiamare TrackRequest o StartOperation<RequestTelemetry>, in quanto compariranno le richieste di duplicazione per una chiamata alla 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.

Impostare telemetry.Context.Operation.Id sull'ID della chiamata ogni volta che viene avviata la funzione.Set telemetry.Context.Operation.Id to the invocation ID each time your function is started. In questo modo è possibile correlare tutti gli elementi di telemetria per una chiamata alla funzione specifica.This makes it possible to correlate all telemetry items for a given function invocation.

telemetry.Context.Operation.Id = context.InvocationId.ToString();

Dati di telemetria personalizzati nelle funzioni JavaScriptCustom telemetry in JavaScript functions

L'SDK di Node.js per Application Insights è attualmente in versione beta.The Application Insights Node.js SDK is currently in beta. Di seguito è riportato un codice di esempio che invia i dati di telemetria personalizzati ad Application Insights:Here's some sample code that sends custom telemetry to Application Insights:

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}});

    if (req.query.name || (req.body && req.body.name)) {
        context.res = {
            // status: 200, /* Defaults to 200 */
            body: "Hello " + (req.query.name || req.body.name)
        };
    }
    else {
        context.res = {
            status: 400,
            body: "Please pass a name on the query string or in the request body"
        };
    }
    context.done();
};

Il parametro tagOverrides imposta operation_Id sull'ID di chiamata alla funzione.The tagOverrides parameter sets 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 alla funzione specifica.This setting enables you to correlate all of the automatically-generated and custom telemetry for a given function invocation.

Problemi notiKnown issues

DipendenzeDependencies

Le dipendenze tra la funzione e gli altri servizi non vengono visualizzate automaticamente, ma è possibile scrivere codice personalizzato per visualizzarle.Dependencies that the function has to other services don't show up automatically, but you can write custom code to show the dependencies. Il codice di esempio nella sezione relativa ai dati di telemetria personalizzati C# ne illustra le modalità.The sample code in the C# custom telemetry section shows how. Il codice di esempio crea una mappa dell'applicazione in Application Insights simile alla seguente:The sample code results in an application map in Application Insights that looks like this:

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.

Monitoraggio senza Application InsightsMonitoring without Application Insights

Si consiglia di usare Application Insights per monitorare le funzioni perché offre un numero maggiore di dati e modalità di analisi dei dati migliori.We recommend Application Insights for monitoring functions because it offers more data and better ways to analyze the data. Ma è anche possibile trovare dati di telemetria e di registrazione nelle pagine del portale di Azure per un'app per le funzioni.But you can also find telemetry and logging data in the Azure portal pages for a Function app.

Selezionare la scheda Monitoraggio per una funzione per ottenere un elenco di esecuzioni della funzione.Select the Monitor tab for a function and you get a list of function executions. Selezionare l'esecuzione della funzione per esaminare la durata, i dati di input, gli errori e i file di log associati.Select a function execution to review the duration, input data, errors, and associated log files.

Importante

Quando si usa il piano di hosting a consumo per Funzioni di Azure, il riquadro Monitoraggio nell'app per le funzioni non mostra alcun dato.When using the Consumption hosting plan for Azure Functions, the Monitoring tile in the Function App does not show any data. Ciò avviene perché la piattaforma ridimensiona e gestisce automaticamente le istanze di calcolo.This is because the platform dynamically scales and manages compute instances for you. Queste metriche non sono quindi significative per un piano a consumo.These metrics are not meaningful on a Consumption plan.

Monitoraggio in tempo realeReal-time monitoring

Il monitoraggio in tempo reale è disponibile facendo clic su flusso eventi live nella scheda Monitoraggio della funzione. Il flusso eventi live viene visualizzato in un grafico in una nuova scheda nel browser.Real-time monitoring is available by clicking Live Event Stream on the function Monitor tab. The live event stream is displayed in a graph in a new browser tab.

Nota

A causa di un problema noto, è possibile che il popolamento dei dati abbia esito negativo.There is a known issue that may cause your data to fail to be populated. Potrebbe essere necessario chiudere la scheda del browser che include il flusso eventi live e quindi fare di nuovo clic su flusso eventi live per consentire il popolamento corretto dei dati del flusso di eventi.You may need to close the browser tab containing the live event stream and then click Live Event Stream again to allow it to properly populate your event stream data.

Queste statistiche sono in tempo reale, ma la creazione effettiva dei grafici relativi ai dati dell'esecuzione potrebbe comportare circa 10 secondi di latenza.These statistics are real-time but the actual graphing of the execution data may have around 10 seconds of latency.

Monitorare i file di log da una riga di comandoMonitor log files from a command line

È possibile trasmettere in streaming i file di log a una sessione della riga di comando su una workstation locale usando l'interfaccia della riga di comando di Azure 1.0 o PowerShell.You can stream log files to a command-line session on a local workstation using the Azure Command Line Interface (CLI) 1.0 or PowerShell.

Monitorare i file di log dell'app per le funzioni con l'interfaccia della riga di comando di Azure 1.0Monitor function app log files with the Azure CLI 1.0

Per iniziare, installare l'interfaccia della riga di comando di Azure 1.0 e accedere ad Azure.To get started, install the Azure CLI 1.0 and sign in to Azure.

Usare i comandi seguenti per abilitare la modalità classica di Gestione servizi, scegliere la sottoscrizione e trasmettere in streaming i file di log:Use the following commands to enable classic Service Management mode, choose your subscription, and stream log files:

azure config mode asm
azure account list
azure account set <subscriptionNameOrId>
azure site log tail -v <function app name>

Monitorare i file di log delle app per le funzioni tramite PowerShellMonitor function app log files with PowerShell

Per iniziare, installare e configurare Azure PowerShell.To get started, install and configure Azure PowerShell.

Usare i comandi seguenti per aggiungere l'account di Azure, scegliere la sottoscrizione e trasmettere in streaming i file di log:Use the following commands to add your Azure account, choose your subscription, and stream log files:

PS C:\> Add-AzureAccount
PS C:\> Get-AzureSubscription
PS C:\> Get-AzureSubscription -SubscriptionName "MyFunctionAppSubscription" | Select-AzureSubscription
PS C:\> Get-AzureWebSiteLog -Name MyFunctionApp -Tail

Per altre informazioni, vedere Procedura: Eseguire lo streaming dei log per le app Web.For more information, see How to: Stream logs for web apps.

Passaggi successiviNext steps