Übung: Hinzufügen der Protokollierung und Überwachen einer Azure-Funktion im Portal

Abgeschlossen

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.

  1. 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.

  2. 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
    
    
  3. 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).
    
  4. Ö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.

  5. 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

  1. Ändern Sie mit Azure Cloud Shell das Verzeichnis in den Stamm Ihres Projekts:

    cd ~/event-reporting
    
  2. Öffnen Sie die Datei pom.xml mithilfe des Code-Editors von Cloud Shell:

    code pom.xml
    
  3. 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.

  4. 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

  1. Öffnen Sie die Datei host.json mithilfe des Code-Editors von Cloud Shell:

    code host.json
    
  2. 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 die logging und applicationInsights definieren verschiedene Einstellungen für diese Features.

  3. 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.

  1. Ö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 der run()-Funktion.

  2. 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();
    }
    
  3. Ä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();
    }
    
  4. 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

  1. Fügen Sie Ihren vorhandenen Importen die folgende import-Anweisung hinzu. Diese Anweisung importiert die Application Insights-Telemetriebibliothek:

    import com.microsoft.applicationinsights.TelemetryClient;
    
  2. Fügen Sie der Function()-Klasse Ihrer Anwendung die folgende Definition hinzu. Mit dieser Anweisung wird ein TelemetryClient-Objekt instanziiert:

    private TelemetryClient telemetry = new TelemetryClient();
    
  3. Kopieren Sie jede der context.getLogger()-Anweisungen, und ändern Sie den Code so, dass jeder doppelte Eintrag telemetry.trackEvent() anstelle von context.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();
    }
    . . .
    
  4. 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.

  5. 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.

  1. 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
    
  2. Melden Sie sich beim Azure-Portal mit demselben Konto an, das Sie zum Aktivieren der Sandbox verwendet haben.

  3. Klicken Sie im Menü auf der linken Seite auf Alle Ressourcen.

  4. 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.

  5. Zeigen Sie Ihre Protokollstreamingaktivität an:

    1. Wählen Sie im Menü Funktions-App die Option Protokolldatenstrom aus.

    2. Öffnen Sie das Dropdownmenü App Insights-Protokolle, und wählen Sie Dateisystemprotokolle aus.

      Image showing where to find Log Streaming.

    3. Beachten Sie, dass Ihr Beispieldatenverkehr eine Reihe von Protokolleinträgen generiert.

      Image showing Log Streaming.

  6. Anzeigen Ihrer Livemetrikenaktivität:

    1. Wählen Sie das Dropdownmenü Dateisystemprotokolle und dann App Insights-Protokolle aus.

    2. Wählen Sie In Livemetriken öffnen aus. Jetzt sehen Sie, dass Ihr Beispieldatenverkehr Ergebnisse für Application Insights und Livemetriken generiert.

      Image showing Application Insights and Live Metrics highlights.

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.