Esercizio - Aggiungere la registrazione e il monitoraggio di una funzione di Azure nel portale

Completato

Nell'unità precedente sono stati illustrati alcuni dei vantaggi offerti dall'incorporazione di Application Insights nell'applicazione per le funzioni. Sono state anche illustrate alcune delle altre funzionalità di registrazione disponibili per il team di sviluppatori.

In questa fase della ricerca del progetto è stata distribuita l'applicazione per le funzioni in Azure usando Maven ed è stata testata l'applicazione per le funzioni nell'ambiente di produzione. L'attività successiva consiste nell'aggiungere funzionalità di rilevamento e registrazione all'applicazione.

In questo esercizio vengono aggiornati i file di configurazione del progetto di funzione per supportare sia il flusso di registrazione che Application Insights. Si apprende anche come aggiungere al codice del progetto trigger di evento personalizzati per il rilevamento e Application Insights.

Eseguire lo streaming dei log in tempo reale

Ora che l'app per le funzioni viene distribuita ed è in esecuzione in Azure, è possibile risolverla usando il semplice comando dell'interfaccia della riga di comando di Azure per ottenere lo streaming dei log in tempo reale dall'app.

  1. Nel portale di Azure, nella pagina Panoramica per la funzione HttpExample. Usare l'icona Copia negli Appunti per copiare il valore del gruppo di risorse e dell’app per le funzioni.

  2. Nella finestra di Azure Cloud Shell immettere il comando az webapp log tail -n <functionAppName> -g <resourceGroup> per lo streaming dei log. Sostituire <functionAppName> e <resourceGroup> con i valori salvati nel passaggio precedente. Ad esempio:

    az webapp log tail -n event-reporting-20240125192009873 -g learn-f0af729c-0493-4b45-a5b8-d6b4783b03da
    
    
  3. Viene visualizzato un output simile al messaggio seguente.

    2024-01-25T20:44:58  Welcome, you are now connected to log-streaming service. The default timeout is 2 hours. Change the timeout with the App Setting SCM_LOGSTREAM_TIMEOUT (in seconds). 
    2024-01-25T20:45:58  No new trace in the past 1 min(s).
    
  4. Aprire una nuova scheda nel Web browser e incollare l'URL completamente costruito dall'esercizio precedente per accedere all'app per le funzioni per generare alcuni log.

  5. Al termine dei test, premere CTRL+C in Cloud Shell per chiudere il flusso di log.

Aggiunta di strumentazione al progetto Java per Application Insights

Ora che Application Insights è abilitato per l'applicazione, l'attività successiva è abilitarlo nell'applicazione. Per abilitare la registrazione dell'applicazione e Application Insights, è necessario modificare i file di configurazione in modo da includere le librerie necessarie e altre dipendenze.

Sono due i file di configurazione che è necessario aggiornare: pom.xml e host.json.

Modifica del file pom.xml

  1. Usando Cloud Shell, cambiare directory passando alla radice del progetto:

    cd ~/event-reporting
    
  2. Aprire il file pom.xml usando l'editor di codice di Cloud Shell:

    code pom.xml
    
  3. Aggiungere gli elementi seguenti alla sezione <dependencies> autonoma, per abilitare Application Insights per l'applicazione:

    <dependency>
        <groupId>com.microsoft.azure</groupId>
        <artifactId>applicationinsights-web-auto</artifactId>
        <version>2.6.0</version>
    </dependency>
    

    Nota

    Assicurarsi di aggiungere <dependency> per Application Insights alla raccolta <dependencies> autonoma, non alla raccolta di <dependencies> contenuta nell'elemento <dependencyManagement>.

  4. Premere CTRL+S per salvare il file pom.xml e quindi CTRL+Q per chiudere l'editor di codice.

Modifica del file host.json

  1. Aprire il file host.json usando l'editor di codice di Cloud Shell:

    code host.json
    
  2. Rimuovere il codice JSON esistente e sostituirlo con le impostazioni seguenti:

    {
        "version": "2.0",
        "extensionBundle": {
            "id": "Microsoft.Azure.Functions.ExtensionBundle",
            "version": "[1.*, 2.0.0)"
        },
        "logging": {
            "fileLoggingMode": "always",
            "logLevel": {
                "default": "Information"
            }
        },
        "applicationInsights": {
            "samplingSettings": {
                "isEnabled": true,
                "maxTelemetryItemsPerSecond" : 5
            }
        }
    }
    

    Le impostazioni per extensionBundle sono già state definite, ma logging e applicationInsights definiscono diverse impostazioni per tali funzionalità.

  3. Premere CTRL+S per salvare il file host.json e quindi CTRL+Q per chiudere l'editor di codice.

Aggiunta della registrazione e del rilevamento di Application Insights al codice del progetto

Per migliorare l'utilità dei dati raccolti da Application Insights che vengono visualizzati nei file di log, è necessario aggiungere alcuni comandi di registrazione dei dati al codice dell'applicazione.

Aggiunta della registrazione al file Function.Java

Per aggiungere la registrazione generale alla funzione, è possibile aggiungere codice come nell'esempio seguente nei punti chiave del codice dell'applicazione, dove si sostituisce la stringa [LOG MESSAGE] con un messaggio che dovrà essere visualizzato nei file di log dell'applicazione.

context.getLogger().info("[LOG MESSAGE]");

Per aggiungere la registrazione all'applicazione, seguire questa procedura.

  1. Aprire il file Function.Java dell'applicazione nell'editor di Cloud Shell:

    code ~/event-reporting/src/main/java/com/contoso/functions/Function.java
    

    Se si esamina il codice esistente, si noterà che è già presente un comando context.getLogger(). Si tratta della prima istruzione dopo la definizione della funzione run().

  2. Individuare la sezione seguente di codice, che verifica la presenza di una stringa di query GET vuota o di una richiesta POST vuota:

    if (name == null) {
        return request.createResponseBuilder(HttpStatus.BAD_REQUEST).body("Please pass a name on the query string or in the request body").build();
    } else {
        return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();
    }
    
  3. Modificare questa sezione di codice in modo che contenga due comandi context.getLogger() che restituiscono lo stato della funzione al sistema di registrazione:

    if (name == null) {
        context.getLogger().info("Execution failure - Incorrect or missing parameter used.");
        return request.createResponseBuilder(HttpStatus.BAD_REQUEST).body("Please pass a name on the query string or in the request body").build();
    } else {
        context.getLogger().info("Execution success - name parameter = " + name);
        return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();
    }
    
  4. Premere CTRL+S per salvare il file Function.Java, ma non chiudere l'editor. Si continuerà ad aggiungere codice all'applicazione nella sezione successiva di questo esercizio.

Aggiunta del rilevamento di Application Insights al file Function.Java

  1. Aggiungere la seguente istruzione import al set di importazioni esistente. Questa istruzione importa la libreria di telemetria di Application Insights:

    import com.microsoft.applicationinsights.TelemetryClient;
    
  2. Aggiungere la definizione seguente alla classe Function() dell'applicazione. Questa istruzione crea un'istanza di un oggetto TelemetryClient:

    private TelemetryClient telemetry = new TelemetryClient();
    
  3. Copiare ogni istruzione context.getLogger() e modificare il codice in modo che ognuna delle voci duplicate chiami telemetry.trackEvent() anziché context.getLogger():

    . . .
    context.getLogger().info("Java HTTP trigger processed a request.");
    telemetry.trackEvent("Java HTTP trigger processed a request.");
    
    // Parse query parameter
    String query = request.getQueryParameters().get("name");
    String name = request.getBody().orElse(query);
    
    if (name == null) {
        context.getLogger().info("Execution failure - Incorrect or missing parameter used.");
        telemetry.trackEvent("Execution failure - Incorrect or missing parameter used.");
        return request.createResponseBuilder(HttpStatus.BAD_REQUEST).body("Please pass a name on the query string or in the request body").build();
    } else {
        context.getLogger().info("Execution success - name parameter = " + name);
        telemetry.trackEvent("Execution success - name parameter = " + name);
        return request.createResponseBuilder(HttpStatus.OK).body("Hi, " + name).build();
    }
    . . .
    
  4. Premere CTRL+S per salvare il file Function.java e quindi CTRL+Q per chiudere l'editor di codice.

  5. L'ultima cosa da fare è compilare, creare il pacchetto e ridistribuire l'applicazione per le funzioni.

    cd ~/event-reporting
    mvn clean package azure-functions:deploy
    

Sono state aggiunte alla funzione la registrazione e la raccolta dei dati di Application Insights.

Uso di Application Insights per monitorare la funzione di Azure

L'applicazione è ora aggiornata per supportare la registrazione granulare sia con il logger di sistema che con Application Insights.

  1. Per generare un traffico HTTP di esempio, copiare l'URL usato per testare l'applicazione in un Web browser nell'esercizio precedente. Usare tale URL con cURL per creare un ciclo in Azure Cloud Shell; per esempio:

    while :; do curl https://event-reporting-20200102030405006.azurewebsites.net/api/HttpExample?name=Bob; sleep 1; done
    
  2. Accedere al portale di Azure con lo stesso account usato per attivare la sandbox.

  3. Selezionare Tutte le risorse dal menu a sinistra.

  4. Selezionare la funzione nell'elenco delle risorse. Per questo esercizio il nome della funzione inizia con event-reporting. Ad esempio: event-reporting-20200102030405006.

  5. Visualizzare l'attività del flusso di registrazione:

    1. Selezionare Log stream (Flusso di log) nel menu App per le funzioni.

    2. Aprire l'elenco a discesa log di App Insights e selezionare Log del filesystem.

      Image showing where to find Log Streaming.

    3. Si noti che il traffico di esempio genera una serie di voci di log.

      Image showing Log Streaming.

  6. Visualizzare l'attività Metriche attive:

    1. Selezionare l'elenco a discesa Log del filesystem e selezionare Log di App Insights.

    2. Selezionare Apri in Live Metrics. Ora è possibile vedere che il traffico di esempio genera i risultati di Application Insights e Live Metrics.

      Image showing Application Insights and Live Metrics highlights.

Congratulazioni, la configurazione della funzione di Azure per la registrazione dettagliata è stata completata.

Prima di continuare, tornare a Cloud Shell e premere CTRL+C per chiudere il ciclo di comandi.