Übung: Hinzufügen der Protokollierung und Überwachen einer Azure-Funktion im Portal
In der vorherigen Lektion haben Sie einige der Vorteile kennengelernt, die die Integration von Application Insights in Ihre Funktionsanwendung bietet. Außerdem haben Sie einige der anderen Protokollierungsfunktionen kennengelernt, die Ihrem Entwicklerteam zur Verfügung stehen.
Zu diesem Zeitpunkt der Projektforschung wurde die Funktionsanwendung mithilfe von Maven in Azure bereitgestellt, und Sie haben die Funktionsanwendung in der Produktionsumgebung getestet. Ihre nächste Aufgabe besteht darin, Nachverfolgungs- und Protokollierungsfunktionen zur Anwendung hinzuzufügen.
In dieser Übung aktualisieren Sie die Konfigurationsdateien des Funktionsprojekts, damit sowohl das Protokollstreaming als auch Application Insights unterstützt werden. Außerdem erfahren Sie, wie Sie Ihrem Projektcode benutzerdefinierte Ereignisauslöser für die Nachverfolgung und für Application Insights hinzufügen.
Streamen von Protokollen in Echtzeit
Nachdem Ihre Funktions-App nun bereitgestellt wurde und in Azure ausgeführt wird, können Sie mithilfe des einfachen Azure CLI-Befehls eine Problembehandlung durchführen, um Echtzeitprotokollstreaming von der App zu erhalten.
Im Azure-Portal auf der Seite Übersicht für die Funktion HttpExample. Verwenden Sie das Symbol In Zwischenablage kopieren, um den Wert Ihrer Ressourcengruppe und Ihrer Funktions-App zu kopieren.
Geben Sie im Azure Cloud Shell-Fenster den Befehl
az webapp log tail -n <functionAppName> -g <resourceGroup>
ein, um Protokolle zu streamen. Ersetzen Sie<functionAppName>
und<resourceGroup>
durch die Werte, die Sie im vorherigen Schritt gespeichert haben. Beispiel:az webapp log tail -n event-reporting-20240125192009873 -g learn-f0af729c-0493-4b45-a5b8-d6b4783b03da
Die Ausgabe sollte in etwa der folgenden Nachricht entsprechen.
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).
Öffnen Sie im Webbrowser eine neue Registerkarte, und fügen Sie die vollständig erstellte URL aus der vorherigen Übung ein, um auf Ihre Funktions-App zuzugreifen und einige Protokolle zu generieren.
Wenn der Test abgeschlossen ist, drücken Sie in der Cloud Shell STRG+C, um den Protokolldatenstrom zu schließen.
Hinzufügen von Instrumentation zu Ihrem Java-Projekt für Application Insights
Nachdem Application Insights nun für die Anwendung aktiviert wurde, müssen Sie als Nächstes Insights in der Anwendung aktivieren. Zum Aktivieren der Anwendungsprotokollierung und von Application Insights müssen Sie die Konfigurationsdateien ändern und die erforderlichen Bibliotheken und andere Abhängigkeiten einschließen.
Sie müssen zwei Konfigurationsdateien aktualisieren: pom.xml und host.json.
Ändern der Datei pom.xml
Ändern Sie mit Azure Cloud Shell das Verzeichnis in den Stamm Ihres Projekts:
cd ~/event-reporting
Öffnen Sie die Datei pom.xml mithilfe des Code-Editors von Cloud Shell:
code pom.xml
Fügen Sie dem eigenständigen
<dependencies>
-Abschnitt die folgenden Elemente hinzu, um Application Insights für die Anwendung zu aktivieren:<dependency> <groupId>com.microsoft.azure</groupId> <artifactId>applicationinsights-web-auto</artifactId> <version>2.6.0</version> </dependency>
Hinweis
Stellen Sie sicher, dass Sie
<dependency>
für Application Insights zur eigenständigen<dependencies>
-Sammlung hinzufügen und nicht die<dependencies>
-Sammlung, die im<dependencyManagement>
-Element enthalten ist.Drücken Sie erst STRG+S, um die Datei pom.xml zu speichern, und anschließend STRG+Q, um den Code-Editor zu schließen.
Ändern der Datei host.json
Öffnen Sie die Datei host.json mithilfe des Code-Editors von Cloud Shell:
code host.json
Löschen Sie den vorhandenen JSON-Code, und ersetzen Sie ihn durch die folgenden Einstellungen:
{ "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 } } }
Die Einstellungen für
extensionBundle
wurden bereits definiert, aber dielogging
undapplicationInsights
definieren verschiedene Einstellungen für diese Features.Drücken Sie erst STRG+S, um die Datei host.json zu speichern, und anschließend STRG+Q, um den Code-Editor zu schließen.
Hinzufügen der Protokollierung und der Application Insights-Nachverfolgung zum Projektcode
Sie müssen dem Anwendungscode einige Befehle für die Datenprotokollierung hinzufügen, um die Nützlichkeit der von Application Insights gesammelten Daten zu verbessern, die in den Protokolldateien angezeigt werden.
Hinzufügen der Protokollierung zu der Datei Function.java
Um Ihre Funktion mit einer allgemeinen Protokollierung auszustatten, können Sie Code wie im folgenden Beispiel an wichtigen Punkten im Anwendungscode hinzufügen. Dabei ersetzen Sie die [LOG MESSAGE]
-Zeichenfolge durch die Nachricht, die in den Protokolldateien der Anwendung angezeigt werden soll.
context.getLogger().info("[LOG MESSAGE]");
Führen Sie die folgenden Schritte aus, um die Protokollierung zur Anwendung hinzuzufügen.
Öffnen Sie die Datei Function.java der Anwendung im Cloud Shell-Editor:
code ~/event-reporting/src/main/java/com/contoso/functions/Function.java
Wenn Sie den vorhandenen Code untersuchen, werden Sie feststellen, dass ein
context.getLogger()
-Befehl vorhanden ist. Dies ist die erste Anweisung nach der Definition derrun()
-Funktion.Suchen Sie den folgenden Codeabschnitt, der auf eine leere GET-Abfragezeichenfolge oder eine leere POST-Anforderung testet:
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(); }
Ändern Sie diesen Codeabschnitt so, dass er zwei
context.getLogger()
-Befehle enthält, die den Status Ihrer Funktion an das Protokollierungssystem ausgeben: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(); }
Drücken Sie STRG+S, um die Datei Function.java zu speichern. Schließen Sie jedoch nicht den Editor – Sie werden Ihrer Anwendung im nächsten Abschnitt dieser Übung Code hinzufügen.
Hinzufügen der Application Insights-Nachverfolgung zu Ihrer Function.java-Datei
Fügen Sie Ihren vorhandenen Importen die folgende
import
-Anweisung hinzu. Diese Anweisung importiert die Application Insights-Telemetriebibliothek:import com.microsoft.applicationinsights.TelemetryClient;
Fügen Sie der
Function()
-Klasse Ihrer Anwendung die folgende Definition hinzu. Mit dieser Anweisung wird einTelemetryClient
-Objekt instanziiert:private TelemetryClient telemetry = new TelemetryClient();
Kopieren Sie jede der
context.getLogger()
-Anweisungen, und ändern Sie den Code so, dass jeder doppelte Eintragtelemetry.trackEvent()
anstelle voncontext.getLogger()
aufruft:. . . 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(); } . . .
Drücken Sie erst STRG+S, um die Function.java-Datei zu speichern und anschließend STRG+Q, um den Code-Editor zu schließen.
Zuletzt müssen Sie die Funktionsanwendung erstellen, packen und erneut bereitstellen.
cd ~/event-reporting mvn clean package azure-functions:deploy
Die Protokollierung und die Datenerfassung durch Application Insights wurden Ihrer Funktion jetzt hinzugefügt.
Verwenden von Application Insights zum Überwachen Ihrer Azure-Funktion
Die Anwendung wird jetzt aktualisiert und unterstützt nun eine differenzierte Protokollierung mit der Systemprotokollierung und Application Insights.
Zum Generieren von HTTP-Beispieldatenverkehr kopieren Sie die URL, die Sie im vorherigen Beispiel verwendet haben, um Ihre Anwendung in einem Webbrowser zu testen. Verwenden Sie diese URL mit cURL, um eine Schleife in der Azure Cloud Shell zu erstellen. Zum Beispiel:
while :; do curl https://event-reporting-20200102030405006.azurewebsites.net/api/HttpExample?name=Bob; sleep 1; done
Melden Sie sich beim Azure-Portal mit demselben Konto an, das Sie zum Aktivieren der Sandbox verwendet haben.
Klicken Sie im Menü auf der linken Seite auf Alle Ressourcen.
Wählen Sie Ihre Funktion in der Liste der Ressourcen aus. Für diese Übung beginnt der Name Ihrer Funktion mit event-reporting, zum Beispiel event-reporting-20200102030405006.
Zeigen Sie Ihre Protokollstreamingaktivität an:
Wählen Sie im Menü Funktions-App die Option Protokolldatenstrom aus.
Öffnen Sie das Dropdownmenü App Insights-Protokolle, und wählen Sie Dateisystemprotokolle aus.
Beachten Sie, dass Ihr Beispieldatenverkehr eine Reihe von Protokolleinträgen generiert.
Anzeigen Ihrer Livemetrikenaktivität:
Wählen Sie das Dropdownmenü Dateisystemprotokolle und dann App Insights-Protokolle aus.
Wählen Sie In Livemetriken öffnen aus. Jetzt sehen Sie, dass Ihr Beispieldatenverkehr Ergebnisse für Application Insights und Livemetriken generiert.
Herzlichen Glückwunsch, Sie haben Ihre Azure-Funktion für die ausführliche Protokollierung erfolgreich konfiguriert.
Wechseln Sie vor dem Fortfahren zurück zur Cloud Shell, und drücken Sie STRG+C, um die Befehlsschleife zu schließen.