Exercício – Adicionar registro em log e monitorar 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ções. Também aprendeu sobre alguns dos outros recursos de registro em log que estão disponíveis para sua equipe de desenvolvedores.

Nesta etapa da pesquisa do projeto, você implantou o aplicativo de funções no Azure usando o Maven e testou o aplicativo de funções na produção. A próxima tarefa é adicionar a funcionalidade de acompanhamento e registro em log ao seu aplicativo.

Neste exercício, atualize os arquivos de configuração do projeto de função para dar suporte ao streaming de logs e ao Application Insights. Você também aprenderá a adicionar rastreamento personalizado e disparos de eventos do Application Insights ao código do seu projeto.

Transmitir logs em tempo real

Agora que seu Aplicativo de Funções está implantado e em execução no Azure, você poderá solucionar problemas usando o comando simples da CLI do Azure para obter o streaming de logs 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 Aplicativo de funções.

  2. Na janela do Azure Cloud Shell, insira o comando az webapp log tail -n <functionAppName> -g <resourceGroup> para transmitir os registros. 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ê deverá ver uma saída como a mensagem a seguir.

    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 no exercício anterior para acessar o aplicativo de funções e gerar alguns logs.

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

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

Agora que o Application Insights está habilitado no seu aplicativo, sua próxima tarefa será habilitá-lo no seu aplicativo. Para habilitar o registro de aplicativos e o Application Insights, será necessário 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.

Modificação do arquivo pom.xml

  1. Usando o Azure Cloud Shell, altere o diretório para a raiz do seu projeto:

    cd ~/event-reporting
    
  2. Abra o arquivo pom.xml no 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 o seu aplicativo:

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

    Observação

    Verifique se você adicionou o <dependency> para Application Insights à coleção <dependencies> autônoma, não à coleção <dependencies> contida no elemento <dependencyManagement>.

  4. Pressione Ctrl+S para salvar o arquivo pom.xml e, em seguida, pressione Ctrl+Q para fechar o Editor de códigos.

Modificação do arquivo host.json

  1. Abra o arquivo host.json no editor de código do Cloud Shell:

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

    {
        "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 configurações para extensionBundle já foram definidas, mas o logging e applicationInsights definem várias configurações para esses recursos.

  3. Pressione Ctrl+S para salvar seu arquivo host.json e, em seguida, pressione Ctrl+Q para fechar o editor de código.

Adição de registro em log e acompanhamento 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, é necessário adicionar alguns comandos de registros de dados ao código do aplicativo.

Adição do registro em log ao arquivo Function.java

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

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

Para adicionar o registro em log ao seu aplicativo, use as etapas a seguir.

  1. Abra o arquivo Function.java do seu aplicativo no editor do Cloud Shell:

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

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

  2. Localize a seguinte seção de código, que testa se há uma cadeia de caracteres de consulta GET vazia ou uma solicitação POST vazia:

    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 seção de código para que ela contenha dois comandos context.getLogger() que devolvem o status da sua função ao sistema de registro em log:

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

Adição de acompanhamento do Application Insights ao arquivo Function.java

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

    import com.microsoft.applicationinsights.TelemetryClient;
    
  2. Adicione a definição a seguir à classe Function() do seu aplicativo; 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. Pressione Ctrl+S para salvar seu arquivo Function.java e, em seguida, pressione Ctrl+Q para fechar o editor de código.

  5. A última coisa a fazer é criar, empacotar e reimplantar seu aplicativo de funções.

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

Agora, a coleta de dados do registro em log e do Application Insights foi adicionada à sua função.

Uso do Application Insights para monitorar sua função do Azure

Agora seu aplicativo está atualizado para dar suporte ao registro em log refinado com o agente de log do sistema e o Application Insights.

  1. Para gerar alguns exemplos de tráfego HTTP, copie a URL que você usou para testar o 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. Entre no portal do Azure usando a mesma conta que você utilizou para ativar a área restrita.

  3. Selecione Todos os recursos no menu à esquerda.

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

  5. Exiba sua atividade de Streaming de log:

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

    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 o tráfego de amostra gera uma série de entradas de log.

      Image showing Log Streaming.

  6. Exiba sua 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 o seu tráfego de amostra gera resultados do Application Insights e Métricas Dinâmicas.

      Image showing Application Insights and Live Metrics highlights.

Parabéns, você configurou com êxito seu Azure Function para o registro em log detalhado.

Antes de continuar, volte para o Cloud Shell e pressione CTRL+C para fechar o loop de comando.