Esercizio - Aggiungere la registrazione e il monitoraggio di una funzione di Azure nel portale
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.
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.
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
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).
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.
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
Usando Cloud Shell, cambiare directory passando alla radice del progetto:
cd ~/event-reporting
Aprire il file pom.xml usando l'editor di codice di Cloud Shell:
code pom.xml
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>
.Premere CTRL+S per salvare il file pom.xml e quindi CTRL+Q per chiudere l'editor di codice.
Modifica del file host.json
Aprire il file host.json usando l'editor di codice di Cloud Shell:
code host.json
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, malogging
eapplicationInsights
definiscono diverse impostazioni per tali funzionalità.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.
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 funzionerun()
.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(); }
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(); }
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
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;
Aggiungere la definizione seguente alla classe
Function()
dell'applicazione. Questa istruzione crea un'istanza di un oggettoTelemetryClient
:private TelemetryClient telemetry = new TelemetryClient();
Copiare ogni istruzione
context.getLogger()
e modificare il codice in modo che ognuna delle voci duplicate chiamitelemetry.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(); } . . .
Premere CTRL+S per salvare il file Function.java e quindi CTRL+Q per chiudere l'editor di codice.
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.
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
Accedere al portale di Azure con lo stesso account usato per attivare la sandbox.
Selezionare Tutte le risorse dal menu a sinistra.
Selezionare la funzione nell'elenco delle risorse. Per questo esercizio il nome della funzione inizia con event-reporting. Ad esempio: event-reporting-20200102030405006.
Visualizzare l'attività del flusso di registrazione:
Selezionare Log stream (Flusso di log) nel menu App per le funzioni.
Aprire l'elenco a discesa log di App Insights e selezionare Log del filesystem.
Si noti che il traffico di esempio genera una serie di voci di log.
Visualizzare l'attività Metriche attive:
Selezionare l'elenco a discesa Log del filesystem e selezionare Log di App Insights.
Selezionare Apri in Live Metrics. Ora è possibile vedere che il traffico di esempio genera i risultati di Application Insights e Live Metrics.
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.