Exercício – Adicionar registos e monitorizar uma Função do Azure no portal

Concluído

Na unidade anterior, você aprendeu sobre alguns dos benefícios de incorporar o Application Insights em seu aplicativo de função. Você também aprendeu sobre alguns dos outros recursos de registro que estão disponíveis para sua equipe de desenvolvedores.

Nesta etapa da pesquisa de projeto, você implantou seu aplicativo de função no Azure usando o Maven e testou seu aplicativo de função em produção. A próxima tarefa será adicionar uma funcionalidade de registo e de monitorização à aplicação.

Neste exercício, você atualiza os arquivos de configuração do projeto de função para oferecer suporte ao streaming de logs e ao Application Insights. Você também aprenderá como adicionar rastreamento personalizado e gatilhos de eventos do Application Insight ao código do seu projeto.

Transmitir em fluxo registos em tempo real

Agora que seu aplicativo Function está implantado e em execução no Azure, você pode solucioná-lo usando o comando simples da CLI do Azure para obter streaming de log em tempo real do aplicativo.

  1. No portal do Azure, na página Visão geral da sua função HttpExample. Use o ícone Copiar para área de transferência para copiar o valor do seu grupo de recursos e do aplicativo Função.

  2. Na janela do Azure Cloud Shell, insira o az webapp log tail -n <functionAppName> -g <resourceGroup> comando para transmitir logs. Substitua <functionAppName> e <resourceGroup> pelos valores que você salvou na etapa anterior. Por exemplo:

    az webapp log tail -n event-reporting-20240125192009873 -g learn-f0af729c-0493-4b45-a5b8-d6b4783b03da
    
    
  3. Você deve ver a saída como a seguinte mensagem.

    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. Abra uma nova guia no navegador da Web e cole a URL totalmente construída do exercício anterior para acessar seu aplicativo de função e gerar alguns logs.

  5. Quando terminar o teste, pressione Ctrl+C no Cloud Shell para fechar o fluxo de log.

Adicionando instrumentação ao seu projeto Java para Application Insights

Agora que o Application Insights está habilitado para seu aplicativo, sua próxima tarefa para habilitá-lo em seu aplicativo. Para habilitar o log de aplicativos e o Application Insights, você precisa modificar os arquivos de configuração para incluir as bibliotecas necessárias e outras dependências.

Há dois arquivos de configuração que você precisa atualizar: pom.xml e host.json.

Modificar o ficheiro pom.xml

  1. Com o Azure Cloud Shell, mude o diretório para a pasta raiz do projeto:

    cd ~/event-reporting
    
  2. Abra o ficheiro pom.xml com o editor de código do Cloud Shell:

    code pom.xml
    
  3. Adicione os seguintes elementos à seção autônoma <dependencies> para habilitar o Application Insights para seu aplicativo:

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

    Nota

    Confirme que adiciona o <dependency> para o Application Insights à coleção <dependencies> autónoma e não à coleção <dependencies> que está contida no elemento <dependencyManagement>.

  4. Prima Ctrl+S para guardar o ficheiro pom.xml e, em seguida, prima Ctrl+Q para fechar o editor de código.

Modificar o ficheiro host.json

  1. Abra o ficheiro host.json com o editor de código do Cloud Shell:

    code host.json
    
  2. Remova o código JSON existente e substitua-o pelas definições seguintes:

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

    As definições de extensionBundle já tinham sido definidas, mas logging e applicationInsights definem várias definições para essas funcionalidades.

  3. Prima Ctrl+S para guardar o ficheiro host.json e, em seguida, prima Ctrl+Q para fechar o editor de código.

Adicionar os registos e a monitorização do Application Insights ao código do projeto

Para melhorar a utilidade dos dados coletados pelo Application Insights que aparecem em seus arquivos de log, você precisa adicionar alguns comandos de log de dados ao código do aplicativo.

Adicionar registos ao ficheiro Function.java

Para adicionar o log geral à sua função, você pode adicionar código como o exemplo a seguir em pontos-chave no código do aplicativo, onde você substitui a [LOG MESSAGE] cadeia de caracteres por uma mensagem que deseja ver nos arquivos de log do aplicativo.

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

Para adicionar o registo à aplicação, utilize os passos seguintes.

  1. Abra o ficheiro Function.java da aplicação no editor do Cloud Shell:

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

    Se você examinar o código existente, notará que há um comando existente context.getLogger() , é a primeira instrução após a definição da run() função.

  2. Localize a seguinte secção de código, que testa uma cadeia de consulta GET vazia ou um pedido POST vazio:

    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. Modifique esta secção de código de modo a que contenha dois comandos context.getLogger() que emitem o estado da função para o sistema de registo:

    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. Pressione Ctrl+S para salvar seu arquivo Function.java, mas não feche o editor, você adicionará código ao seu aplicativo na próxima seção deste exercício.

Adicionar a monitorização do Application Insights ao ficheiro Function.java

  1. Adicione a seguinte instrução import ao conjunto de importações existente; esta instrução importa a biblioteca de telemetria do Application Insights:

    import com.microsoft.applicationinsights.TelemetryClient;
    
  2. Adicione a seguinte definição à classe Function() da aplicação ; esta instrução instancia um objeto TelemetryClient:

    private TelemetryClient telemetry = new TelemetryClient();
    
  3. Copie cada uma das instruções context.getLogger() e modifique o código para que cada uma das entradas duplicadas chame telemetry.trackEvent() em vez de 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. Prima Ctrl+S para guardar o ficheiro Function.java e, em seguida, prima Ctrl+Q para fechar o editor de código.

  5. A última coisa a fazer é criar, empacotar e reimplementar a aplicação de função.

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

O registro em log e a coleta de dados do Application Insights agora são adicionados à sua função.

Utilizar o Application Insights para monitorizar a Função do Azure

A aplicação está agora atualizada para suportar o registo detalhado com o registo do sistema e o Application Insights.

  1. Para gerar algum tráfego HTTP de exemplo, copie a URL que você usou para testar seu aplicativo em um navegador da Web no exercício anterior. Use essa URL com cURL para criar um loop no Azure Cloud Shell; Por exemplo:

    while :; do curl https://event-reporting-20200102030405006.azurewebsites.net/api/HttpExample?name=Bob; sleep 1; done
    
  2. Inicie sessão no portal do Azure com a mesma conta que utilizou para ativar o sandbox.

  3. Selecione Todos os recursos no menu esquerdo.

  4. Selecione a função na lista de recursos; para este exercício, o nome da função começa por event-reporting. Por exemplo: event-reporting-20200102030405006.

  5. Veja a atividade de Transmissão em Fluxo de Registos:

    1. Selecione Fluxo de log no menu Aplicativo de função.

    2. Abra a lista suspensa Logs do App Insights e selecione Logs do sistema de arquivos.

      Image showing where to find Log Streaming.

    3. Observe que seu tráfego de exemplo gera uma série de entradas de log.

      Image showing Log Streaming.

  6. Veja a atividade do Live Metrics:

    1. Selecione a lista suspensa Logs do sistema de arquivos e selecione Logs do App Insights.

    2. Selecione Abrir em métricas dinâmicas. Agora você pode ver que seu tráfego de exemplo gera resultados do Application Insights e do Live Metrics.

      Image showing Application Insights and Live Metrics highlights.

Parabéns, você configurou com êxito sua Função do Azure para registro em log detalhado.

Antes de continuar, volte ao Cloud Shell e prima Ctrl+C para fechar o ciclo do comando.