Cvičení – přidání protokolování a sledování funkce služby Azure Functions na portálu

Dokončeno

V předchozí lekci jste se dozvěděli o několika výhodách začlenění aplikačních Přehledy do aplikace funkcí. Dozvěděli jste se také o některých dalších funkcích protokolování, které jsou k dispozici vašemu týmu vývojářů.

V této fázi výzkumu projektu jste nasadili aplikaci funkcí do Azure pomocí Mavenu a otestovali jste aplikaci funkcí v produkčním prostředí. Vaším dalším úkolem je přidat do aplikace funkci sledování a protokolování.

V tomto cvičení aktualizujete konfigurační soubory projektu funkce tak, aby podporovaly streamování protokolů i Přehledy aplikace. Dozvíte se také, jak do kódu projektu přidat vlastní aktivační události sledování a události Application Insight.

Streamování protokolů v reálném čase

Teď, když je vaše aplikace funkcí nasazená a spuštěná v Azure, můžete ji vyřešit pomocí jednoduchého příkazu Azure CLI, abyste z aplikace získali streamování protokolů v reálném čase.

  1. Na webu Azure Portal na stránce Přehled funkce HttpExample . Pomocí ikony Kopírovat do schránky zkopírujte hodnotu skupiny prostředků a aplikace funkcí.

  2. V okně Azure Cloud Shellu zadejte az webapp log tail -n <functionAppName> -g <resourceGroup> příkaz pro streamování protokolů. Nahraďte <functionAppName> hodnoty <resourceGroup> , které jste uložili v předchozím kroku. Příklad:

    az webapp log tail -n event-reporting-20240125192009873 -g learn-f0af729c-0493-4b45-a5b8-d6b4783b03da
    
    
  3. Měl by se zobrazit výstup podobný následující zprávě.

    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. Otevřete novou kartu ve webovém prohlížeči a vložte plně vytvořenou adresu URL z předchozího cvičení pro přístup k aplikaci funkcí a vygenerujte některé protokoly.

  5. Až budete hotovi s testováním, zavřete stream protokolu stisknutím ctrl +C v Cloud Shellu.

Přidání instrumentace do projektu Java pro aplikační Přehledy

Teď, když je pro vaši aplikaci povolená Přehledy aplikace, je vaším dalším úkolem ji povolit ve vaší aplikaci. Pokud chcete povolit protokolování aplikací a Přehledy aplikace, musíte upravit konfigurační soubory tak, aby zahrnovaly požadované knihovny a další závislosti.

Je potřeba aktualizovat dva konfigurační soubory: pom.xml a host.json.

Úprava souboru pom.xml

  1. Pomocí Azure Cloud Shellu změňte adresář na kořenovou složku projektu:

    cd ~/event-reporting
    
  2. Pomocí editoru kódu Cloud Shellu otevřete soubor pom.xml:

    code pom.xml
    
  3. Do samostatné <dependencies> části přidejte následující prvky, které umožní aplikaci Přehledy aplikace:

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

    Poznámka:

    Dejte pozor, abyste <dependency> pro Application Insights přidali do samostatné kolekce <dependencies>, nikoli do kolekce <dependencies>, která je obsažena v elementu <dependencyManagement>.

  4. Stiskněte kombinaci kláves CTRL+S a uložte soubor pom.xml. Potom stisknutím kombinace kláves CTRL+Q zavřete editor kódu.

Úprava souboru host.json

  1. Otevřete soubor host.json pomocí editoru kódu Cloud Shellu:

    code host.json
    
  2. Odeberte existující kód JSON a nahraďte ho následujícím nastavením:

    {
        "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
            }
        }
    }
    

    Nastavení pro extensionBundle již bylo definováno, ale logging a applicationInsights definují různá nastavení pro tyto funkce.

  3. Stiskněte kombinaci kláves CTRL+S a uložte soubor host.json. Stisknutím kombinace kláves CTRL+Q potom zavřete editor kódu.

Přidání protokolování a sledování Application Insights do kódu projektu

Pokud chcete zlepšit užitečnost dat shromážděných aplikací Přehledy, která se zobrazují v souborech protokolů, musíte do kódu aplikace přidat několik příkazů protokolování dat.

Přidání protokolování do souboru Function.java

Pokud chcete do funkce přidat obecné protokolování, můžete přidat kód podobný následujícímu příkladu v klíčových bodech kódu aplikace, kde řetězec nahradíte [LOG MESSAGE] zprávou, kterou chcete zobrazit v souborech protokolu vaší aplikace.

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

Pokud chcete do aplikace přidat protokolování, použijte následující postup.

  1. V editoru Cloud Shellu otevřete soubor Function.java vaší aplikace:

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

    Pokud prozkoumáte existující kód, všimnete si, že existuje existující context.getLogger() příkaz. Je to první instrukce za definicí run() funkce.

  2. Vyhledejte následující část kódu, která testuje prázdný řetězec dotazu GET nebo prázdný požadavek žádosti POST:

    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. Upravte tuto část kódu tak, aby obsahovala dva příkazy context.getLogger(), které odešlou informace o stavu funkce do protokolovacího systému:

    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. Stisknutím kombinace kláves Ctrl+S uložte Function.java soubor, ale nezavírejte editor. V další části tohoto cvičení přidáte do aplikace kód.

Přidání sledování Application Insights do souboru Function.java

  1. Do existující sady importů přidejte následující příkaz import. Tento příkaz naimportuje knihovnu telemetrie Application Insights:

    import com.microsoft.applicationinsights.TelemetryClient;
    
  2. Do třídy Function() vaší aplikace přidejte následující definici. Tento příkaz vytvoří instanci objektu TelemetryClient:

    private TelemetryClient telemetry = new TelemetryClient();
    
  3. Zkopírujte jednotlivé příkazy context.getLogger() a upravte kód tak, aby každá z duplicitních položek místo metody context.getLogger() volala metodu telemetry.trackEvent():

    . . .
    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. Stiskněte kombinaci kláves CTRL+S a uložte soubor Function.java. Potom stisknutím kombinace kláves CTRL+Q zavřete editor kódu.

  5. Poslední věc, kterou je třeba udělat, je sestavení, zabalení a opětovné nasazení aplikace funkce.

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

Do funkce se teď přidá protokolování a shromažďování dat Přehledy aplikace.

Sledování funkce služby Azure Function pomocí Application Insights

Vaše aplikace je teď aktualizovaná tak, aby podporovala podrobné protokolování jak pomocí systémového protokolovacího nástroje, tak pomocí Application Insights.

  1. Pokud chcete vygenerovat ukázkový provoz HTTP, zkopírujte adresu URL, kterou jste použili k otestování aplikace ve webovém prohlížeči v předchozím cvičení. Tuto adresu URL s cURL použijte k vytvoření smyčky v Azure Cloud Shellu; Například:

    while :; do curl https://event-reporting-20200102030405006.azurewebsites.net/api/HttpExample?name=Bob; sleep 1; done
    
  2. Pomocí stejného účtu, kterým jste aktivovali sandbox, se přihlaste na Azure Portal.

  3. V nabídce vlevo vyberte Všechny prostředky.

  4. V seznamu prostředků vyberte svou funkci. Pro toto cvičení začíná název vaší funkce tímto textem: event-reporting. Například: event-reporting-20200102030405006.

  5. Zobrazení aktivity streamování protokolů:

    1. V nabídce Aplikace funkcí vyberte Streamprotokolu.

    2. Otevřete rozevírací seznam Protokoly Přehledy aplikace a vyberte Protokoly systému souborů.

      Image showing where to find Log Streaming.

    3. Všimněte si, že ukázkový provoz generuje řadu položek protokolu.

      Image showing Log Streaming.

  6. Zobrazení aktivity Live Metrics:

    1. Vyberte rozevírací seznam Protokoly systému souborů a vyberte Protokoly Přehledy aplikace.

    2. Vyberte Otevřít v živých metrikách. Teď vidíte, že ukázkový provoz generuje výsledky Přehledy aplikací a živých metrik.

      Image showing Application Insights and Live Metrics highlights.

Blahopřejeme, úspěšně jste nakonfigurovali funkci Azure Functions pro podrobné protokolování.

Než budete pokračovat, přepněte zpět do Cloud Shellu a stisknutím kombinace kláves CTRL+C zavřete smyčku příkazu.